@pixerate/editor 0.249.0 → 0.250.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 (69) hide show
  1. package/dist/animation-editor/index.cjs +114 -113
  2. package/dist/animation-editor/index.js +7 -6
  3. package/dist/{brushstrokeRender-T3JZST44.js → brushstrokeRender-2FHFLSEG.js} +4 -3
  4. package/dist/{brushstrokeRender-GCKK7V2I.cjs → brushstrokeRender-QGRXOKDA.cjs} +7 -6
  5. package/dist/canvas/index.cjs +71 -15
  6. package/dist/canvas/index.d.cts +1 -0
  7. package/dist/canvas/index.d.ts +1 -0
  8. package/dist/canvas/index.js +58 -2
  9. package/dist/canvas/stickers.d.cts +35 -0
  10. package/dist/canvas/stickers.d.ts +35 -0
  11. package/dist/{chunk-RXZL4NG5.js → chunk-226QDRO3.js} +1 -1
  12. package/dist/{chunk-UBRJOIR5.js → chunk-3TWOCSCY.js} +1 -1
  13. package/dist/{chunk-ZEYMKDYS.cjs → chunk-4JNWA3VT.cjs} +53 -20
  14. package/dist/{chunk-L3JFOTBQ.js → chunk-5E2Q7ZHI.js} +1 -1
  15. package/dist/{chunk-AU6MWQKZ.js → chunk-ABL7IWFZ.js} +1 -1
  16. package/dist/{chunk-LJRCU3BJ.cjs → chunk-ATK6ABN3.cjs} +15 -13
  17. package/dist/{chunk-H4AOUUBE.cjs → chunk-GT77U7QG.cjs} +18 -16
  18. package/dist/{chunk-GHCSC2WP.cjs → chunk-ISIO63Q5.cjs} +21 -15
  19. package/dist/{chunk-OFH6Q67U.js → chunk-JA57JIT5.js} +9 -3
  20. package/dist/{chunk-PZP2SZIZ.js → chunk-KDLBJ6QR.js} +1 -1
  21. package/dist/{chunk-LP2MCSBE.cjs → chunk-M2VKFE5L.cjs} +86 -86
  22. package/dist/{chunk-DOIU7VJG.js → chunk-NOHJP5TK.js} +1 -1
  23. package/dist/{chunk-O75V4ZS3.js → chunk-NTRAVM2I.js} +1 -1
  24. package/dist/{chunk-J7T5QZ45.js → chunk-OTEPAQJX.js} +4 -2
  25. package/dist/{chunk-QOBCBGGI.cjs → chunk-QKXO6JPP.cjs} +14 -14
  26. package/dist/{chunk-6BIDVPED.js → chunk-SMSGP2HQ.js} +1 -1
  27. package/dist/chunk-SZTI6EER.js +13 -0
  28. package/dist/{chunk-EJLRBS5Q.js → chunk-U4NUOKBT.js} +4 -2
  29. package/dist/chunk-U67EN7GG.cjs +13 -0
  30. package/dist/{chunk-5RH3VXAK.js → chunk-WKH5ZAUA.js} +45 -12
  31. package/dist/{chunk-IOFVM3L3.cjs → chunk-WPUXGDH4.cjs} +2 -2
  32. package/dist/{chunk-2SMMZDMG.cjs → chunk-X7WRL5ZZ.cjs} +35 -35
  33. package/dist/{chunk-WLJZZHUZ.cjs → chunk-YM6ZBTXG.cjs} +23 -23
  34. package/dist/{chunk-KYX7NZ5V.cjs → chunk-YW43M56C.cjs} +1 -1
  35. package/dist/{chunk-K5DS2JTA.cjs → chunk-Z3BRH4JK.cjs} +6 -6
  36. package/dist/{chunk-XNZFVYC2.cjs → chunk-ZBCT5MEA.cjs} +7 -7
  37. package/dist/effects/helpers.d.cts +6 -0
  38. package/dist/effects/helpers.d.ts +6 -0
  39. package/dist/effects/index.cjs +62 -60
  40. package/dist/effects/index.js +5 -3
  41. package/dist/effects/tools.d.cts +6 -0
  42. package/dist/effects/tools.d.ts +6 -0
  43. package/dist/image-editor/effects.d.cts +1 -1
  44. package/dist/image-editor/effects.d.ts +1 -1
  45. package/dist/image-editor/index.cjs +814 -791
  46. package/dist/image-editor/index.d.cts +1 -0
  47. package/dist/image-editor/index.d.ts +1 -0
  48. package/dist/image-editor/index.js +35 -12
  49. package/dist/image-editor/stickers.d.cts +9 -0
  50. package/dist/image-editor/stickers.d.ts +9 -0
  51. package/dist/paint-editor/index.cjs +165 -164
  52. package/dist/paint-editor/index.js +8 -7
  53. package/dist/stickers/index.cjs +22 -16
  54. package/dist/stickers/index.d.cts +1 -1
  55. package/dist/stickers/index.d.ts +1 -1
  56. package/dist/stickers/index.js +9 -3
  57. package/dist/stickers/tools.d.cts +57 -1
  58. package/dist/stickers/tools.d.ts +57 -1
  59. package/dist/vector/index.cjs +1003 -969
  60. package/dist/vector/index.d.cts +1 -0
  61. package/dist/vector/index.d.ts +1 -0
  62. package/dist/vector/index.js +40 -6
  63. package/dist/vector/stickers.d.cts +11 -0
  64. package/dist/vector/stickers.d.ts +11 -0
  65. package/dist/video-editor/index.cjs +344 -344
  66. package/dist/video-editor/index.js +4 -4
  67. package/package.json +1 -1
  68. package/skills/pixerate-image-editor/SKILL.md +1 -1
  69. package/skills/pixerate-stickers/SKILL.md +13 -1
@@ -1,10 +1,10 @@
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; var _class3; var _class4; var _class5; var _class6; var _class7; var _class8; var _class9; var _class10; var _class11; var _class12; var _class13; var _class14;
2
2
 
3
3
 
4
- var _chunkLJRCU3BJcjs = require('../chunk-LJRCU3BJ.cjs');
4
+ var _chunkATK6ABN3cjs = require('../chunk-ATK6ABN3.cjs');
5
5
 
6
6
 
7
- var _chunkXNZFVYC2cjs = require('../chunk-XNZFVYC2.cjs');
7
+ var _chunkZBCT5MEAcjs = require('../chunk-ZBCT5MEA.cjs');
8
8
 
9
9
 
10
10
 
@@ -12,7 +12,7 @@ var _chunkXNZFVYC2cjs = require('../chunk-XNZFVYC2.cjs');
12
12
 
13
13
 
14
14
 
15
- var _chunkLP2MCSBEcjs = require('../chunk-LP2MCSBE.cjs');
15
+ var _chunkM2VKFE5Lcjs = require('../chunk-M2VKFE5L.cjs');
16
16
  require('../chunk-A2IS7EHE.cjs');
17
17
  require('../chunk-SS53NNZO.cjs');
18
18
 
@@ -68,7 +68,7 @@ var _chunkJLWLX52Lcjs = require('../chunk-JLWLX52L.cjs');
68
68
 
69
69
 
70
70
  var _chunkK7ENM55Pcjs = require('../chunk-K7ENM55P.cjs');
71
- require('../chunk-IOFVM3L3.cjs');
71
+ require('../chunk-WPUXGDH4.cjs');
72
72
 
73
73
 
74
74
 
@@ -155,7 +155,7 @@ require('../chunk-IOFVM3L3.cjs');
155
155
 
156
156
 
157
157
 
158
- var _chunkH4AOUUBEcjs = require('../chunk-H4AOUUBE.cjs');
158
+ var _chunkGT77U7QGcjs = require('../chunk-GT77U7QG.cjs');
159
159
 
160
160
 
161
161
 
@@ -163,10 +163,11 @@ var _chunkH4AOUUBEcjs = require('../chunk-H4AOUUBE.cjs');
163
163
 
164
164
 
165
165
 
166
- var _chunkZEYMKDYScjs = require('../chunk-ZEYMKDYS.cjs');
166
+ var _chunk4JNWA3VTcjs = require('../chunk-4JNWA3VT.cjs');
167
167
  require('../chunk-CVFAAZXE.cjs');
168
168
  require('../chunk-GF2RBSDM.cjs');
169
169
  require('../chunk-NM3G4VQT.cjs');
170
+ require('../chunk-U67EN7GG.cjs');
170
171
 
171
172
 
172
173
  var _chunkPY4GWSE2cjs = require('../chunk-PY4GWSE2.cjs');
@@ -175,7 +176,7 @@ var _chunkPY4GWSE2cjs = require('../chunk-PY4GWSE2.cjs');
175
176
 
176
177
 
177
178
 
178
- var _chunkGHCSC2WPcjs = require('../chunk-GHCSC2WP.cjs');
179
+ var _chunkISIO63Q5cjs = require('../chunk-ISIO63Q5.cjs');
179
180
  require('../chunk-WOFXZ3XU.cjs');
180
181
 
181
182
 
@@ -329,7 +330,7 @@ function normalizeCanvas(raw) {
329
330
  function createPaintDocument(options = {}) {
330
331
  const canvas = normalizeCanvas({ width: _nullishCoalesce(options.width, () => ( 2048)), height: _nullishCoalesce(options.height, () => ( 1536)), dpi: options.dpi });
331
332
  const layer = createPaintLayer("Layer 1");
332
- return { canvas, paper: _chunkH4AOUUBEcjs.normalizePaper.call(void 0, _nullishCoalesce(options.paper, () => ( {}))), layers: [layer], activeLayerId: layer.id, strokes: [] };
333
+ return { canvas, paper: _chunkGT77U7QGcjs.normalizePaper.call(void 0, _nullishCoalesce(options.paper, () => ( {}))), layers: [layer], activeLayerId: layer.id, strokes: [] };
333
334
  }
334
335
 
335
336
  // src/paint-editor/dab-stroke.ts
@@ -383,13 +384,13 @@ var PaintDabStroke = (_class = class {
383
384
  constructor(brush, options) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this);_class.prototype.__init4.call(this);_class.prototype.__init5.call(this);_class.prototype.__init6.call(this);_class.prototype.__init7.call(this);_class.prototype.__init8.call(this);_class.prototype.__init9.call(this);_class.prototype.__init10.call(this);
384
385
  this.brush = brush;
385
386
  this.options = options;
386
- this.smoother = new (0, _chunkH4AOUUBEcjs.PenSmoother)(brush.tip.smoothing, brush.pressureSmoothing);
387
- this.copies = _optionalChain([options, 'access', _2 => _2.copies, 'optionalAccess', _3 => _3.length]) ? options.copies : [_chunkH4AOUUBEcjs.IDENTITY_COPY];
387
+ this.smoother = new (0, _chunkGT77U7QGcjs.PenSmoother)(brush.tip.smoothing, brush.pressureSmoothing);
388
+ this.copies = _optionalChain([options, 'access', _2 => _2.copies, 'optionalAccess', _3 => _3.length]) ? options.copies : [_chunkGT77U7QGcjs.IDENTITY_COPY];
388
389
  const exchanging = brush.engine === "mixer" || brush.engine === "dab";
389
390
  const rates = brush.engine === "mixer" ? _chunkI7NJPHWVcjs.mixerRates.call(void 0, brush.mixer) : _chunkI7NJPHWVcjs.exchangeRates.call(void 0, brush.behavior.pickup, brush.behavior.mix, 1, brush.behavior.mixing);
390
391
  this.mixing = brush.engine === "mixer" ? brush.mixer.mixing : brush.behavior.mixing;
391
392
  this.states = this.copies.map((c, i) => ({
392
- walker: new (0, _chunkH4AOUUBEcjs.PenDabWalker)(brush, (_nullishCoalesce(options.seed, () => ( 0))) + i * 7919 | 0, c.linear),
393
+ walker: new (0, _chunkGT77U7QGcjs.PenDabWalker)(brush, (_nullishCoalesce(options.seed, () => ( 0))) + i * 7919 | 0, c.linear),
393
394
  exchange: exchanging ? new (0, _chunkI7NJPHWVcjs.PaintExchange)(rates, options.load) : null,
394
395
  smudge: brush.engine === "smudge" ? new (0, _chunkI7NJPHWVcjs.SmudgeTip)(brush.smudge, brush.tip.size * (1 + brush.dynamics.tiltSize * 1.5)) : null
395
396
  }));
@@ -502,7 +503,7 @@ var PaintDabStroke = (_class = class {
502
503
  let flow = 1;
503
504
  if (this.options.effect) {
504
505
  const rgb = [0, 0, 0];
505
- flow = _chunkH4AOUUBEcjs.sampleEffectAt.call(void 0, this.options.effect, d.x, d.y, rgb, d);
506
+ flow = _chunkGT77U7QGcjs.sampleEffectAt.call(void 0, this.options.effect, d.x, d.y, rgb, d);
506
507
  ex.setReservoirColor(rgb[0], rgb[1], rgb[2]);
507
508
  } else if (this.sampler && !this.gradient) {
508
509
  const g = this.sampler.dab(d, this.sample);
@@ -733,12 +734,12 @@ var ThickStrokeDriver = (_class3 = class {
733
734
  constructor(init) {;_class3.prototype.__init12.call(this);_class3.prototype.__init13.call(this);_class3.prototype.__init14.call(this);_class3.prototype.__init15.call(this);_class3.prototype.__init16.call(this);_class3.prototype.__init17.call(this);_class3.prototype.__init18.call(this);_class3.prototype.__init19.call(this);_class3.prototype.__init20.call(this);_class3.prototype.__init21.call(this);
734
735
  this.init = init;
735
736
  const b = init.brush;
736
- this.smoother = new (0, _chunkH4AOUUBEcjs.PenSmoother)(b.tip.smoothing, b.pressureSmoothing);
737
- const copies = init.copies.length ? init.copies : [_chunkH4AOUUBEcjs.IDENTITY_COPY];
737
+ this.smoother = new (0, _chunkGT77U7QGcjs.PenSmoother)(b.tip.smoothing, b.pressureSmoothing);
738
+ const copies = init.copies.length ? init.copies : [_chunkGT77U7QGcjs.IDENTITY_COPY];
738
739
  this.copies = copies;
739
740
  const rates = _chunkI7NJPHWVcjs.exchangeRates.call(void 0, b.behavior.pickup, b.behavior.mix, 1, b.behavior.mixing);
740
741
  this.states = copies.map((c, i) => ({
741
- walker: new (0, _chunkH4AOUUBEcjs.PenDabWalker)(b, init.seed + i * 7919 | 0, c.linear),
742
+ walker: new (0, _chunkGT77U7QGcjs.PenDabWalker)(b, init.seed + i * 7919 | 0, c.linear),
742
743
  exchange: new (0, _chunkI7NJPHWVcjs.PaintExchange)(rates, init.load),
743
744
  smudge: b.impasto.tool === "knife" ? new (0, _chunkI7NJPHWVcjs.SmudgeTip)({ strength: 0.85, length: 0.6 + 0.38 * b.impasto.drag, mixing: b.behavior.mixing }, b.tip.size * 1.2) : null,
744
745
  carried: null,
@@ -884,7 +885,7 @@ var ThickStrokeDriver = (_class3 = class {
884
885
  let flow = 1;
885
886
  const effect = this.init.effect;
886
887
  if (effect) {
887
- _chunkH4AOUUBEcjs.sampleEffectAt.call(void 0, effect, d.x, d.y, this.centre, d);
888
+ _chunkGT77U7QGcjs.sampleEffectAt.call(void 0, effect, d.x, d.y, this.centre, d);
888
889
  ex.setReservoirColor(this.centre[0], this.centre[1], this.centre[2]);
889
890
  } else if (this.sampler) {
890
891
  const g = this.sampler.dab(d, this.sample);
@@ -901,7 +902,7 @@ var ThickStrokeDriver = (_class3 = class {
901
902
  let field = null;
902
903
  if (effect) {
903
904
  field = new Float32Array(n * 3);
904
- _chunkH4AOUUBEcjs.effectDabField.call(void 0, effect, rect, cov, this.centre, this.paint, field, 0, d);
905
+ _chunkGT77U7QGcjs.effectDabField.call(void 0, effect, rect, cov, this.centre, this.paint, field, 0, d);
905
906
  }
906
907
  this.medium.deposit(rect, cov, dep, this.paint, ex.paintPigment, field);
907
908
  }
@@ -1078,7 +1079,7 @@ function shadowToLight(shadow) {
1078
1079
  return new (0, _chunk474IQG74cjs.TiledSurface)(1, tiles, 0);
1079
1080
  }
1080
1081
  function lightTwinBrush(brush) {
1081
- return _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0,
1082
+ return _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0,
1082
1083
  {
1083
1084
  tip: { ...brush.tip, blend: "normal", pressureOpacity: brush.tip.pressureOpacity || brush.light.pressure },
1084
1085
  behavior: { ...brush.behavior, mixing: "rgb" },
@@ -1308,7 +1309,7 @@ var PaintStrokeSession = (_class5 = class _PaintStrokeSession {
1308
1309
  this.layerId = init.layerId;
1309
1310
  this.base = init.surface;
1310
1311
  this.live = new Map(this.base.tiles);
1311
- this.copies = init.copies.length ? init.copies : [_chunkH4AOUUBEcjs.IDENTITY_COPY];
1312
+ this.copies = init.copies.length ? init.copies : [_chunkGT77U7QGcjs.IDENTITY_COPY];
1312
1313
  const brush = init.brush;
1313
1314
  if (init.wet) this.wetDriver = init.wet.driver;
1314
1315
  if (init.light && !init.wet && !init.sticker) this.lightTwin = this.makeLightTwin(init.light.surface);
@@ -1325,11 +1326,11 @@ var PaintStrokeSession = (_class5 = class _PaintStrokeSession {
1325
1326
  };
1326
1327
  if (this.wetDriver) {
1327
1328
  } else if (init.sticker) {
1328
- this.stickerSpray = new (0, _chunkH4AOUUBEcjs.StickerSpray)({ brush, target: this.tileTarget(), color: init.colorHex, seed: init.seed, copies: this.copies, nextId: init.sticker.nextId, paint: _nullishCoalesce(init.paint, () => ( null)), effect, art: init.sticker.art });
1329
+ this.stickerSpray = new (0, _chunkGT77U7QGcjs.StickerSpray)({ brush, target: this.tileTarget(), color: init.colorHex, seed: init.seed, copies: this.copies, nextId: init.sticker.nextId, paint: _nullishCoalesce(init.paint, () => ( null)), effect, art: init.sticker.art });
1329
1330
  } else if (init.thick) {
1330
1331
  const rgb = (c) => [c[0] / 255, c[1] / 255, c[2] / 255];
1331
1332
  this.thickDriver = new ThickStrokeDriver({ brush, target: this.tileTarget(), channels: init.thick.channels, color: rgb(init.color), load: init.mixerLoad, seed: init.seed, copies: this.copies, paint: _nullishCoalesce(init.paint, () => ( null)), effect });
1332
- } else if (brush.engine === "mixer" || brush.engine === "blender" || brush.engine === "smudge" || _chunkH4AOUUBEcjs.usesPaintExchange.call(void 0, brush, Boolean(init.paint))) {
1333
+ } else if (brush.engine === "mixer" || brush.engine === "blender" || brush.engine === "smudge" || _chunkGT77U7QGcjs.usesPaintExchange.call(void 0, brush, Boolean(init.paint))) {
1333
1334
  const rgb = (c) => [c[0] / 255, c[1] / 255, c[2] / 255];
1334
1335
  this.wet = new PaintDabStroke(brush, {
1335
1336
  target: this.tileTarget(),
@@ -1345,7 +1346,7 @@ var PaintStrokeSession = (_class5 = class _PaintStrokeSession {
1345
1346
  });
1346
1347
  } else {
1347
1348
  const opts = { grain: init.grain, paperDepth: init.paperDepth, seed: init.seed, copies: this.copies, paint: _nullishCoalesce(init.paint, () => ( null)), effect };
1348
- this.dry = brush.engine === "particle" ? new (0, _chunkH4AOUUBEcjs.ParticleStroke)(brush, opts) : brush.engine === "bristle" ? new (0, _chunkH4AOUUBEcjs.BristleStroke)(brush, opts) : new (0, _chunkH4AOUUBEcjs.DryStroke)(brush, opts);
1349
+ this.dry = brush.engine === "particle" ? new (0, _chunkGT77U7QGcjs.ParticleStroke)(brush, opts) : brush.engine === "bristle" ? new (0, _chunkGT77U7QGcjs.BristleStroke)(brush, opts) : new (0, _chunkGT77U7QGcjs.DryStroke)(brush, opts);
1349
1350
  }
1350
1351
  }
1351
1352
 
@@ -1567,7 +1568,7 @@ function brushLoadForStroke(brush, current, color) {
1567
1568
  if (brush.engine === "mixer") return mixerLoadForStroke(brush, current, color);
1568
1569
  if (brush.engine === "impasto") return { reservoir: [color[0], color[1], color[2]], amount: 1, pickup: brush.behavior.dirty ? current.pickup : null };
1569
1570
  if (brush.engine === "wet") return brush.wet.tool === "paint" ? { reservoir: [color[0], color[1], color[2]], amount: 1, pickup: brush.behavior.dirty ? current.pickup : null } : _chunkI7NJPHWVcjs.EMPTY_MIXER_LOAD;
1570
- if (_chunkH4AOUUBEcjs.usesPaintExchange.call(void 0, brush)) return { reservoir: [color[0], color[1], color[2]], amount: 1, pickup: brush.behavior.dirty ? current.pickup : null };
1571
+ if (_chunkGT77U7QGcjs.usesPaintExchange.call(void 0, brush)) return { reservoir: [color[0], color[1], color[2]], amount: 1, pickup: brush.behavior.dirty ? current.pickup : null };
1571
1572
  return _chunkI7NJPHWVcjs.EMPTY_MIXER_LOAD;
1572
1573
  }
1573
1574
 
@@ -1835,7 +1836,7 @@ function normalizeBrushStroke(raw) {
1835
1836
  const out = {
1836
1837
  id: r.id,
1837
1838
  layerId: r.layerId,
1838
- brush: _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, _nullishCoalesce(r.brush, () => ( {}))),
1839
+ brush: _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, _nullishCoalesce(r.brush, () => ( {}))),
1839
1840
  color: typeof r.color === "string" && /^#[0-9a-f]{6}$/i.test(r.color) ? r.color.toLowerCase() : "#000000",
1840
1841
  points,
1841
1842
  seed: finite2(r.seed) ? r.seed | 0 : 0
@@ -1854,7 +1855,7 @@ function normalizeBrushStroke(raw) {
1854
1855
  }
1855
1856
  if (st.length) out.stencils = st;
1856
1857
  }
1857
- const effect = _chunkH4AOUUBEcjs.readPaintEffectPaint.call(void 0, r.paint);
1858
+ const effect = _chunkGT77U7QGcjs.readPaintEffectPaint.call(void 0, r.paint);
1858
1859
  const paint = effect ? null : _chunkI7NJPHWVcjs.readPaintSource.call(void 0, r.paint);
1859
1860
  if (effect) out.paint = effect;
1860
1861
  else if (paint && paint.type === "gradient") out.paint = paint;
@@ -1894,7 +1895,7 @@ function varyStroke(stroke, m, v) {
1894
1895
  if (ps !== 1) q.pressure = Math.min(1, Math.max(0, (_nullishCoalesce(p.pressure, () => ( 1))) * ps));
1895
1896
  return q;
1896
1897
  });
1897
- const brush = s !== 1 ? _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, { ...stroke.brush, tip: { ...stroke.brush.tip, size: stroke.brush.tip.size * s } }) : stroke.brush;
1898
+ const brush = s !== 1 ? _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, { ...stroke.brush, tip: { ...stroke.brush.tip, size: stroke.brush.tip.size * s } }) : stroke.brush;
1898
1899
  const out = { ...stroke, brush, points };
1899
1900
  if (_optionalChain([stroke, 'access', _90 => _90.paint, 'optionalAccess', _91 => _91.type]) === "gradient" && s !== 1) out.paint = _chunkI7NJPHWVcjs.scalePaintGradient.call(void 0, stroke.paint, s);
1900
1901
  if (_optionalChain([stroke, 'access', _92 => _92.paint, 'optionalAccess', _93 => _93.type]) === "effect" && stroke.paint.map && s !== 1) out.paint = { ...stroke.paint, map: { ...stroke.paint.map, length: Math.min(4096, Math.max(16, Math.round(stroke.paint.map.length * s))) } };
@@ -1939,7 +1940,7 @@ function paperTile(paper, r, light) {
1939
1940
  const key = `${paperKey(paper, light)}|${r.x},${r.y},${r.width},${r.height}`;
1940
1941
  let t = tileCache.get(key);
1941
1942
  if (!t) {
1942
- t = _chunkH4AOUUBEcjs.renderPaper.call(void 0, paper, r, paperGrain(paper), light);
1943
+ t = _chunkGT77U7QGcjs.renderPaper.call(void 0, paper, r, paperGrain(paper), light);
1943
1944
  if (tileCache.size > 512) tileCache.delete(tileCache.keys().next().value);
1944
1945
  tileCache.set(key, t);
1945
1946
  }
@@ -2044,11 +2045,11 @@ function header(state, options) {
2044
2045
  return out;
2045
2046
  }
2046
2047
  function serializePaintDocument(state, options = {}) {
2047
- const { layers, assets } = _chunkLP2MCSBEcjs.serializeLayers.call(void 0, state.layers);
2048
+ const { layers, assets } = _chunkM2VKFE5Lcjs.serializeLayers.call(void 0, state.layers);
2048
2049
  return { ...header(state, options), layers, assets };
2049
2050
  }
2050
2051
  async function serializePaintDocumentExternal(state, store, options = {}) {
2051
- const { layers, assets } = await _chunkLP2MCSBEcjs.serializeLayersExternal.call(void 0, state.layers, store);
2052
+ const { layers, assets } = await _chunkM2VKFE5Lcjs.serializeLayersExternal.call(void 0, state.layers, store);
2052
2053
  return { ...header(state, options), layers, assets };
2053
2054
  }
2054
2055
  function paintLayersOnly(layers, problems) {
@@ -2083,9 +2084,9 @@ function deserializePaintDocument(raw) {
2083
2084
  }
2084
2085
  const problems = [];
2085
2086
  const canvas = normalizeCanvas({ width: r.width, height: r.height, dpi: _nullishCoalesce(r.dpi, () => ( void 0)) });
2086
- const paper = _chunkH4AOUUBEcjs.normalizePaper.call(void 0, _nullishCoalesce(r.paper, () => ( {})));
2087
+ const paper = _chunkGT77U7QGcjs.normalizePaper.call(void 0, _nullishCoalesce(r.paper, () => ( {})));
2087
2088
  const assets = r.assets && typeof r.assets === "object" ? r.assets : {};
2088
- const layers = paintLayersOnly(_chunkLP2MCSBEcjs.deserializeLayers.call(void 0, r.layers, { assets, problems }), problems);
2089
+ const layers = paintLayersOnly(_chunkM2VKFE5Lcjs.deserializeLayers.call(void 0, r.layers, { assets, problems }), problems);
2089
2090
  const wanted = typeof r.activeLayerId === "string" ? r.activeLayerId : null;
2090
2091
  const activeLayerId = wanted && _chunkDPYAO5U6cjs.findLayer.call(void 0, layers, wanted) ? wanted : _nullishCoalesce(_optionalChain([_chunkDPYAO5U6cjs.flattenLayers.call(void 0, layers), 'access', _107 => _107.filter, 'call', _108 => _108((l) => l.type === "pixel"), 'access', _109 => _109.pop, 'call', _110 => _110(), 'optionalAccess', _111 => _111.id]), () => ( null));
2091
2092
  const wetEvents = Array.isArray(r.wetEvents) ? r.wetEvents.filter((e) => e && typeof e === "object" && Number.isInteger(e.clock) && typeof e.kind === "string") : [];
@@ -2101,7 +2102,7 @@ async function deserializePaintDocumentAsync(raw, store) {
2101
2102
  if (!raw || typeof raw !== "object") throw new Error("Not a paint document: expected a JSON object.");
2102
2103
  const r = raw;
2103
2104
  const problems = [];
2104
- const assets = await _chunkLP2MCSBEcjs.resolveExternalAssets.call(void 0, _nullishCoalesce(r.assets, () => ( {})), store, problems);
2105
+ const assets = await _chunkM2VKFE5Lcjs.resolveExternalAssets.call(void 0, _nullishCoalesce(r.assets, () => ( {})), store, problems);
2105
2106
  const loaded = deserializePaintDocument({ ...r, assets });
2106
2107
  return { ...loaded, problems: [...problems, ...loaded.problems] };
2107
2108
  }
@@ -2184,7 +2185,7 @@ function pointerToPenPoint(e, x, y, view) {
2184
2185
  const p = { x, y, pressure: samplePressure(e) };
2185
2186
  if (typeof e.timeStamp === "number" && Number.isFinite(e.timeStamp)) p.t = e.timeStamp;
2186
2187
  if (e.pointerType !== "pen") return p;
2187
- const o = _chunkH4AOUUBEcjs.penOrientation.call(void 0, {
2188
+ const o = _chunkGT77U7QGcjs.penOrientation.call(void 0, {
2188
2189
  x,
2189
2190
  y,
2190
2191
  altitude: typeof e.altitudeAngle === "number" ? e.altitudeAngle : void 0,
@@ -2264,7 +2265,7 @@ function wetPaperInput(paper) {
2264
2265
  absorption: paper.absorption,
2265
2266
  permeability: paper.permeability,
2266
2267
  roughness: flat ? 0 : paper.roughness,
2267
- color: _chunkH4AOUUBEcjs.hexToRgb8.call(void 0, paper.color),
2268
+ color: _chunkGT77U7QGcjs.hexToRgb8.call(void 0, paper.color),
2268
2269
  heightAt: flat ? () => 0.5 : (x, y) => grain.at(x, y)
2269
2270
  };
2270
2271
  }
@@ -2272,8 +2273,8 @@ var WetStrokeDriver = (_class6 = class {
2272
2273
  constructor(init) {;_class6.prototype.__init40.call(this);_class6.prototype.__init41.call(this);_class6.prototype.__init42.call(this);_class6.prototype.__init43.call(this);_class6.prototype.__init44.call(this);_class6.prototype.__init45.call(this);_class6.prototype.__init46.call(this);_class6.prototype.__init47.call(this);_class6.prototype.__init48.call(this);_class6.prototype.__init49.call(this);_class6.prototype.__init50.call(this);_class6.prototype.__init51.call(this);_class6.prototype.__init52.call(this);
2273
2274
  this.init = init;
2274
2275
  const brush = init.brush;
2275
- this.smoother = new (0, _chunkH4AOUUBEcjs.PenSmoother)(brush.tip.smoothing, brush.pressureSmoothing);
2276
- const copies = init.copies.length ? init.copies : [_chunkH4AOUUBEcjs.IDENTITY_COPY];
2276
+ this.smoother = new (0, _chunkGT77U7QGcjs.PenSmoother)(brush.tip.smoothing, brush.pressureSmoothing);
2277
+ const copies = init.copies.length ? init.copies : [_chunkGT77U7QGcjs.IDENTITY_COPY];
2277
2278
  const wet = brush.wet;
2278
2279
  const spacing = Math.max(0.02, brush.tip.spacing);
2279
2280
  const perDab = Math.min(1, spacing * 1.2);
@@ -2287,7 +2288,7 @@ var WetStrokeDriver = (_class6 = class {
2287
2288
  this.lightBase = wet.tool === "paint" ? STROKE_LIGHT * brush.light.amount * (1 - 0.6 * thin) * perDab : 0;
2288
2289
  const rates = _chunkI7NJPHWVcjs.exchangeRates.call(void 0, brush.behavior.pickup, brush.behavior.mix, wet.load, brush.behavior.mixing);
2289
2290
  this.states = copies.map((c, i) => ({
2290
- walker: new (0, _chunkH4AOUUBEcjs.PenDabWalker)(brush, init.seed + i * 7919 | 0, c.linear),
2291
+ walker: new (0, _chunkGT77U7QGcjs.PenDabWalker)(brush, init.seed + i * 7919 | 0, c.linear),
2291
2292
  exchange: wet.tool === "paint" ? new (0, _chunkI7NJPHWVcjs.PaintExchange)(rates, init.load) : null,
2292
2293
  last: null
2293
2294
  }));
@@ -2417,7 +2418,7 @@ var WetStrokeDriver = (_class6 = class {
2417
2418
  let flow = 1;
2418
2419
  const effect = this.init.effect;
2419
2420
  if (effect) {
2420
- _chunkH4AOUUBEcjs.sampleEffectAt.call(void 0, effect, d.x, d.y, this.centre, d);
2421
+ _chunkGT77U7QGcjs.sampleEffectAt.call(void 0, effect, d.x, d.y, this.centre, d);
2421
2422
  ex.setReservoirColor(this.centre[0], this.centre[1], this.centre[2]);
2422
2423
  } else if (this.sampler) {
2423
2424
  const g = this.sampler.dab(d, this.sample);
@@ -2429,7 +2430,7 @@ var WetStrokeDriver = (_class6 = class {
2429
2430
  if (total > 0 && flow > 0 && effect) {
2430
2431
  const ec = cov.slice();
2431
2432
  const field = new Float32Array(ec.length * 3);
2432
- _chunkH4AOUUBEcjs.effectDabField.call(void 0, effect, rect, ec, this.centre, this.paint, field, COVERAGE_STEPS, d);
2433
+ _chunkGT77U7QGcjs.effectDabField.call(void 0, effect, rect, ec, this.centre, this.paint, field, COVERAGE_STEPS, d);
2433
2434
  this.medium.deposit(rect, ec, Math.min(1, total) * k, this.paint, null, field);
2434
2435
  } else if (total > 0 && flow > 0) this.medium.deposit(rect, cov, Math.min(1, total) * k * flow, this.paint, null);
2435
2436
  else world.paint(laneId, rect, cov, this.medium.options.water * k, null);
@@ -2932,7 +2933,7 @@ var PaintWetLayers = (_class7 = class {
2932
2933
  }
2933
2934
  }, _class7);
2934
2935
  function wetPigmentOf(hex, body) {
2935
- const [r, g, b] = _chunkH4AOUUBEcjs.hexToRgb8.call(void 0, hex);
2936
+ const [r, g, b] = _chunkGT77U7QGcjs.hexToRgb8.call(void 0, hex);
2936
2937
  return Array.from(_chunkKBYB7OWBcjs.pigmentOf.call(void 0, [r / 255, g / 255, b / 255], body));
2937
2938
  }
2938
2939
 
@@ -2946,7 +2947,7 @@ function paintWetTestStroke(brush, paper, color, width, height) {
2946
2947
  const w = thumbWorld;
2947
2948
  if (w.hasLane("thumb")) w.removeLane("thumb");
2948
2949
  w.ensureLane("thumb");
2949
- const [r, g, b] = _chunkH4AOUUBEcjs.hexToRgb8.call(void 0, color);
2950
+ const [r, g, b] = _chunkGT77U7QGcjs.hexToRgb8.call(void 0, color);
2950
2951
  if (brush.wet.tool !== "paint" && brush.wet.tool !== "water") {
2951
2952
  const half = Math.ceil(height / 2);
2952
2953
  w.paint("thumb", { x: 0, y: 0, width, height: half }, null, 0.4, Array.from(_chunkKBYB7OWBcjs.pigmentOf.call(void 0, [r / 255, g / 255, b / 255], 0), (v) => v * 0.05));
@@ -2960,9 +2961,9 @@ function paintWetTestStroke(brush, paper, color, width, height) {
2960
2961
  load: brushLoadForStroke(brush, _chunkI7NJPHWVcjs.EMPTY_MIXER_LOAD, [r / 255, g / 255, b / 255]),
2961
2962
  grain: paperGrain(paper),
2962
2963
  paperDepth: paper.depth,
2963
- paperColor: _chunkH4AOUUBEcjs.hexToRgb8.call(void 0, paper.color),
2964
+ paperColor: _chunkGT77U7QGcjs.hexToRgb8.call(void 0, paper.color),
2964
2965
  seed: 7,
2965
- copies: [_chunkH4AOUUBEcjs.IDENTITY_COPY]
2966
+ copies: [_chunkGT77U7QGcjs.IDENTITY_COPY]
2966
2967
  });
2967
2968
  driver.push(thumbnailStroke(width, height));
2968
2969
  driver.finish();
@@ -2982,7 +2983,7 @@ function thumbnailStroke(width, height) {
2982
2983
  return pts;
2983
2984
  }
2984
2985
  function paintTestStroke(surface, brush, paper, color, width, height) {
2985
- const [r, g, b] = _chunkH4AOUUBEcjs.hexToRgb8.call(void 0, color);
2986
+ const [r, g, b] = _chunkGT77U7QGcjs.hexToRgb8.call(void 0, color);
2986
2987
  let result = surface;
2987
2988
  let thick = null;
2988
2989
  let light = null;
@@ -3003,13 +3004,13 @@ function paintTestStroke(surface, brush, paper, color, width, height) {
3003
3004
  lockTransparency: false,
3004
3005
  brush,
3005
3006
  color: [r, g, b, 255],
3006
- background: [..._chunkH4AOUUBEcjs.hexToRgb8.call(void 0, paper.color), 255],
3007
+ background: [..._chunkGT77U7QGcjs.hexToRgb8.call(void 0, paper.color), 255],
3007
3008
  grain: paperGrain(paper),
3008
3009
  paperDepth: paper.depth,
3009
3010
  seed: 7,
3010
3011
  colorHex: color,
3011
3012
  affineCopies: [],
3012
- copies: [_chunkH4AOUUBEcjs.IDENTITY_COPY],
3013
+ copies: [_chunkGT77U7QGcjs.IDENTITY_COPY],
3013
3014
  mixerLoad: brushLoadForStroke(brush, _chunkI7NJPHWVcjs.EMPTY_MIXER_LOAD, [r / 255, g / 255, b / 255]),
3014
3015
  thick: brush.engine === "impasto" ? { channels: emptyThickChannels() } : void 0,
3015
3016
  sticker: brush.engine === "sticker" ? { nextId: 1 } : void 0,
@@ -3025,8 +3026,8 @@ function renderBrushThumbnail(brush, options) {
3025
3026
  const width = Math.max(16, Math.min(512, Math.round(_nullishCoalesce(options.width, () => ( 160)))));
3026
3027
  const height = Math.max(16, Math.min(512, Math.round(_nullishCoalesce(options.height, () => ( 48)))));
3027
3028
  const maxSize = height * 0.42;
3028
- const b = brush.tip.size > maxSize ? _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, { tip: { ...brush.tip, size: maxSize } }, brush) : brush;
3029
- const rgba = [..._chunkH4AOUUBEcjs.hexToRgb8.call(void 0, options.color), 255];
3029
+ const b = brush.tip.size > maxSize ? _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, { tip: { ...brush.tip, size: maxSize } }, brush) : brush;
3030
+ const rgba = [..._chunkGT77U7QGcjs.hexToRgb8.call(void 0, options.color), 255];
3030
3031
  let surface = _chunk474IQG74cjs.emptySurface.call(void 0, 4);
3031
3032
  if (b.engine === "eraser") {
3032
3033
  surface = _chunk474IQG74cjs.fillRect.call(void 0, surface, { x: 0, y: 0, width, height }, rgba);
@@ -3308,7 +3309,7 @@ var DEFAULT_SWATCHES = [
3308
3309
  // src/paint-editor/mixing-pad.ts
3309
3310
  var MIXING_PAD_WIDTH = 360;
3310
3311
  var MIXING_PAD_HEIGHT = 220;
3311
- var PAD_PAINT = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, {
3312
+ var PAD_PAINT = _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, {
3312
3313
  id: "pad-paint",
3313
3314
  name: "Pad paint",
3314
3315
  category: "mixer",
@@ -3316,7 +3317,7 @@ var PAD_PAINT = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, {
3316
3317
  tip: { size: 28, hardness: 0.75, spacing: 0.1, opacity: 1, flow: 0.7, pressureSize: false, pressureOpacity: false },
3317
3318
  mixer: { wet: 0.45, load: 1, mix: 0.4, loadEachStroke: true, cleanEachStroke: true, mixing: "pigment" }
3318
3319
  });
3319
- var PAD_KNIFE = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, {
3320
+ var PAD_KNIFE = _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, {
3320
3321
  id: "pad-knife",
3321
3322
  name: "Palette knife",
3322
3323
  category: "smudge",
@@ -3326,7 +3327,7 @@ var PAD_KNIFE = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, {
3326
3327
  // A knife drags streaks of paint and folds them into each other, mixing them as pigment.
3327
3328
  smudge: { strength: 0.6, length: 0.8, mixing: "pigment" }
3328
3329
  });
3329
- var PAD_BLOB = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, {
3330
+ var PAD_BLOB = _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, {
3330
3331
  id: "pad-blob",
3331
3332
  name: "Pad blob",
3332
3333
  category: "custom",
@@ -3348,12 +3349,12 @@ var MixingPad = (_class9 = class {constructor() { _class9.prototype.__init71.cal
3348
3349
  }
3349
3350
  }
3350
3351
  let brush = options.tool === "knife" ? PAD_KNIFE : PAD_PAINT;
3351
- if (options.size !== void 0) brush = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, { tip: { ...brush.tip, size: options.size } }, brush);
3352
+ if (options.size !== void 0) brush = _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, { tip: { ...brush.tip, size: options.size } }, brush);
3352
3353
  return this.run(brush, points, options.color);
3353
3354
  }
3354
3355
  /** Paints `points` with `brush` in `color` on the pad. */
3355
3356
  run(brush, points, color) {
3356
- const [r, g, b] = _chunkH4AOUUBEcjs.hexToRgb8.call(void 0, color);
3357
+ const [r, g, b] = _chunkGT77U7QGcjs.hexToRgb8.call(void 0, color);
3357
3358
  let result = null;
3358
3359
  const session = new PaintStrokeSession(
3359
3360
  { update: () => {
@@ -3371,7 +3372,7 @@ var MixingPad = (_class9 = class {constructor() { _class9.prototype.__init71.cal
3371
3372
  seed: 1,
3372
3373
  colorHex: color,
3373
3374
  affineCopies: [],
3374
- copies: [_chunkH4AOUUBEcjs.IDENTITY_COPY],
3375
+ copies: [_chunkGT77U7QGcjs.IDENTITY_COPY],
3375
3376
  mixerLoad: brushLoadForStroke(brush, _chunkI7NJPHWVcjs.EMPTY_MIXER_LOAD, [r / 255, g / 255, b / 255])
3376
3377
  }
3377
3378
  );
@@ -3447,10 +3448,10 @@ var MixingPad = (_class9 = class {constructor() { _class9.prototype.__init71.cal
3447
3448
  const off = used.length === 1 ? 0 : 0.45 * R;
3448
3449
  const x = Math.min(cx + R - r, Math.max(cx - R + r, cx + Math.cos(a) * off));
3449
3450
  const y = Math.min(cy + R - r, Math.max(cy - R + r, cy + Math.sin(a) * off));
3450
- const blob = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, { tip: { ...PAD_BLOB.tip, size: Math.max(2, 2 * r) } }, PAD_BLOB);
3451
+ const blob = _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, { tip: { ...PAD_BLOB.tip, size: Math.max(2, 2 * r) } }, PAD_BLOB);
3451
3452
  this.run(blob, [{ x, y }], p.color.toLowerCase());
3452
3453
  });
3453
- const knife = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, { tip: { ...PAD_KNIFE.tip, size: Math.max(12, R * 0.5) } }, PAD_KNIFE);
3454
+ const knife = _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, { tip: { ...PAD_KNIFE.tip, size: Math.max(12, R * 0.5) } }, PAD_KNIFE);
3454
3455
  for (let k = 0; k < passes; k++) {
3455
3456
  const stir = [];
3456
3457
  const turns = 1.6;
@@ -3462,10 +3463,10 @@ var MixingPad = (_class9 = class {constructor() { _class9.prototype.__init71.cal
3462
3463
  this.run(knife, stir, "#000000");
3463
3464
  }
3464
3465
  const mixed = _chunk2VX55NFMcjs.mixPigments.call(void 0,
3465
- paints.map((p) => _chunkH4AOUUBEcjs.hexToRgb8.call(void 0, p.color).map((v) => v / 255)),
3466
+ paints.map((p) => _chunkGT77U7QGcjs.hexToRgb8.call(void 0, p.color).map((v) => v / 255)),
3466
3467
  paints.map((p) => p.parts)
3467
3468
  );
3468
- const core = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, { tip: { ...PAD_BLOB.tip, size: R * 1.1, hardness: 0.55 } }, PAD_BLOB);
3469
+ const core = _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, { tip: { ...PAD_BLOB.tip, size: R * 1.1, hardness: 0.55 } }, PAD_BLOB);
3469
3470
  const hex = "#" + mixed.map((v) => Math.round(v * 255).toString(16).padStart(2, "0")).join("");
3470
3471
  this.run(core, [{ x: cx, y: cy }], hex);
3471
3472
  return { color: this.pick(cx, cy, 2), bounds };
@@ -3671,10 +3672,10 @@ function addTiles(a, b) {
3671
3672
  }
3672
3673
  function computeTile(paper, grain, amount, rect, layers) {
3673
3674
  const n = rect.width * rect.height;
3674
- const [p0, p1, p2] = _chunkH4AOUUBEcjs.hexToRgb8.call(void 0, paper.color);
3675
+ const [p0, p1, p2] = _chunkGT77U7QGcjs.hexToRgb8.call(void 0, paper.color);
3675
3676
  const pb = [p0, p1, p2];
3676
3677
  const pl = [Math.max(1e-4, LIN[p0]), Math.max(1e-4, LIN[p1]), Math.max(1e-4, LIN[p2])];
3677
- const [c0, c1, c2] = _chunkH4AOUUBEcjs.hexToRgb8.call(void 0, _nullishCoalesce(paper.backlightColor, () => ( DEFAULT_BACKLIGHT_COLOR)));
3678
+ const [c0, c1, c2] = _chunkGT77U7QGcjs.hexToRgb8.call(void 0, _nullishCoalesce(paper.backlightColor, () => ( DEFAULT_BACKLIGHT_COLOR)));
3678
3679
  const t0 = new Float32Array(n).fill(amount * LIN[c0]);
3679
3680
  const t1 = new Float32Array(n).fill(amount * LIN[c1]);
3680
3681
  const t2 = new Float32Array(n).fill(amount * LIN[c2]);
@@ -3885,7 +3886,7 @@ function timeLapseVideo(frameCount, width, height, fps, holdMs, name = "Time-lap
3885
3886
  }
3886
3887
  const video = { version: 1, name, width: w, height: h, fps, background: "#000000", assets, tracks: [{ id: "v1", kind: "video", clips }] };
3887
3888
  const durationMs = frameCount ? clips[clips.length - 1].start + clips[clips.length - 1].duration : 0;
3888
- return { video, ffmpeg: _chunkXNZFVYC2cjs.toVideoFfmpeg.call(void 0, video, { output: "timelapse.mp4" }), durationMs };
3889
+ return { video, ffmpeg: _chunkZBCT5MEAcjs.toVideoFfmpeg.call(void 0, video, { output: "timelapse.mp4" }), durationMs };
3889
3890
  }
3890
3891
  async function buildTimeLapse(source, target, options = {}) {
3891
3892
  const maxSide = Math.max(32, Math.min(4096, Math.round(_nullishCoalesce(options.maxSide, () => ( 720)))));
@@ -3968,7 +3969,7 @@ function checkPaintEffectPlace(d, place) {
3968
3969
  else if (d.uses.includes("filter") && place !== "light") instead = "; run it on a layer's dried paint with apply_effect instead";
3969
3970
  else if (place === "light" && d.uses.some((u) => PAINT_EFFECT_PLACES.layer.includes(u))) instead = "; add it as an effect layer (add_effect_layer) or fill a layer with it (fill_layer_with_effect) instead";
3970
3971
  else if (place === "paper" && d.uses.some((u) => u === "overlay" || u === "title")) instead = "; add it as an effect layer with add_effect_layer instead";
3971
- throw new (0, _chunkGHCSC2WPcjs.EffectUnsupportedError)(`"${d.id}" (${d.name}) is a ${d.uses.join(" / ") || d.kind} effect, and ${PLACE_WORDS[place]}${instead}.`, d.id);
3972
+ throw new (0, _chunkISIO63Q5cjs.EffectUnsupportedError)(`"${d.id}" (${d.name}) is a ${d.uses.join(" / ") || d.kind} effect, and ${PLACE_WORDS[place]}${instead}.`, d.id);
3972
3973
  }
3973
3974
  var PAPER_EFFECT_BLENDS = ["multiply", "normal", "overlay", "soft-light", "screen", "color"];
3974
3975
  var paperVersion = 1;
@@ -4090,7 +4091,7 @@ function parseColor(value, what = "color") {
4090
4091
  return value.trim().toLowerCase();
4091
4092
  }
4092
4093
  function rgbaOf(hex) {
4093
- const [r, g, b] = _chunkH4AOUUBEcjs.hexToRgb8.call(void 0, hex);
4094
+ const [r, g, b] = _chunkGT77U7QGcjs.hexToRgb8.call(void 0, hex);
4094
4095
  return [r, g, b, 255];
4095
4096
  }
4096
4097
  function rgbToHex(r, g, b) {
@@ -4181,21 +4182,21 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
4181
4182
  /** Set while an operation that changes wet paint runs: the simulation before it (for undo). */
4182
4183
  __init129() {this.wetOp = null}
4183
4184
  /** The effects provider slot (see `setEffectsProvider`). */
4184
- __init130() {this.effects = new (0, _chunkGHCSC2WPcjs.EffectsSlot)()}
4185
+ __init130() {this.effects = new (0, _chunkISIO63Q5cjs.EffectsSlot)()}
4185
4186
  /** The sticker library slot (see `setStickersProvider`). */
4186
- __init131() {this.stickers = new (0, _chunkZEYMKDYScjs.StickersSlot)(_chunkLJRCU3BJcjs.editorStickers.call(void 0, ))}
4187
- __init132() {this.stickerArt = new (0, _chunkH4AOUUBEcjs.StickerArtCache)()}
4187
+ __init131() {this.stickers = new (0, _chunk4JNWA3VTcjs.StickersSlot)(_chunkATK6ABN3cjs.editorStickers.call(void 0, ))}
4188
+ __init132() {this.stickerArt = new (0, _chunkGT77U7QGcjs.StickerArtCache)()}
4188
4189
 
4189
4190
  __init133() {this.effectsRenderer = new PaintEffectsRenderer()}
4190
4191
  __init134() {this.paperEffectNodeCache = null}
4191
4192
  constructor(options = {}) {;_class12.prototype.__init82.call(this);_class12.prototype.__init83.call(this);_class12.prototype.__init84.call(this);_class12.prototype.__init85.call(this);_class12.prototype.__init86.call(this);_class12.prototype.__init87.call(this);_class12.prototype.__init88.call(this);_class12.prototype.__init89.call(this);_class12.prototype.__init90.call(this);_class12.prototype.__init91.call(this);_class12.prototype.__init92.call(this);_class12.prototype.__init93.call(this);_class12.prototype.__init94.call(this);_class12.prototype.__init95.call(this);_class12.prototype.__init96.call(this);_class12.prototype.__init97.call(this);_class12.prototype.__init98.call(this);_class12.prototype.__init99.call(this);_class12.prototype.__init100.call(this);_class12.prototype.__init101.call(this);_class12.prototype.__init102.call(this);_class12.prototype.__init103.call(this);_class12.prototype.__init104.call(this);_class12.prototype.__init105.call(this);_class12.prototype.__init106.call(this);_class12.prototype.__init107.call(this);_class12.prototype.__init108.call(this);_class12.prototype.__init109.call(this);_class12.prototype.__init110.call(this);_class12.prototype.__init111.call(this);_class12.prototype.__init112.call(this);_class12.prototype.__init113.call(this);_class12.prototype.__init114.call(this);_class12.prototype.__init115.call(this);_class12.prototype.__init116.call(this);_class12.prototype.__init117.call(this);_class12.prototype.__init118.call(this);_class12.prototype.__init119.call(this);_class12.prototype.__init120.call(this);_class12.prototype.__init121.call(this);_class12.prototype.__init122.call(this);_class12.prototype.__init123.call(this);_class12.prototype.__init124.call(this);_class12.prototype.__init125.call(this);_class12.prototype.__init126.call(this);_class12.prototype.__init127.call(this);_class12.prototype.__init128.call(this);_class12.prototype.__init129.call(this);_class12.prototype.__init130.call(this);_class12.prototype.__init131.call(this);_class12.prototype.__init132.call(this);_class12.prototype.__init133.call(this);_class12.prototype.__init134.call(this);_class12.prototype.__init135.call(this);_class12.prototype.__init136.call(this);_class12.prototype.__init137.call(this);_class12.prototype.__init138.call(this);
4192
4193
  this.historyLimit = Math.max(1, _nullishCoalesce(options.historyLimit, () => ( 200)));
4193
- this.rasterizeSticker = _nullishCoalesce(options.rasterizeSticker, () => ( _chunkH4AOUUBEcjs.defaultStickerRasterizer));
4194
+ this.rasterizeSticker = _nullishCoalesce(options.rasterizeSticker, () => ( _chunkGT77U7QGcjs.defaultStickerRasterizer));
4194
4195
  if (options.stickers) this.stickers.set(options.stickers);
4195
4196
  this.doc = createPaintDocument({ width: options.width, height: options.height, dpi: options.dpi, paper: this.resolvePaper(options.paper) });
4196
- this.userBrushes = (_nullishCoalesce(options.brushes, () => ( []))).map((b) => _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, { ...b, builtin: false }));
4197
- const start = _nullishCoalesce(this.findBrush(_nullishCoalesce(options.brushId, () => ( _chunkH4AOUUBEcjs.DEFAULT_BRUSH_ID))), () => ( this.findBrush(_chunkH4AOUUBEcjs.DEFAULT_BRUSH_ID)));
4198
- this.brush = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, start);
4197
+ this.userBrushes = (_nullishCoalesce(options.brushes, () => ( []))).map((b) => _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, { ...b, builtin: false }));
4198
+ const start = _nullishCoalesce(this.findBrush(_nullishCoalesce(options.brushId, () => ( _chunkGT77U7QGcjs.DEFAULT_BRUSH_ID))), () => ( this.findBrush(_chunkGT77U7QGcjs.DEFAULT_BRUSH_ID)));
4199
+ this.brush = _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, start);
4199
4200
  this.color = options.color ? parseColor(options.color) : "#1f2937";
4200
4201
  this.hand = options.hand === "left" ? "left" : "right";
4201
4202
  this.encodeImage = options.encodeImage;
@@ -4248,7 +4249,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
4248
4249
  this.cached = {
4249
4250
  document: this.doc,
4250
4251
  brush: this.brush,
4251
- brushes: this.library ??= [..._chunkH4AOUUBEcjs.BUILTIN_BRUSHES, ...this.userBrushes],
4252
+ brushes: this.library ??= [..._chunkGT77U7QGcjs.BUILTIN_BRUSHES, ...this.userBrushes],
4252
4253
  color: this.color,
4253
4254
  secondaryColor: this.secondaryColor,
4254
4255
  paint: _nullishCoalesce(this.gradient, () => ( { type: "color", color: this.color })),
@@ -4444,7 +4445,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
4444
4445
  // --- Canvas and paper ----------------------------------------------------------
4445
4446
  resolvePaper(paper) {
4446
4447
  if (typeof paper === "string") {
4447
- const p = _chunkH4AOUUBEcjs.paperPreset.call(void 0, paper);
4448
+ const p = _chunkGT77U7QGcjs.paperPreset.call(void 0, paper);
4448
4449
  if (!p) throw new PaintEditorError(`Unknown paper "${paper}". Call list_papers for the ids.`);
4449
4450
  return p;
4450
4451
  }
@@ -4555,19 +4556,19 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
4555
4556
  this.requireIdle("changing the paper");
4556
4557
  let base = this.doc.paper;
4557
4558
  if (update.preset !== void 0 && update.preset !== this.doc.paper.preset) {
4558
- const p = _chunkH4AOUUBEcjs.paperPreset.call(void 0, update.preset);
4559
+ const p = _chunkGT77U7QGcjs.paperPreset.call(void 0, update.preset);
4559
4560
  if (!p) throw new PaintEditorError(`Unknown paper "${update.preset}". Call list_papers for the ids.`);
4560
4561
  base = p;
4561
4562
  }
4562
4563
  const { preset: _p, ...rest } = update;
4563
4564
  if (rest.color !== void 0) parseColor(rest.color, "paper color");
4564
- const paper = _chunkH4AOUUBEcjs.normalizePaper.call(void 0, { ...rest, preset: base.preset, offset: _nullishCoalesce(rest.offset, () => ( this.doc.paper.offset)) }, base);
4565
+ const paper = _chunkGT77U7QGcjs.normalizePaper.call(void 0, { ...rest, preset: base.preset, offset: _nullishCoalesce(rest.offset, () => ( this.doc.paper.offset)) }, base);
4565
4566
  const changedKeys = Object.keys(rest).filter((k) => k !== "name");
4566
4567
  if (changedKeys.length && update.preset === void 0) paper.preset = base.preset;
4567
4568
  if (this.wet.world) this.beginWetOp();
4568
4569
  this.commit("Paper", { ...this.doc, paper });
4569
4570
  this.wet.paperChanged();
4570
- return _chunkH4AOUUBEcjs.clonePaper.call(void 0, paper);
4571
+ return _chunkGT77U7QGcjs.clonePaper.call(void 0, paper);
4571
4572
  }
4572
4573
  // --- Layers --------------------------------------------------------------------
4573
4574
  getLayer(id) {
@@ -4975,7 +4976,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
4975
4976
  if (v === null) merged[k] = d.defaults[k];
4976
4977
  else given[k] = v;
4977
4978
  }
4978
- return { ...merged, ..._chunkGHCSC2WPcjs.resolveEffectValues.call(void 0, { ...d, defaults: merged }, given) };
4979
+ return { ...merged, ..._chunkISIO63Q5cjs.resolveEffectValues.call(void 0, { ...d, defaults: merged }, given) };
4979
4980
  }
4980
4981
  /** Renders a generator, overlay or title effect at the canvas size. */
4981
4982
  renderEffectCanvas(d, values, time = 0) {
@@ -5167,7 +5168,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5167
5168
  this.checkTime(source.time);
5168
5169
  let map;
5169
5170
  try {
5170
- map = _chunkH4AOUUBEcjs.readEffectStrokeMap.call(void 0, source.map);
5171
+ map = _chunkGT77U7QGcjs.readEffectStrokeMap.call(void 0, source.map);
5171
5172
  } catch (e) {
5172
5173
  throw new PaintEditorError(e.message);
5173
5174
  }
@@ -5198,9 +5199,9 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5198
5199
  }
5199
5200
  /** The rendered pixels of an effect paint at the current canvas size, or `null` when it has not been rendered. */
5200
5201
  effectPaintImage(p) {
5201
- const key = _chunkH4AOUUBEcjs.effectPaintKey.call(void 0, p);
5202
+ const key = _chunkGT77U7QGcjs.effectPaintKey.call(void 0, p);
5202
5203
  const img = this.effectPaintPixels.get(key);
5203
- const size = _chunkH4AOUUBEcjs.effectPaintSize.call(void 0, p, this.doc.canvas);
5204
+ const size = _chunkGT77U7QGcjs.effectPaintSize.call(void 0, p, this.doc.canvas);
5204
5205
  if (!img || img.width !== size.width || img.height !== size.height) return null;
5205
5206
  this.effectPaintPixels.delete(key);
5206
5207
  this.effectPaintPixels.set(key, img);
@@ -5214,7 +5215,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5214
5215
  const what = `the effect "${p.effect}"${p.provider ? ` from provider "${p.provider}"` : ""}`;
5215
5216
  if (!provider) throw new PaintEditorError(`Effect paint needs ${what}, but no effects provider is registered; register it (setEffectsProvider) and try again.`);
5216
5217
  if (p.provider && provider.id !== p.provider) throw new PaintEditorError(`Effect paint needs ${what}, but the registered provider is "${provider.id}"; register "${p.provider}" (setEffectsProvider) and try again.`);
5217
- const { width, height } = _chunkH4AOUUBEcjs.effectPaintSize.call(void 0, p, this.doc.canvas);
5218
+ const { width, height } = _chunkGT77U7QGcjs.effectPaintSize.call(void 0, p, this.doc.canvas);
5218
5219
  let pixels;
5219
5220
  try {
5220
5221
  pixels = await this.effectsRenderer.render(provider, p.effect, { width, height }, { time: p.time, values: p.values });
@@ -5222,7 +5223,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5222
5223
  throw new PaintEditorError(`Effect paint could not render ${what}: ${e instanceof Error ? e.message : String(e)}`);
5223
5224
  }
5224
5225
  const img = { width, height, data: new Uint8ClampedArray(pixels.data), ...p.map ? { map: p.map } : {} };
5225
- this.effectPaintPixels.set(_chunkH4AOUUBEcjs.effectPaintKey.call(void 0, p), img);
5226
+ this.effectPaintPixels.set(_chunkGT77U7QGcjs.effectPaintKey.call(void 0, p), img);
5226
5227
  while (this.effectPaintPixels.size > _PaintEditorController.EFFECT_PAINT_CACHE) this.effectPaintPixels.delete(this.effectPaintPixels.keys().next().value);
5227
5228
  return img;
5228
5229
  }
@@ -5233,7 +5234,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5233
5234
  async prepareEffectPaints(paints) {
5234
5235
  const seen = /* @__PURE__ */ new Set();
5235
5236
  for (const p of paints) {
5236
- const key = _chunkH4AOUUBEcjs.effectPaintKey.call(void 0, p);
5237
+ const key = _chunkGT77U7QGcjs.effectPaintKey.call(void 0, p);
5237
5238
  if (seen.has(key)) continue;
5238
5239
  seen.add(key);
5239
5240
  await this.renderEffectPaint(p);
@@ -5271,11 +5272,11 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5271
5272
  * its pixels are not rendered.
5272
5273
  */
5273
5274
  strokeEffect(init, brush) {
5274
- if (!_chunkH4AOUUBEcjs.brushTakesPaint.call(void 0, brush)) return null;
5275
+ if (!_chunkGT77U7QGcjs.brushTakesPaint.call(void 0, brush)) return null;
5275
5276
  let source = null;
5276
5277
  if (init.paint !== void 0) {
5277
- if (!_chunkH4AOUUBEcjs.isPaintEffectPaint.call(void 0, init.paint)) return null;
5278
- source = _chunkH4AOUUBEcjs.readPaintEffectPaint.call(void 0, init.paint);
5278
+ if (!_chunkGT77U7QGcjs.isPaintEffectPaint.call(void 0, init.paint)) return null;
5279
+ source = _chunkGT77U7QGcjs.readPaintEffectPaint.call(void 0, init.paint);
5279
5280
  if (!source) throw new PaintEditorError("The stroke's effect paint needs an effect id and values (getEffectPaint returns one).");
5280
5281
  } else if (init.color === void 0 && !brush.paint) {
5281
5282
  if (this.effectPaintPending) throw new PaintEditorError(`The effect paint "${this.effectPaintPending.effect}" is still rendering; wait for set_effect_paint to finish, then paint.`);
@@ -5325,12 +5326,12 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5325
5326
  }
5326
5327
  // --- Brushes -------------------------------------------------------------------
5327
5328
  findBrush(id) {
5328
- return _nullishCoalesce(_chunkH4AOUUBEcjs.BUILTIN_BRUSHES.find((b) => b.id === id), () => ( this.userBrushes.find((b) => b.id === id)));
5329
+ return _nullishCoalesce(_chunkGT77U7QGcjs.BUILTIN_BRUSHES.find((b) => b.id === id), () => ( this.userBrushes.find((b) => b.id === id)));
5329
5330
  }
5330
5331
  /** A library brush by id (`undefined` when unknown). */
5331
5332
  getBrush(id) {
5332
5333
  const b = this.findBrush(id);
5333
- return b ? _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, b, b) : void 0;
5334
+ return b ? _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, b, b) : void 0;
5334
5335
  }
5335
5336
  requireBrush(id) {
5336
5337
  const b = this.findBrush(id);
@@ -5345,20 +5346,20 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5345
5346
  const { id, ...changes } = update;
5346
5347
  const base = id !== void 0 ? this.requireBrush(id) : this.brush;
5347
5348
  if (changes.paint !== void 0 && changes.paint !== null) this.readStrokePaint(changes.paint);
5348
- const next = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, { ...changes, id: base.id }, base);
5349
+ const next = _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, { ...changes, id: base.id }, base);
5349
5350
  if (base.builtin && !Object.keys(changes).length) next.builtin = true;
5350
5351
  else delete next.builtin;
5351
5352
  this.brush = next;
5352
5353
  this.emit([]);
5353
- if (next.engine === "sticker" && next.sticker.stamps.some((r) => !_chunkZEYMKDYScjs.editorStampOf.call(void 0, r))) void this.prepareStickers(next.sticker.stamps).catch(() => this.emit([]));
5354
+ if (next.engine === "sticker" && next.sticker.stamps.some((r) => !_chunk4JNWA3VTcjs.editorStampOf.call(void 0, r))) void this.prepareStickers(next.sticker.stamps).catch(() => this.emit([]));
5354
5355
  return this.brush;
5355
5356
  }
5356
5357
  /** Saves the active brush (or `brush`) into the user library under `id` / `name`. */
5357
5358
  saveBrush(options) {
5358
- if (!_chunkH4AOUUBEcjs.BRUSH_ID.test(options.id)) throw new PaintEditorError(`Brush id "${options.id}" is invalid; use lowercase letters, digits and dashes (e.g. "my-pencil").`);
5359
- if (_chunkH4AOUUBEcjs.BUILTIN_BRUSHES.some((b) => b.id === options.id)) throw new PaintEditorError(`"${options.id}" is a built-in brush; save under another id.`);
5360
- const source = options.brush ? _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, options.brush, this.brush) : this.brush;
5361
- const saved = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, { ...source, id: options.id, name: _nullishCoalesce(options.name, () => ( source.name)) });
5359
+ if (!_chunkGT77U7QGcjs.BRUSH_ID.test(options.id)) throw new PaintEditorError(`Brush id "${options.id}" is invalid; use lowercase letters, digits and dashes (e.g. "my-pencil").`);
5360
+ if (_chunkGT77U7QGcjs.BUILTIN_BRUSHES.some((b) => b.id === options.id)) throw new PaintEditorError(`"${options.id}" is a built-in brush; save under another id.`);
5361
+ const source = options.brush ? _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, options.brush, this.brush) : this.brush;
5362
+ const saved = _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, { ...source, id: options.id, name: _nullishCoalesce(options.name, () => ( source.name)) });
5362
5363
  delete saved.builtin;
5363
5364
  const i = this.userBrushes.findIndex((b) => b.id === options.id);
5364
5365
  if (i >= 0) this.userBrushes[i] = saved;
@@ -5368,7 +5369,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5368
5369
  return saved;
5369
5370
  }
5370
5371
  removeBrush(id) {
5371
- if (_chunkH4AOUUBEcjs.BUILTIN_BRUSHES.some((b) => b.id === id)) throw new PaintEditorError(`"${id}" is a built-in brush and cannot be removed.`);
5372
+ if (_chunkGT77U7QGcjs.BUILTIN_BRUSHES.some((b) => b.id === id)) throw new PaintEditorError(`"${id}" is a built-in brush and cannot be removed.`);
5372
5373
  const i = this.userBrushes.findIndex((b) => b.id === id);
5373
5374
  if (i < 0) throw new PaintEditorError(`Unknown brush "${id}". Call list_brushes for the ids.`);
5374
5375
  this.userBrushes.splice(i, 1);
@@ -5377,12 +5378,12 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5377
5378
  }
5378
5379
  /** The user's saved brushes. */
5379
5380
  getUserBrushes() {
5380
- return this.userBrushes.map((b) => _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, b, b));
5381
+ return this.userBrushes.map((b) => _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, b, b));
5381
5382
  }
5382
5383
  /** A brush library file of the given brushes (default: the user's brushes). */
5383
5384
  exportBrushes(ids) {
5384
5385
  const list = ids ? ids.map((id) => this.requireBrush(id)) : this.userBrushes;
5385
- return { format: "pixerate-brushes", version: 1, brushes: list.map(_chunkH4AOUUBEcjs.brushToJSON) };
5386
+ return { format: "pixerate-brushes", version: 1, brushes: list.map(_chunkGT77U7QGcjs.brushToJSON) };
5386
5387
  }
5387
5388
  /**
5388
5389
  * Adds the brushes of a library file to the user library. A brush whose id is taken is skipped
@@ -5392,14 +5393,14 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5392
5393
  const problems = [];
5393
5394
  let list;
5394
5395
  try {
5395
- list = _chunkH4AOUUBEcjs.parseBrushLibrary.call(void 0, file, problems);
5396
+ list = _chunkGT77U7QGcjs.parseBrushLibrary.call(void 0, file, problems);
5396
5397
  } catch (e) {
5397
5398
  throw new PaintEditorError(e.message);
5398
5399
  }
5399
5400
  const added = [];
5400
5401
  const skipped = [];
5401
5402
  for (const b of list) {
5402
- if (_chunkH4AOUUBEcjs.BUILTIN_BRUSHES.some((x) => x.id === b.id)) {
5403
+ if (_chunkGT77U7QGcjs.BUILTIN_BRUSHES.some((x) => x.id === b.id)) {
5403
5404
  skipped.push(b.id);
5404
5405
  problems.push(`"${b.id}" is a built-in brush id; rename it to import it.`);
5405
5406
  continue;
@@ -5464,10 +5465,10 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5464
5465
  * brush's gradient, else the editor's gradient paint. Erasers, blenders and smudges take none.
5465
5466
  */
5466
5467
  strokeGradient(init, brush, color) {
5467
- if (!_chunkH4AOUUBEcjs.brushTakesPaint.call(void 0, brush)) return null;
5468
+ if (!_chunkGT77U7QGcjs.brushTakesPaint.call(void 0, brush)) return null;
5468
5469
  let g = null;
5469
5470
  if (init.paint !== void 0) {
5470
- if (_chunkH4AOUUBEcjs.isPaintEffectPaint.call(void 0, init.paint)) return null;
5471
+ if (_chunkGT77U7QGcjs.isPaintEffectPaint.call(void 0, init.paint)) return null;
5471
5472
  const p = this.readStrokePaint(init.paint);
5472
5473
  g = p.type === "gradient" ? p : null;
5473
5474
  } else g = _nullishCoalesce(brush.paint, () => ( (init.color === void 0 ? this.gradient : null)));
@@ -5511,7 +5512,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5511
5512
  // --- Mixer Brush ---------------------------------------------------------------
5512
5513
  /** Fills the Mixer Brush reservoir with a colour (default the editor colour). */
5513
5514
  loadMixerBrush(color) {
5514
- const [r, g, b] = _chunkH4AOUUBEcjs.hexToRgb8.call(void 0, color === void 0 ? this.color : parseColor(color));
5515
+ const [r, g, b] = _chunkGT77U7QGcjs.hexToRgb8.call(void 0, color === void 0 ? this.color : parseColor(color));
5515
5516
  this.mixerLoad = _chunkI7NJPHWVcjs.loadMixer.call(void 0, this.mixerLoad, [r / 255, g / 255, b / 255]);
5516
5517
  this.emit([]);
5517
5518
  return this.mixerLoad;
@@ -5541,7 +5542,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5541
5542
  // --- Strokes -------------------------------------------------------------------
5542
5543
  strokeBrush(init) {
5543
5544
  let brush = init.brushId !== void 0 ? this.requireBrush(init.brushId) : this.brush;
5544
- if (init.brush) brush = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, { ...init.brush, id: brush.id }, brush);
5545
+ if (init.brush) brush = _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, { ...init.brush, id: brush.id }, brush);
5545
5546
  return brush;
5546
5547
  }
5547
5548
  /**
@@ -5557,7 +5558,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5557
5558
  return symmetryCopies(this.guides.symmetry);
5558
5559
  }
5559
5560
  sessionFor(doc, init, host) {
5560
- if (init.paint !== void 0 && !_chunkH4AOUUBEcjs.isPaintEffectPaint.call(void 0, init.paint)) {
5561
+ if (init.paint !== void 0 && !_chunkGT77U7QGcjs.isPaintEffectPaint.call(void 0, init.paint)) {
5561
5562
  const p = this.readStrokePaint(init.paint);
5562
5563
  if (p.type === "color") init = { ...init, color: p.color, paint: void 0 };
5563
5564
  else init = { ...init, paint: p };
@@ -5583,9 +5584,9 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5583
5584
  if (why) throw new PaintEditorError(`Layer "${layer.name}" is a stroke layer. ${why}`);
5584
5585
  }
5585
5586
  if (_optionalChain([doc, 'access', _332 => _332.liveStrokes, 'optionalAccess', _333 => _333[layer.id]]) && _optionalChain([effect, 'optionalAccess', _334 => _334.source, 'access', _335 => _335.live])) {
5586
- const key = _chunkH4AOUUBEcjs.effectPaintKey.call(void 0, effect.source);
5587
+ const key = _chunkGT77U7QGcjs.effectPaintKey.call(void 0, effect.source);
5587
5588
  const { sources } = this.liveEffects(doc);
5588
- if (!sources.some((p) => _chunkH4AOUUBEcjs.effectPaintKey.call(void 0, p) === key) && sources.length >= MAX_LIVE_EFFECT_SOURCES) {
5589
+ if (!sources.some((p) => _chunkGT77U7QGcjs.effectPaintKey.call(void 0, p) === key) && sources.length >= MAX_LIVE_EFFECT_SOURCES) {
5589
5590
  throw new PaintEditorError(`The painting already plays ${MAX_LIVE_EFFECT_SOURCES} live effects, the most it can; paint with one of them, or set_effect_paint with live false to bake this one.`);
5590
5591
  }
5591
5592
  }
@@ -5596,7 +5597,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5596
5597
  throw new PaintEditorError(`Layer "${layer.name}" is a sticker layer (its pixels are drawn from its stickers); paint on another layer (add_layer).`);
5597
5598
  }
5598
5599
  let wet;
5599
- if (_chunkH4AOUUBEcjs.isWetBrush.call(void 0, brush)) {
5600
+ if (_chunkGT77U7QGcjs.isWetBrush.call(void 0, brush)) {
5600
5601
  this.requireWetIdle("painting");
5601
5602
  if (layer.offset.x || layer.offset.y) {
5602
5603
  const moved = { ...layer, surface: _chunk474IQG74cjs.translateSurface.call(void 0, layer.surface, layer.offset.x, layer.offset.y), offset: { x: 0, y: 0 } };
@@ -5611,7 +5612,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5611
5612
  const world = this.wet.ensureLane(layer.id, brush.wet.medium);
5612
5613
  const id = layer.id;
5613
5614
  const wetColor = init.color === void 0 ? this.color : parseColor(init.color);
5614
- const [r, g, b] = _chunkH4AOUUBEcjs.hexToRgb8.call(void 0, wetColor);
5615
+ const [r, g, b] = _chunkGT77U7QGcjs.hexToRgb8.call(void 0, wetColor);
5615
5616
  const wetGradient = this.strokeGradient(init, brush, wetColor);
5616
5617
  const load = _nullishCoalesce(init.load, () => ( brushLoadForStroke(brush, this.mixerLoad, [r / 255, g / 255, b / 255])));
5617
5618
  const seedW = _nullishCoalesce(init.seed, () => ( _chunk3K6HWEXZcjs.mix32.call(void 0, this.seedCounter * 2654435761 >>> 0) & 2147483647));
@@ -5624,7 +5625,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5624
5625
  load,
5625
5626
  grain: paperGrain(doc.paper),
5626
5627
  paperDepth: doc.paper.depth,
5627
- paperColor: _chunkH4AOUUBEcjs.hexToRgb8.call(void 0, doc.paper.color),
5628
+ paperColor: _chunkGT77U7QGcjs.hexToRgb8.call(void 0, doc.paper.color),
5628
5629
  seed: seedW,
5629
5630
  copies: [IDENTITY_AFFINE, ...copiesW].map(affineCopy),
5630
5631
  mask: init.maskStencils ? this.stencilSelection(init.maskStencils) : init.stencils !== false ? this.stencilSelection() : null,
@@ -5689,7 +5690,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5689
5690
  const stroke = {
5690
5691
  id: `s${this.strokeCounter++}`,
5691
5692
  layerId: session.layerId,
5692
- brush: _chunkH4AOUUBEcjs.brushToJSON.call(void 0, init.brush),
5693
+ brush: _chunkGT77U7QGcjs.brushToJSON.call(void 0, init.brush),
5693
5694
  color: init.colorHex,
5694
5695
  points: session.points.map((p) => ({ ...p })),
5695
5696
  seed: init.seed
@@ -5895,13 +5896,13 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
5895
5896
  let brush = v.brush;
5896
5897
  if (options.brushId !== void 0) {
5897
5898
  const b = this.requireBrush(options.brushId);
5898
- brush = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, { tip: { ...b.tip, size: b.tip.size * (v.brush.tip.size / s.brush.tip.size) } }, b);
5899
+ brush = _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, { tip: { ...b.tip, size: b.tip.size * (v.brush.tip.size / s.brush.tip.size) } }, b);
5899
5900
  }
5900
5901
  const layerId = _nullishCoalesce(options.layerId, () => ( s.layerId));
5901
5902
  if (!_chunkDPYAO5U6cjs.findLayer.call(void 0, doc.layers, layerId)) throw new PaintEditorError(`Stroke "${s.id}" was painted on layer "${layerId}", which no longer exists; pass layerId to replay it elsewhere.`);
5902
5903
  let load = s.load;
5903
5904
  if (load && options.color !== void 0 && load.reservoir) {
5904
- const [r, g, b] = _chunkH4AOUUBEcjs.hexToRgb8.call(void 0, options.color);
5905
+ const [r, g, b] = _chunkGT77U7QGcjs.hexToRgb8.call(void 0, options.color);
5905
5906
  load = { ...load, reservoir: [r / 255, g / 255, b / 255] };
5906
5907
  }
5907
5908
  const paint = v.paint && options.color === void 0 ? { paint: v.paint } : {};
@@ -6476,8 +6477,8 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
6476
6477
  const ok = list.flatMap((x) => {
6477
6478
  if (!x || typeof x.id !== "string" || !Number.isFinite(x.x) || !Number.isFinite(x.y) || !(x.size > 0)) return [];
6478
6479
  try {
6479
- const ref2 = _chunkZEYMKDYScjs.normalizeStickerRef.call(void 0, _nullishCoalesce(x.ref, () => ( x.stamp)));
6480
- const stamp = _chunkZEYMKDYScjs.editorStampOf.call(void 0, ref2);
6480
+ const ref2 = _chunk4JNWA3VTcjs.normalizeStickerRef.call(void 0, _nullishCoalesce(x.ref, () => ( x.stamp)));
6481
+ const stamp = _chunk4JNWA3VTcjs.editorStampOf.call(void 0, ref2);
6481
6482
  const { stamp: _old, ...rest } = x;
6482
6483
  return [{ ...rest, ref: ref2, ...stamp ? { stamp } : {} }];
6483
6484
  } catch (e4) {
@@ -6590,7 +6591,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
6590
6591
  this.viewCompositor.clear();
6591
6592
  this.emit();
6592
6593
  const refs = Object.values(_nullishCoalesce(this.doc.stickers, () => ( {}))).flatMap((list) => list.map((x) => x.ref));
6593
- if (refs.some((r) => !_chunkZEYMKDYScjs.editorStampOf.call(void 0, r))) void this.prepareStickers(refs).catch(() => this.emit([]));
6594
+ if (refs.some((r) => !_chunk4JNWA3VTcjs.editorStampOf.call(void 0, r))) void this.prepareStickers(refs).catch(() => this.emit([]));
6594
6595
  return loaded.problems;
6595
6596
  }
6596
6597
  /** Opens a saved document (clears the history). Returns what could not be read. */
@@ -6671,7 +6672,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
6671
6672
  return next.type === "group" ? { ...next, children: toStandard(next.children) } : next;
6672
6673
  });
6673
6674
  const layers = toStandard(dried);
6674
- const result = _chunkLP2MCSBEcjs.exportPsd.call(void 0, { width, height, layers: [paperLayer, ...layers], merged, resolution: dpi });
6675
+ const result = _chunkM2VKFE5Lcjs.exportPsd.call(void 0, { width, height, layers: [paperLayer, ...layers], merged, resolution: dpi });
6675
6676
  for (const [mode, names] of changed) {
6676
6677
  const label = _nullishCoalesce(_optionalChain([_chunk2VX55NFMcjs.BLEND_MODES, 'access', _418 => _418.find, 'call', _419 => _419((m) => m.id === mode), 'optionalAccess', _420 => _420.label]), () => ( mode));
6677
6678
  const std = _nullishCoalesce(_optionalChain([_chunk2VX55NFMcjs.BLEND_MODES, 'access', _421 => _421.find, 'call', _422 => _422((m) => m.id === _chunk2VX55NFMcjs.standardBlendMode.call(void 0, mode)), 'optionalAccess', _423 => _423.label]), () => ( _chunk2VX55NFMcjs.standardBlendMode.call(void 0, mode)));
@@ -6940,7 +6941,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
6940
6941
  * ones, or a sticker whose art failed. Emits when art arrives, so views redraw.
6941
6942
  */
6942
6943
  async prepareStickers(refs) {
6943
- const list = [...new Set(refs.map((r) => this.readStickerRef(r)))].filter((r) => !_chunkZEYMKDYScjs.editorStampOf.call(void 0, r));
6944
+ const list = [...new Set(refs.map((r) => this.readStickerRef(r)))].filter((r) => !_chunk4JNWA3VTcjs.editorStampOf.call(void 0, r));
6944
6945
  try {
6945
6946
  await Promise.all(list.map((r) => this.stickerArt.ensure(this.stickers.provider, r, this.rasterizeSticker)));
6946
6947
  } catch (e) {
@@ -6955,14 +6956,14 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
6955
6956
  }
6956
6957
  readStickerRef(ref2) {
6957
6958
  try {
6958
- return _chunkZEYMKDYScjs.normalizeStickerRef.call(void 0, ref2);
6959
+ return _chunk4JNWA3VTcjs.normalizeStickerRef.call(void 0, ref2);
6959
6960
  } catch (e) {
6960
6961
  throw new PaintEditorError(e.message);
6961
6962
  }
6962
6963
  }
6963
6964
  /** Refuses to redraw stickers whose art has not loaded (they would vanish), naming them and what to call. */
6964
6965
  requireStickerArt(stickers) {
6965
- const missing = [...new Set(stickers.filter((s) => !_chunkH4AOUUBEcjs.stickerStamp.call(void 0, s) && !this.stickerArt.get(s.ref)).map((s) => s.ref))];
6966
+ const missing = [...new Set(stickers.filter((s) => !_chunkGT77U7QGcjs.stickerStamp.call(void 0, s) && !this.stickerArt.get(s.ref)).map((s) => s.ref))];
6966
6967
  if (missing.length) {
6967
6968
  for (const r of missing) void this.stickerArt.ensure(this.stickers.provider, r, this.rasterizeSticker).then(() => this.emit([]), () => this.emit([]));
6968
6969
  throw new PaintEditorError(`The art for ${missing.map((r) => `"${r}"`).join(", ")} has not loaded yet; it is loading now (prepareStickers), so try again when it has.`);
@@ -6990,7 +6991,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
6990
6991
  }
6991
6992
  redrawStickers(layer, stickers, dirty) {
6992
6993
  const partial = dirty && !layer.offset.x && !layer.offset.y;
6993
- return partial ? _chunkH4AOUUBEcjs.stickerSurface.call(void 0, stickers, layer.surface, dirty, this.stickerArt.get) : _chunkH4AOUUBEcjs.stickerSurface.call(void 0, stickers, void 0, void 0, this.stickerArt.get);
6994
+ return partial ? _chunkGT77U7QGcjs.stickerSurface.call(void 0, stickers, layer.surface, dirty, this.stickerArt.get) : _chunkGT77U7QGcjs.stickerSurface.call(void 0, stickers, void 0, void 0, this.stickerArt.get);
6994
6995
  }
6995
6996
  /** The document from before the sticker preview on screen, or `null` when none is (anything else changed the document since). */
6996
6997
  previewBase() {
@@ -6998,7 +6999,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
6998
6999
  }
6999
7000
  readStickerUpdate(update) {
7000
7001
  try {
7001
- return _chunkH4AOUUBEcjs.normalizeStickerUpdate.call(void 0, update);
7002
+ return _chunkGT77U7QGcjs.normalizeStickerUpdate.call(void 0, update);
7002
7003
  } catch (e) {
7003
7004
  throw new PaintEditorError(e.message);
7004
7005
  }
@@ -7009,7 +7010,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
7009
7010
  const id = _nullishCoalesce(layerId, () => ( this.doc.activeLayerId));
7010
7011
  if (!id) return null;
7011
7012
  this.requireLayer(id);
7012
- const hit = _chunkH4AOUUBEcjs.stickerAt.call(void 0, _nullishCoalesce(_optionalChain([this, 'access', _442 => _442.doc, 'access', _443 => _443.stickers, 'optionalAccess', _444 => _444[id]]), () => ( [])), x, y, this.stickerArt.get);
7013
+ const hit = _chunkGT77U7QGcjs.stickerAt.call(void 0, _nullishCoalesce(_optionalChain([this, 'access', _442 => _442.doc, 'access', _443 => _443.stickers, 'optionalAccess', _444 => _444[id]]), () => ( [])), x, y, this.stickerArt.get);
7013
7014
  return hit ? { ...hit } : null;
7014
7015
  }
7015
7016
  /** Picks a sticker for the panel and canvas (`null` for none). Editor state, not an undo step. */
@@ -7030,7 +7031,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
7030
7031
  if (i < 0) throw new PaintEditorError(`Layer "${layer.name}" has no sticker "${id}". Call list_stickers for the ids.`);
7031
7032
  const next = { ...stickers[i], ...this.readStickerUpdate(update) };
7032
7033
  const list = stickers.map((s, j) => j === i ? next : s);
7033
- const dirty = [_chunkH4AOUUBEcjs.stickerRect.call(void 0, stickers[i]), _chunkH4AOUUBEcjs.stickerRect.call(void 0, next)];
7034
+ const dirty = [_chunkGT77U7QGcjs.stickerRect.call(void 0, stickers[i]), _chunkGT77U7QGcjs.stickerRect.call(void 0, next)];
7034
7035
  const base = _nullishCoalesce(this.previewBase(), () => ( this.doc));
7035
7036
  const surface = this.redrawStickers(layer, list, dirty);
7036
7037
  this.doc = { ...this.doc, layers: _chunkDPYAO5U6cjs.mapLayer.call(void 0, this.doc.layers, layer.id, () => ({ ...layer, surface, offset: { x: 0, y: 0 } })), stickers: { ..._nullishCoalesce(this.doc.stickers, () => ( {})), [layer.id]: list } };
@@ -7053,7 +7054,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
7053
7054
  if (i < 0) throw new PaintEditorError(`Layer "${layer.name}" has no sticker "${id}". Call list_stickers for the ids.`);
7054
7055
  const u = this.readStickerUpdate(update);
7055
7056
  const next = { ...stickers[i], ...u };
7056
- this.commitStickers("Edit sticker", layer, stickers.map((s, j) => j === i ? next : s), [_chunkH4AOUUBEcjs.stickerRect.call(void 0, stickers[i]), _chunkH4AOUUBEcjs.stickerRect.call(void 0, next)]);
7057
+ this.commitStickers("Edit sticker", layer, stickers.map((s, j) => j === i ? next : s), [_chunkGT77U7QGcjs.stickerRect.call(void 0, stickers[i]), _chunkGT77U7QGcjs.stickerRect.call(void 0, next)]);
7057
7058
  return { ...next };
7058
7059
  }
7059
7060
  /**
@@ -7083,7 +7084,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
7083
7084
  const id = n++;
7084
7085
  return { id: `st${id}`, size: 48, rotation: 0, color: this.color, opacity: 1, seed: _nullishCoalesce(raw.seed, () => ( _chunk3K6HWEXZcjs.mix32.call(void 0, id * 2654435761 >>> 0) & 2147483647)), ...u };
7085
7086
  });
7086
- this.commitStickers("Add stickers", layer, [..._nullishCoalesce(existing, () => ( [])), ...added], _optionalChain([existing, 'optionalAccess', _449 => _449.length]) ? added.map(_chunkH4AOUUBEcjs.stickerRect) : void 0);
7087
+ this.commitStickers("Add stickers", layer, [..._nullishCoalesce(existing, () => ( [])), ...added], _optionalChain([existing, 'optionalAccess', _449 => _449.length]) ? added.map(_chunkGT77U7QGcjs.stickerRect) : void 0);
7087
7088
  return added.map((s) => ({ ...s }));
7088
7089
  }
7089
7090
  /** Brings stickers to the top (`front`) or bottom of their layer (one undo step). */
@@ -7093,7 +7094,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
7093
7094
  const picked = stickers.filter((s) => ids.includes(s.id));
7094
7095
  const rest = stickers.filter((s) => !ids.includes(s.id));
7095
7096
  const next = to === "front" ? [...rest, ...picked] : [...picked, ...rest];
7096
- this.commitStickers("Arrange stickers", layer, next, picked.map(_chunkH4AOUUBEcjs.stickerRect));
7097
+ this.commitStickers("Arrange stickers", layer, next, picked.map(_chunkGT77U7QGcjs.stickerRect));
7097
7098
  return next.map((s) => s.id);
7098
7099
  }
7099
7100
  /** Deletes stickers (`ids`, or all of them on the layer) (one undo step). Returns the ids removed. */
@@ -7103,7 +7104,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
7103
7104
  for (const id of ids) if (!stickers.some((s) => s.id === id)) throw new PaintEditorError(`Layer "${layer.name}" has no sticker "${id}". Call list_stickers for the ids.`);
7104
7105
  }
7105
7106
  const removed = ids ? [...ids] : stickers.map((s) => s.id);
7106
- this.commitStickers("Remove stickers", layer, stickers.filter((s) => !removed.includes(s.id)), ids ? stickers.filter((s) => removed.includes(s.id)).map(_chunkH4AOUUBEcjs.stickerRect) : void 0);
7107
+ this.commitStickers("Remove stickers", layer, stickers.filter((s) => !removed.includes(s.id)), ids ? stickers.filter((s) => removed.includes(s.id)).map(_chunkGT77U7QGcjs.stickerRect) : void 0);
7107
7108
  return removed;
7108
7109
  }
7109
7110
  /** Sets a layer's stickers (replays). */
@@ -7168,15 +7169,15 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
7168
7169
  let brush = was.brush;
7169
7170
  if (update.brushId !== void 0) {
7170
7171
  const b = this.requireBrush(update.brushId);
7171
- brush = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, { tip: { ...b.tip, size: was.brush.tip.size } }, b);
7172
+ brush = _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, { tip: { ...b.tip, size: was.brush.tip.size } }, b);
7172
7173
  }
7173
7174
  if (update.brush !== void 0) {
7174
7175
  if (!update.brush || typeof update.brush !== "object") throw new PaintEditorError("brush must be an object of brush settings (as set_brush takes).");
7175
- brush = _chunkH4AOUUBEcjs.normalizePaintBrush.call(void 0, { ...update.brush, id: brush.id }, brush);
7176
+ brush = _chunkGT77U7QGcjs.normalizePaintBrush.call(void 0, { ...update.brush, id: brush.id }, brush);
7176
7177
  }
7177
7178
  const why = liveStrokeRefusal(brush);
7178
7179
  if (why) throw new PaintEditorError(why);
7179
- const next = { ...was, brush: _chunkH4AOUUBEcjs.brushToJSON.call(void 0, brush) };
7180
+ const next = { ...was, brush: _chunkGT77U7QGcjs.brushToJSON.call(void 0, brush) };
7180
7181
  if (update.seed !== void 0) {
7181
7182
  if (!Number.isInteger(update.seed) || update.seed < 0) throw new PaintEditorError(`seed ${update.seed} must be a whole number of 0 or more.`);
7182
7183
  next.seed = update.seed;
@@ -7187,7 +7188,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
7187
7188
  }
7188
7189
  if (update.paint !== void 0) {
7189
7190
  if (update.paint === null) delete next.paint;
7190
- else if (_chunkH4AOUUBEcjs.isPaintEffectPaint.call(void 0, update.paint)) {
7191
+ else if (_chunkGT77U7QGcjs.isPaintEffectPaint.call(void 0, update.paint)) {
7191
7192
  if (!this.effectPaintImage(update.paint)) throw new PaintEditorError(`The effect "${update.paint.effect}" is not rendered yet; render it first (prepareEffectPaints; the update_stroke tool does this).`);
7192
7193
  next.paint = JSON.parse(JSON.stringify(update.paint));
7193
7194
  } else {
@@ -7198,7 +7199,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
7198
7199
  } else next.paint = JSON.parse(JSON.stringify(p));
7199
7200
  }
7200
7201
  }
7201
- const rgb = _chunkH4AOUUBEcjs.hexToRgb8.call(void 0, next.color).map((v) => v / 255);
7202
+ const rgb = _chunkGT77U7QGcjs.hexToRgb8.call(void 0, next.color).map((v) => v / 255);
7202
7203
  const load = brushLoadForStroke(brush, _chunkI7NJPHWVcjs.EMPTY_MIXER_LOAD, rgb);
7203
7204
  if (load.reservoir || load.pickup) next.load = load;
7204
7205
  else delete next.load;
@@ -7405,7 +7406,7 @@ var PaintEditorController = (_class12 = class _PaintEditorController {
7405
7406
  const live = strokes.filter(isLiveEffect);
7406
7407
  if (!isPixelLayer(layer) || !live.length) continue;
7407
7408
  layers.push({ layer, strokes });
7408
- for (const st of live) sources.set(_chunkH4AOUUBEcjs.effectPaintKey.call(void 0, st.paint), st.paint);
7409
+ for (const st of live) sources.set(_chunkGT77U7QGcjs.effectPaintKey.call(void 0, st.paint), st.paint);
7409
7410
  }
7410
7411
  return { layers, sources: [...sources.values()] };
7411
7412
  }
@@ -8178,7 +8179,7 @@ function createPaintStickerTools(c) {
8178
8179
  type: "object",
8179
8180
  properties: {
8180
8181
  ref: { type: "string", minLength: 1, description: "The sticker: a ref provider:id from find_stickers (e.g. editor:star). Give ref or stamp." },
8181
- stamp: { type: "string", enum: [..._chunkZEYMKDYScjs.STAMP_KINDS], description: "Older form: an editor stamp (same as ref editor:<stamp>)." },
8182
+ stamp: { type: "string", enum: [..._chunk4JNWA3VTcjs.STAMP_KINDS], description: "Older form: an editor stamp (same as ref editor:<stamp>)." },
8182
8183
  x: { type: "number", description: "Centre x in document pixels." },
8183
8184
  y: { type: "number", description: "Centre y in document pixels." },
8184
8185
  size: { type: "number", minimum: 2, maximum: 2048, description: "Diameter in pixels (default 48)." },
@@ -8216,7 +8217,7 @@ function createPaintStickerTools(c) {
8216
8217
  layerId: LAYER_ID,
8217
8218
  id: { type: "string", description: "Sticker id from list_stickers." },
8218
8219
  ref: { type: "string", minLength: 1, description: "Another sticker: a ref provider:id from find_stickers." },
8219
- stamp: { type: "string", enum: [..._chunkZEYMKDYScjs.STAMP_KINDS], description: "Older form: another editor stamp (same as ref editor:<stamp>)." },
8220
+ stamp: { type: "string", enum: [..._chunk4JNWA3VTcjs.STAMP_KINDS], description: "Older form: another editor stamp (same as ref editor:<stamp>)." },
8220
8221
  x: { type: "number", description: "Centre x in document pixels." },
8221
8222
  y: { type: "number", description: "Centre y in document pixels." },
8222
8223
  size: { type: "number", minimum: 2, maximum: 2048, description: "Diameter in pixels." },
@@ -9137,7 +9138,7 @@ var BEHAVIOR = {
9137
9138
  type: "object",
9138
9139
  description: "Multi-coloured brush (the older form of paint, the brush's own gradient: tip is across-tip, dab is distance in dabs or random). Read back from paint when it has a multi-colour equivalent. Missing fields keep their current values.",
9139
9140
  properties: {
9140
- mode: { type: "string", enum: [..._chunkH4AOUUBEcjs.MULTI_COLOR_MODES], description: "off; tip: the colours lie side by side across the tip (stripes along the stroke, like a brush loaded with several paints); dab: the colour changes along the stroke." },
9141
+ mode: { type: "string", enum: [..._chunkGT77U7QGcjs.MULTI_COLOR_MODES], description: "off; tip: the colours lie side by side across the tip (stripes along the stroke, like a brush loaded with several paints); dab: the colour changes along the stroke." },
9141
9142
  colors: { type: "array", maxItems: 8, items: { ...COLOR3 }, description: "2..8 colours #rrggbb; fewer than 2 uses the paint colour and the secondary colour." },
9142
9143
  order: { type: "string", enum: ["sequence", "random"], description: "dab mode: sequence runs through the colours in order, blending between them; random picks one per run of dabs (seeded)." },
9143
9144
  length: { type: "integer", minimum: 1, maximum: 500, description: "dab mode: dabs per colour (default 12)." },
@@ -9178,10 +9179,10 @@ var WET_BRUSH = {
9178
9179
  properties: {
9179
9180
  tool: {
9180
9181
  type: "string",
9181
- enum: [..._chunkH4AOUUBEcjs.WET_TOOLS],
9182
+ enum: [..._chunkGT77U7QGcjs.WET_TOOLS],
9182
9183
  description: "paint: water and pigment (picks up and mixes wet paint by behavior.pickup / mix); water: clear water (with rewet it lifts dried paint); dry: a hair dryer, takes water; blow: pushes the water along the stroke; blend: evens out wet pigment; smudge: drags wet paint; blot: a tissue, takes wet paint up (erase wet)."
9183
9184
  },
9184
- medium: { type: "string", enum: [..._chunkH4AOUUBEcjs.WET_MEDIA], description: "The medium: watercolor, gouache or oil. A layer takes the medium's wet settings the first time it holds wet paint (oil: thick, barely flows, stays wet long and blends into the wet paint it meets)." },
9185
+ medium: { type: "string", enum: [..._chunkGT77U7QGcjs.WET_MEDIA], description: "The medium: watercolor, gouache or oil. A layer takes the medium's wet settings the first time it holds wet paint (oil: thick, barely flows, stays wet long and blends into the wet paint it meets)." },
9185
9186
  load: { type: "number", minimum: 0, maximum: 1, description: "Paint loading: 1 never runs out; lower, the brush runs dry along a long stroke (each stroke reloads)." },
9186
9187
  thinner: { type: "number", minimum: 0, maximum: 1, description: "Thinner (water or solvent): more transparent, runnier paint." },
9187
9188
  water: { type: "number", minimum: 0, maximum: 1, description: "Wetness: water laid per stroke, 0.2 a damp brush .. 1 a dripping one." },
@@ -9198,7 +9199,7 @@ var IMPASTO_BRUSH = {
9198
9199
  properties: {
9199
9200
  tool: {
9200
9201
  type: "string",
9201
- enum: [..._chunkH4AOUUBEcjs.IMPASTO_TOOLS],
9202
+ enum: [..._chunkGT77U7QGcjs.IMPASTO_TOOLS],
9202
9203
  description: "brush: thick paint with bristle ridges along the stroke; tube: blobs squeezed from the tube; knife: a palette knife that scrapes the relief flat and smears the paint; roller: a flat stippled band; gloop: a thick, glossy, rounded bead."
9203
9204
  },
9204
9205
  thickness: { type: "number", minimum: 0, maximum: 1, description: "How far the paint stands up." },
@@ -9227,12 +9228,12 @@ var PARTICLE_BRUSH = {
9227
9228
  properties: {
9228
9229
  kind: {
9229
9230
  type: "string",
9230
- enum: [..._chunkH4AOUUBEcjs.PARTICLE_KINDS],
9231
+ enum: [..._chunkGT77U7QGcjs.PARTICLE_KINDS],
9231
9232
  description: "string: strands of masses on springs dragged behind the pen (hair, fur, wet string); spring: particles on springs to the pen, overshooting and wobbling; orbit: particles circling the pen (curls); flow: particles thrown off the pen into a swirling flow until they fade; elastic: strands whose links keep a rest length, stretching when the pen is fast and snapping back; fuzzy: winding strings, each strand waving out of step with the others (always waves by at least 0.12 of the tip size)."
9232
9233
  },
9233
9234
  render: {
9234
9235
  type: "string",
9235
- enum: [..._chunkH4AOUUBEcjs.PARTICLE_RENDERS],
9236
+ enum: [..._chunkGT77U7QGcjs.PARTICLE_RENDERS],
9236
9237
  description: "dot: a mark at each step (round, or dotTextures); line: each particle draws a continuous line; sequence: beads spaced along each path (round, or dotTextures); ribbon: the band between neighbouring particles' paths filled (ribbonFill), with the paths drawn as its edges at the mark size (flame, silk, smoke)."
9237
9238
  },
9238
9239
  count: { type: "integer", minimum: 1, maximum: 64, description: "Particles (flow: how many are thrown per tip of travel)." },
@@ -9245,19 +9246,19 @@ var PARTICLE_BRUSH = {
9245
9246
  life: { type: "number", minimum: 0, maximum: 1, description: "Flow particles: how long they live." },
9246
9247
  interval: { type: "number", minimum: 0, maximum: 1, description: "Sequence: spacing of the beads." },
9247
9248
  ribbonFill: { type: "number", minimum: 0, maximum: 1, description: "Ribbon: opacity of the fill between the paths, relative to their edges (default 0.5; 0 draws only the edges)." },
9248
- ribbonPairs: { type: "string", enum: [..._chunkH4AOUUBEcjs.RIBBON_PAIRS], description: "Ribbon: adjacent (default) joins each particle to its neighbour around the pen; first-last makes one band between the outermost two." },
9249
+ ribbonPairs: { type: "string", enum: [..._chunkGT77U7QGcjs.RIBBON_PAIRS], description: "Ribbon: adjacent (default) joins each particle to its neighbour around the pen; first-last makes one band between the outermost two." },
9249
9250
  waveAmplitude: { type: "number", minimum: 0, maximum: 1, description: "Wave: how far each particle's drawn place swings sideways to the stroke, as a fraction of the tip size (default 0: no wave). Works with every kind and render." },
9250
9251
  waveLength: { type: "number", minimum: 4, maximum: 2e3, description: "Wave: wavelength in px of pen travel (default 60)." },
9251
9252
  waveSpeed: { type: "number", minimum: 0, maximum: 1, description: "Wave: how fast the waves run, by stroke time (0 default: they stand still on the path; 1: about four a second, so slow strokes wave more). Strokes without times run at a nominal 0.5 px/ms." },
9252
9253
  wavePhaseJitter: { type: "number", minimum: 0, maximum: 1, description: "Wave: how far out of step the particles' waves are (default 0: all in step, a wavy band; 1: random phases, tangled strands)." },
9253
9254
  dotTextures: {
9254
9255
  type: "array",
9255
- maxItems: _chunkH4AOUUBEcjs.MAX_DOT_TEXTURES,
9256
- items: { type: "string", enum: [..._chunkZEYMKDYScjs.STAMP_KINDS], description: "A stamp." },
9257
- description: `Dot and sequence renders: up to ${_chunkH4AOUUBEcjs.MAX_DOT_TEXTURES} sticker stamps (list_stickers) drawn instead of round marks; repeats are allowed (they weight the order). Empty (default): round marks.`
9256
+ maxItems: _chunkGT77U7QGcjs.MAX_DOT_TEXTURES,
9257
+ items: { type: "string", enum: [..._chunk4JNWA3VTcjs.STAMP_KINDS], description: "A stamp." },
9258
+ description: `Dot and sequence renders: up to ${_chunkGT77U7QGcjs.MAX_DOT_TEXTURES} sticker stamps (list_stickers) drawn instead of round marks; repeats are allowed (they weight the order). Empty (default): round marks.`
9258
9259
  },
9259
- dotTextureOrder: { type: "string", enum: [..._chunkH4AOUUBEcjs.DOT_TEXTURE_ORDERS], description: "Textured dots: sequence (default) uses the stamps in turn; random picks one per dot (seeded, so replays are exact)." },
9260
- dotRotation: { type: "string", enum: [..._chunkH4AOUUBEcjs.DOT_ROTATIONS], description: "Textured dots: follow turns each with its particle's motion; random (default) turns each at random; fixed uses the tip angle." }
9260
+ dotTextureOrder: { type: "string", enum: [..._chunkGT77U7QGcjs.DOT_TEXTURE_ORDERS], description: "Textured dots: sequence (default) uses the stamps in turn; random picks one per dot (seeded, so replays are exact)." },
9261
+ dotRotation: { type: "string", enum: [..._chunkGT77U7QGcjs.DOT_ROTATIONS], description: "Textured dots: follow turns each with its particle's motion; random (default) turns each at random; fixed uses the tip angle." }
9261
9262
  },
9262
9263
  additionalProperties: false
9263
9264
  };
@@ -9281,9 +9282,9 @@ var STICKER_BRUSH = {
9281
9282
  stamps: {
9282
9283
  type: "array",
9283
9284
  minItems: 1,
9284
- maxItems: _chunkH4AOUUBEcjs.MAX_STICKER_STAMPS,
9285
+ maxItems: _chunkGT77U7QGcjs.MAX_STICKER_STAMPS,
9285
9286
  items: { type: "string", minLength: 1, description: "A sticker ref provider:id from find_stickers (e.g. editor:star); a bare editor stamp (star) means editor:star." },
9286
- description: `The stickers to spray, one picked at random per sticker: refs from find_stickers (the editor's own: ${_chunkZEYMKDYScjs.STAMP_KINDS.map((k) => `editor:${k}`).join(", ")}). Each is checked against the sticker library and an unknown ref is refused with the closest ones. A provider's sticker is drawn from its art (tinted to the paint colour when tintable), loaded before the stroke.`
9287
+ description: `The stickers to spray, one picked at random per sticker: refs from find_stickers (the editor's own: ${_chunk4JNWA3VTcjs.STAMP_KINDS.map((k) => `editor:${k}`).join(", ")}). Each is checked against the sticker library and an unknown ref is refused with the closest ones. A provider's sticker is drawn from its art (tinted to the paint colour when tintable), loaded before the stroke.`
9287
9288
  },
9288
9289
  density: { type: "number", minimum: 0, maximum: 1, description: "How closely stickers follow each other: about density \xD7 4 stickers per tip diameter of travel (0.25 \u2248 one per diameter, 1 \u2248 four). Default 0.4." },
9289
9290
  sizeJitter: { type: "number", minimum: 0, maximum: 1, description: "Random size change." },
@@ -9295,16 +9296,16 @@ var STICKER_BRUSH = {
9295
9296
  };
9296
9297
  var BRUSH_FIELDS = {
9297
9298
  name: { type: "string", minLength: 1, maxLength: 80, description: "Display name." },
9298
- category: { type: "string", enum: [..._chunkH4AOUUBEcjs.PAINT_BRUSH_CATEGORIES], description: "Library category." },
9299
+ category: { type: "string", enum: [..._chunkGT77U7QGcjs.PAINT_BRUSH_CATEGORIES], description: "Library category." },
9299
9300
  engine: {
9300
9301
  type: "string",
9301
- enum: [..._chunkH4AOUUBEcjs.PAINT_BRUSH_ENGINES],
9302
+ enum: [..._chunkGT77U7QGcjs.PAINT_BRUSH_ENGINES],
9302
9303
  description: "dab: paints dabs (with behavior.pickup or gradient paint it paints dab by dab, lifting and mixing paint); eraser: removes paint; mixer: the Mixer Brush (a reservoir plus picked-up paint); blender: mixes the colours under and near the tip; smudge: drags paint along the stroke; wet: watercolour, gouache, oil and the wet tools on a simulated wet layer (see wet); impasto: thick paint with relief (see impasto); particle: procedural particle brushes (see particle); bristle: a tuft of bristles that bend and splay (see bristle); sticker: sprays editable sticker stamps (see sticker)."
9303
9304
  },
9304
9305
  tip: TIP,
9305
9306
  grain: { type: "number", minimum: 0, maximum: 1, description: "Paper grain response: 0 ignores the grain, 1 catches only its peaks at light pressure (pencil, pastel, charcoal). Multiplied by the paper depth." },
9306
9307
  pressureSmoothing: { type: "number", minimum: 0, maximum: 0.95, description: "Pressure smoothing, separate from the tip position smoothing." },
9307
- rotation: { type: "string", enum: [..._chunkH4AOUUBEcjs.BRUSH_ROTATIONS], description: "What turns the tip: fixed (tip.angle), stroke (follows the direction of travel) or barrel (the pen barrel rotation, twist)." },
9308
+ rotation: { type: "string", enum: [..._chunkGT77U7QGcjs.BRUSH_ROTATIONS], description: "What turns the tip: fixed (tip.angle), stroke (follows the direction of travel) or barrel (the pen barrel rotation, twist)." },
9308
9309
  dynamics: DYNAMICS,
9309
9310
  mixer: MIXER,
9310
9311
  loadsColor: { type: "boolean", description: "Mixer engine: load the colour each stroke (false for a mixer that only moves paint)." },
@@ -9356,7 +9357,7 @@ function brushSummary(b) {
9356
9357
  size: b.tip.size,
9357
9358
  grain: b.grain,
9358
9359
  rotation: b.rotation,
9359
- wetCapable: _chunkH4AOUUBEcjs.isWetCapable.call(void 0, b),
9360
+ wetCapable: _chunkGT77U7QGcjs.isWetCapable.call(void 0, b),
9360
9361
  pickup: b.behavior.pickup,
9361
9362
  dirty: b.behavior.dirty,
9362
9363
  multicolor: b.behavior.multicolor.mode,
@@ -9465,8 +9466,8 @@ function createPaintEditorToolProvider(controller, options = {}) {
9465
9466
  inputSchema: EMPTY3,
9466
9467
  annotations: { title: "List papers", ...READ6 },
9467
9468
  handler: () => ({
9468
- papers: _chunkH4AOUUBEcjs.PAPER_LIBRARY.map((p) => ({ id: p.preset, name: p.name, family: p.family, pattern: p.pattern, color: p.color, depth: p.depth, absorption: p.absorption, permeability: p.permeability, roughness: p.roughness })),
9469
- families: [..._chunkH4AOUUBEcjs.PAPER_FAMILIES],
9469
+ papers: _chunkGT77U7QGcjs.PAPER_LIBRARY.map((p) => ({ id: p.preset, name: p.name, family: p.family, pattern: p.pattern, color: p.color, depth: p.depth, absorption: p.absorption, permeability: p.permeability, roughness: p.roughness })),
9470
+ families: [..._chunkGT77U7QGcjs.PAPER_FAMILIES],
9470
9471
  patterns: [..._chunkI7NJPHWVcjs.GRAIN_PATTERNS]
9471
9472
  })
9472
9473
  });
@@ -9699,10 +9700,10 @@ function createPaintEditorToolProvider(controller, options = {}) {
9699
9700
  annotations: { title: "Get a brush", ...READ6 },
9700
9701
  handler: ({ id }) => {
9701
9702
  const st = c.getState();
9702
- if (id === void 0) return { ..._chunkH4AOUUBEcjs.brushToJSON.call(void 0, st.brush), strokePaint: _nullishCoalesce(st.brush.paint, () => ( st.paint)) };
9703
+ if (id === void 0) return { ..._chunkGT77U7QGcjs.brushToJSON.call(void 0, st.brush), strokePaint: _nullishCoalesce(st.brush.paint, () => ( st.paint)) };
9703
9704
  const b = c.getBrush(id);
9704
9705
  if (!b) throw new Error(`Unknown brush "${id}". Call list_brushes for the ids.`);
9705
- return { ..._chunkH4AOUUBEcjs.brushToJSON.call(void 0, b), builtin: Boolean(b.builtin), strokePaint: _nullishCoalesce(b.paint, () => ( st.paint)) };
9706
+ return { ..._chunkGT77U7QGcjs.brushToJSON.call(void 0, b), builtin: Boolean(b.builtin), strokePaint: _nullishCoalesce(b.paint, () => ( st.paint)) };
9706
9707
  }
9707
9708
  });
9708
9709
  add({
@@ -9714,7 +9715,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
9714
9715
  handler: async (a) => {
9715
9716
  const stamps = _optionalChain([a, 'access', _502 => _502.sticker, 'optionalAccess', _503 => _503.stamps]);
9716
9717
  if (stamps) await c.prepareStickers(stamps);
9717
- return _chunkH4AOUUBEcjs.brushToJSON.call(void 0, c.setBrush(a));
9718
+ return _chunkGT77U7QGcjs.brushToJSON.call(void 0, c.setBrush(a));
9718
9719
  }
9719
9720
  });
9720
9721
  add({
@@ -9731,7 +9732,7 @@ function createPaintEditorToolProvider(controller, options = {}) {
9731
9732
  additionalProperties: false
9732
9733
  },
9733
9734
  annotations: { title: "Save a brush", ...SET4 },
9734
- handler: ({ id, name }) => _chunkH4AOUUBEcjs.brushToJSON.call(void 0, c.saveBrush({ id, name }))
9735
+ handler: ({ id, name }) => _chunkGT77U7QGcjs.brushToJSON.call(void 0, c.saveBrush({ id, name }))
9735
9736
  });
9736
9737
  add({
9737
9738
  name: "remove_brush",
@@ -10202,9 +10203,9 @@ function createPaintEditorToolProvider(controller, options = {}) {
10202
10203
  tools.push(...createPaintReplayTools(c));
10203
10204
  tools.push(...createPaintStickerTools(c));
10204
10205
  tools.push(..._chunkKBYB7OWBcjs.createPigmentTools.call(void 0, ));
10205
- tools.push(..._chunkZEYMKDYScjs.createStickerTools.call(void 0, { provider: () => c.stickersProvider }));
10206
+ tools.push(..._chunk4JNWA3VTcjs.createStickerTools.call(void 0, { provider: () => c.stickersProvider }));
10206
10207
  tools.push(
10207
- ..._chunkLP2MCSBEcjs.createLayerEffectTools.call(void 0,
10208
+ ..._chunkM2VKFE5Lcjs.createLayerEffectTools.call(void 0,
10208
10209
  {
10209
10210
  requireLayer: (id) => void c.getLayerEffects(id),
10210
10211
  getLayerEffects: (id) => c.getLayerEffects(id),
@@ -10914,7 +10915,7 @@ var DOT_ROTATION_LABELS = { follow: "Follow motion", random: "Random", fixed: "T
10914
10915
  var STAMP_LABELS = { dot: "Dot", star: "Star", heart: "Heart", leaf: "Leaf", flower: "Flower", confetti: "Confetti", splat: "Splat", sparkle: "Sparkle", ring: "Ring" };
10915
10916
  function toggleStickerRef(refs, ref2) {
10916
10917
  if (refs.includes(ref2)) return refs.length > 1 ? refs.filter((r) => r !== ref2) : [...refs];
10917
- return refs.length < _chunkH4AOUUBEcjs.MAX_STICKER_STAMPS ? [...refs, ref2] : [...refs];
10918
+ return refs.length < _chunkGT77U7QGcjs.MAX_STICKER_STAMPS ? [...refs, ref2] : [...refs];
10918
10919
  }
10919
10920
  function stickerRefLabel(ref2) {
10920
10921
  const stamp = ref2.startsWith("editor:") ? ref2.slice(7) : null;
@@ -10927,7 +10928,7 @@ function toggleStamp(stamps, stamp) {
10927
10928
  }
10928
10929
  function toggleDotTexture(textures, stamp) {
10929
10930
  if (textures.includes(stamp)) return textures.filter((s) => s !== stamp);
10930
- return textures.length < _chunkH4AOUUBEcjs.MAX_DOT_TEXTURES ? [...textures, stamp] : [...textures];
10931
+ return textures.length < _chunkGT77U7QGcjs.MAX_DOT_TEXTURES ? [...textures, stamp] : [...textures];
10931
10932
  }
10932
10933
  var STROKE_SLIDERS = [
10933
10934
  { path: "tip.size", label: "Size", min: 1, max: 400, step: 1 },
@@ -10998,7 +10999,7 @@ function createPaintEffectsToolProvider(controller, options = {}) {
10998
10999
  if (changes.enabled !== void 0) throw new Error("enabled does not apply here: hide an effect layer with update_layer visible false, or remove the effect paper.");
10999
11000
  };
11000
11001
  const values = (v) => v;
11001
- return withPaintPlayback(_chunkGHCSC2WPcjs.createEffectToolProvider.call(void 0, {
11002
+ return withPaintPlayback(_chunkISIO63Q5cjs.createEffectToolProvider.call(void 0, {
11002
11003
  id: _nullishCoalesce(options.id, () => ( "paint-effects")),
11003
11004
  namespace: options.namespace,
11004
11005
  title: "Paint effects",
@@ -11568,4 +11569,4 @@ function createPaintEditorDocument(controller, options = {}) {
11568
11569
 
11569
11570
 
11570
11571
 
11571
- exports.BACKLIGHT_SPILL = BACKLIGHT_SPILL; exports.BLEND_MENU_GROUPS = BLEND_MENU_GROUPS; exports.BLEND_MODES = _chunk2VX55NFMcjs.BLEND_MODES; exports.BRUSH_ID = _chunkH4AOUUBEcjs.BRUSH_ID; exports.BRUSH_ROTATIONS = _chunkH4AOUUBEcjs.BRUSH_ROTATIONS; exports.BRUSH_SLIDERS = BRUSH_SLIDERS; exports.BUILTIN_BRUSHES = _chunkH4AOUUBEcjs.BUILTIN_BRUSHES; exports.BristleStroke = _chunkH4AOUUBEcjs.BristleStroke; exports.DEFAULT_BACKLIGHT_COLOR = DEFAULT_BACKLIGHT_COLOR; exports.DEFAULT_BEHAVIOR = _chunkH4AOUUBEcjs.DEFAULT_BEHAVIOR; exports.DEFAULT_BRISTLE = _chunkH4AOUUBEcjs.DEFAULT_BRISTLE; exports.DEFAULT_BRUSH_ID = _chunkH4AOUUBEcjs.DEFAULT_BRUSH_ID; exports.DEFAULT_DPI = DEFAULT_DPI; exports.DEFAULT_DYNAMICS = _chunkH4AOUUBEcjs.DEFAULT_DYNAMICS; exports.DEFAULT_FLOW = _chunkKBYB7OWBcjs.DEFAULT_FLOW; exports.DEFAULT_IMPASTO = _chunkH4AOUUBEcjs.DEFAULT_IMPASTO; exports.DEFAULT_LIGHT = _chunkH4AOUUBEcjs.DEFAULT_LIGHT; exports.DEFAULT_LIGHTING = DEFAULT_LIGHTING; exports.DEFAULT_MULTI_COLOR = _chunkH4AOUUBEcjs.DEFAULT_MULTI_COLOR; exports.DEFAULT_PAINT_GRADIENT = _chunkI7NJPHWVcjs.DEFAULT_PAINT_GRADIENT; exports.DEFAULT_PAINT_GRADIENT_MAPPING = _chunkI7NJPHWVcjs.DEFAULT_PAINT_GRADIENT_MAPPING; exports.DEFAULT_PAPER = _chunkH4AOUUBEcjs.DEFAULT_PAPER; exports.DEFAULT_PARTICLE = _chunkH4AOUUBEcjs.DEFAULT_PARTICLE; exports.DEFAULT_STICKER = _chunkH4AOUUBEcjs.DEFAULT_STICKER; exports.DEFAULT_SWATCHES = DEFAULT_SWATCHES; exports.DEFAULT_VIEW = DEFAULT_VIEW; exports.DEFAULT_WET_BRUSH = _chunkH4AOUUBEcjs.DEFAULT_WET_BRUSH; exports.DEFAULT_WET_PARAMS = _chunkKBYB7OWBcjs.DEFAULT_WET_PARAMS; exports.DOT_ROTATIONS = _chunkH4AOUUBEcjs.DOT_ROTATIONS; exports.DOT_ROTATION_LABELS = DOT_ROTATION_LABELS; exports.DOT_TEXTURE_ORDERS = _chunkH4AOUUBEcjs.DOT_TEXTURE_ORDERS; exports.DOT_TEXTURE_ORDER_LABELS = DOT_TEXTURE_ORDER_LABELS; exports.DryStroke = _chunkH4AOUUBEcjs.DryStroke; exports.EFFECT_MAP_REPEATS = _chunkH4AOUUBEcjs.EFFECT_MAP_REPEATS; exports.EFFECT_STRIP_HEIGHT = _chunkH4AOUUBEcjs.EFFECT_STRIP_HEIGHT; exports.GPU_LEAD = GPU_LEAD; exports.GRAIN_PATTERNS = _chunkI7NJPHWVcjs.GRAIN_PATTERNS; exports.GRAIN_TILE = _chunkI7NJPHWVcjs.GRAIN_TILE; exports.HARMONY_KINDS = _chunk7PT4RJL5cjs.HARMONY_KINDS; exports.IDENTITY_AFFINE = IDENTITY_AFFINE; exports.IDENTITY_COPY = _chunkH4AOUUBEcjs.IDENTITY_COPY; exports.IMPASTO_TOOLS = _chunkH4AOUUBEcjs.IMPASTO_TOOLS; exports.IMPASTO_TOOL_LABELS = IMPASTO_TOOL_LABELS; exports.LIGHT_SLIDERS = LIGHT_SLIDERS; exports.LIVE_STROKE_ENGINES = LIVE_STROKE_ENGINES; exports.LitCache = LitCache; exports.MAX_BRUSH_SIZE = _chunkI7NJPHWVcjs.MAX_BRUSH_SIZE; exports.MAX_CANVAS_SIDE = MAX_CANVAS_SIDE; exports.MAX_COORDINATE = MAX_COORDINATE; exports.MAX_DOT_TEXTURES = _chunkH4AOUUBEcjs.MAX_DOT_TEXTURES; exports.MAX_IMAGE_SIDE = MAX_IMAGE_SIDE; exports.MAX_LIVE_EFFECT_SOURCES = MAX_LIVE_EFFECT_SOURCES; exports.MAX_STICKER_STAMPS = _chunkH4AOUUBEcjs.MAX_STICKER_STAMPS; exports.MAX_ZOOM = MAX_ZOOM; exports.MIN_CANVAS_SIDE = MIN_CANVAS_SIDE; exports.MIN_ZOOM = MIN_ZOOM; exports.MIXING_PAD_HEIGHT = MIXING_PAD_HEIGHT; exports.MIXING_PAD_WIDTH = MIXING_PAD_WIDTH; exports.MULTI_COLOR_MODES = _chunkH4AOUUBEcjs.MULTI_COLOR_MODES; exports.MixingPad = MixingPad; exports.PAD_SAMPLE_SIZES = PAD_SAMPLE_SIZES; exports.PAINTERLY_BLEND_MODES = _chunk2VX55NFMcjs.PAINTERLY_BLEND_MODES; exports.PAINT_BRUSH_CATEGORIES = _chunkH4AOUUBEcjs.PAINT_BRUSH_CATEGORIES; exports.PAINT_BRUSH_ENGINES = _chunkH4AOUUBEcjs.PAINT_BRUSH_ENGINES; exports.PAINT_COLOR_JSON_SCHEMA = _chunkI7NJPHWVcjs.PAINT_COLOR_JSON_SCHEMA; exports.PAINT_EFFECT_PLACES = PAINT_EFFECT_PLACES; exports.PAINT_FORMAT = PAINT_FORMAT; exports.PAINT_GRADIENT_FULL_SPEED = _chunkI7NJPHWVcjs.PAINT_GRADIENT_FULL_SPEED; exports.PAINT_GRADIENT_JSON_SCHEMA = _chunkI7NJPHWVcjs.PAINT_GRADIENT_JSON_SCHEMA; exports.PAINT_GRADIENT_KIT = _chunkI7NJPHWVcjs.PAINT_GRADIENT_KIT; exports.PAINT_GRADIENT_MAPPINGS = _chunkI7NJPHWVcjs.PAINT_GRADIENT_MAPPINGS; exports.PAINT_GRADIENT_MAPPING_LABELS = _chunkI7NJPHWVcjs.PAINT_GRADIENT_MAPPING_LABELS; exports.PAINT_GRADIENT_PRESETS = _chunkI7NJPHWVcjs.PAINT_GRADIENT_PRESETS; exports.PAINT_GRADIENT_REPEATS = _chunkI7NJPHWVcjs.PAINT_GRADIENT_REPEATS; exports.PAINT_GRADIENT_REPEAT_LABELS = _chunkI7NJPHWVcjs.PAINT_GRADIENT_REPEAT_LABELS; exports.PAINT_GRADIENT_SPACES = _chunkI7NJPHWVcjs.PAINT_GRADIENT_SPACES; exports.PAINT_GRADIENT_SPACE_LABELS = _chunkI7NJPHWVcjs.PAINT_GRADIENT_SPACE_LABELS; exports.PAINT_SCHEMA_VERSION = PAINT_SCHEMA_VERSION; exports.PAINT_SOURCE_JSON_SCHEMA = _chunkI7NJPHWVcjs.PAINT_SOURCE_JSON_SCHEMA; exports.PAINT_TARGET = PAINT_TARGET; exports.PAINT_TOOLS = PAINT_TOOLS; exports.PAPER_EFFECT_BLENDS = PAPER_EFFECT_BLENDS; exports.PAPER_EFFECT_NODE_ID = PAPER_EFFECT_NODE_ID; exports.PAPER_FAMILIES = _chunkH4AOUUBEcjs.PAPER_FAMILIES; exports.PAPER_LIBRARY = _chunkH4AOUUBEcjs.PAPER_LIBRARY; exports.PAPER_NODE_ID = PAPER_NODE_ID; exports.PAPER_SLIDERS = PAPER_SLIDERS; exports.PAPER_TARGET = PAPER_TARGET; exports.PARTICLE_KINDS = _chunkH4AOUUBEcjs.PARTICLE_KINDS; exports.PARTICLE_KIND_LABELS = PARTICLE_KIND_LABELS; exports.PARTICLE_RENDERS = _chunkH4AOUUBEcjs.PARTICLE_RENDERS; exports.PARTICLE_RENDER_LABELS = PARTICLE_RENDER_LABELS; exports.PaintCanvasPresenter = PaintCanvasPresenter; exports.PaintDabStroke = PaintDabStroke; exports.PaintDirector = PaintDirector; exports.PaintDocumentError = PaintDocumentError; exports.PaintEditorController = PaintEditorController; exports.PaintEditorError = PaintEditorError; exports.PaintEffectsRenderer = PaintEffectsRenderer; exports.PaintGesture = PaintGesture; exports.PaintGradientSampler = _chunkI7NJPHWVcjs.PaintGradientSampler; exports.PaintPresence = PaintPresence; exports.PaintSourceError = _chunkI7NJPHWVcjs.PaintSourceError; exports.PaintStrokeSession = PaintStrokeSession; exports.PaintWetLayers = PaintWetLayers; exports.PaperGrain = _chunkI7NJPHWVcjs.PaperGrain; exports.ParticleStroke = _chunkH4AOUUBEcjs.ParticleStroke; exports.PenDabWalker = _chunkH4AOUUBEcjs.PenDabWalker; exports.PenSmoother = _chunkH4AOUUBEcjs.PenSmoother; exports.PerspectiveSnapper = PerspectiveSnapper; exports.RIBBON_PAIRS = _chunkH4AOUUBEcjs.RIBBON_PAIRS; exports.RIBBON_PAIR_LABELS = RIBBON_PAIR_LABELS; exports.SNAP_DECIDE_DISTANCE = SNAP_DECIDE_DISTANCE; exports.STAMP_KINDS = _chunkZEYMKDYScjs.STAMP_KINDS; exports.STAMP_LABELS = STAMP_LABELS; exports.STENCIL_KINDS = STENCIL_KINDS; exports.STENCIL_SHAPES = STENCIL_SHAPES; exports.STICKER_ART_SIZE = _chunkH4AOUUBEcjs.STICKER_ART_SIZE; exports.STICKER_SLIDERS = STICKER_SLIDERS; exports.STROKE_SLIDERS = STROKE_SLIDERS; exports.SYMMETRY_MODES = SYMMETRY_MODES; exports.StencilSnapper = StencilSnapper; exports.StickerArtCache = _chunkH4AOUUBEcjs.StickerArtCache; exports.StickerBrowser = _chunkLJRCU3BJcjs.StickerBrowser; exports.StickerSpray = _chunkH4AOUUBEcjs.StickerSpray; exports.TRACING_NODE_ID = TRACING_NODE_ID; exports.ThickStrokeDriver = ThickStrokeDriver; exports.TileableNoise = _chunk3K6HWEXZcjs.TileableNoise; exports.WET_FLOW_KINDS = _chunkKBYB7OWBcjs.WET_FLOW_KINDS; exports.WET_GPU_MODES = WET_GPU_MODES; exports.WET_GPU_OPTIONS = WET_GPU_OPTIONS; exports.WET_MEDIA = _chunkH4AOUUBEcjs.WET_MEDIA; exports.WET_MEDIUM_LABELS = WET_MEDIUM_LABELS; exports.WET_MEDIUM_PARAMS = WET_MEDIUM_PARAMS; exports.WET_PARAM_KEYS = _chunkKBYB7OWBcjs.WET_PARAM_KEYS; exports.WET_PARAM_SCHEMA = WET_PARAM_SCHEMA; exports.WET_PARAM_SLIDERS = WET_PARAM_SLIDERS; exports.WET_SPEED_SLIDER = WET_SPEED_SLIDER; exports.WET_TILT_SLIDERS = WET_TILT_SLIDERS; exports.WET_TOOLS = _chunkH4AOUUBEcjs.WET_TOOLS; exports.WET_TOOL_LABELS = WET_TOOL_LABELS; exports.WetStrokeDriver = WetStrokeDriver; exports.addPaintGradientStop = _chunkI7NJPHWVcjs.addPaintGradientStop; exports.addPolygonArea = _chunkH4AOUUBEcjs.addPolygonArea; exports.affineCopy = affineCopy; exports.applyAffine = applyAffine; exports.backlightOf = backlightOf; exports.brushEngineControls = brushEngineControls; exports.brushLoadColor = brushLoadColor; exports.brushLoadForStroke = brushLoadForStroke; exports.brushTakesPaint = _chunkH4AOUUBEcjs.brushTakesPaint; exports.brushToJSON = _chunkH4AOUUBEcjs.brushToJSON; exports.buildTimeLapse = buildTimeLapse; exports.checkPaintEffectPlace = checkPaintEffectPlace; exports.clonePaper = _chunkH4AOUUBEcjs.clonePaper; exports.colorHarmony = colorHarmony2; exports.composeAffine = composeAffine; exports.contactSheet = contactSheet; exports.createPaintCompositor = createPaintCompositor; exports.createPaintDocument = createPaintDocument; exports.createPaintEditorDocument = createPaintEditorDocument; exports.createPaintEditorToolProvider = createPaintEditorToolProvider; exports.createPaintEffectsToolProvider = createPaintEffectsToolProvider; exports.createPaintLayer = createPaintLayer; exports.createPaintReplayTools = createPaintReplayTools; exports.createPaintStickerTools = createPaintStickerTools; exports.createPaintThickTools = createPaintThickTools; exports.createPaintWetTools = createPaintWetTools; exports.decodeImageBlob = decodeImageBlob; exports.defaultGuides = defaultGuides; exports.defaultImageEncoder = defaultImageEncoder; exports.defaultStickerRasterizer = _chunkH4AOUUBEcjs.defaultStickerRasterizer; exports.deserializePaintDocument = deserializePaintDocument; exports.deserializePaintDocumentAsync = deserializePaintDocumentAsync; exports.documentExtensions = documentExtensions; exports.documentToScreen = documentToScreen; exports.downloadBytes = downloadBytes; exports.downsampleRgba = downsampleRgba; exports.drawSticker = _chunkH4AOUUBEcjs.drawSticker; exports.drawWaterOverlay = drawWaterOverlay; exports.effectDabField = _chunkH4AOUUBEcjs.effectDabField; exports.effectLayersToJSON = effectLayersToJSON; exports.effectPaintKey = _chunkH4AOUUBEcjs.effectPaintKey; exports.effectPaintSize = _chunkH4AOUUBEcjs.effectPaintSize; exports.emptiedLayers = emptiedLayers; exports.emptyThickChannels = emptyThickChannels; exports.fitZoom = fitZoom; exports.grainCatch = _chunkI7NJPHWVcjs.grainCatch; exports.grainHeights = _chunkI7NJPHWVcjs.grainHeights; exports.guideOverlay = guideOverlay; exports.handlePaintShortcut = handlePaintShortcut; exports.hash2 = _chunk3K6HWEXZcjs.hash2; exports.hexToPaintRgb = _chunkI7NJPHWVcjs.hexToPaintRgb; exports.hexToRgb8 = _chunkH4AOUUBEcjs.hexToRgb8; exports.hslToRgb = hslToRgb; exports.hsvToRgb = hsvToRgb; exports.hueToWheel = _chunk7PT4RJL5cjs.hueToWheel; exports.invertAffine = invertAffine; exports.isBlendMode = _chunk2VX55NFMcjs.isBlendMode; exports.isGradientPaint = _chunkI7NJPHWVcjs.isGradientPaint; exports.isPaintEffectPaint = _chunkH4AOUUBEcjs.isPaintEffectPaint; exports.isPainterlyBlendMode = _chunk2VX55NFMcjs.isPainterlyBlendMode; exports.isPalmTouch = isPalmTouch; exports.isWetBrush = _chunkH4AOUUBEcjs.isWetBrush; exports.isWetCapable = _chunkH4AOUUBEcjs.isWetCapable; exports.lightTile = lightTile; exports.lightingKey = lightingKey; exports.liveStrokeBounds = liveStrokeBounds; exports.liveStrokeRefusal = liveStrokeRefusal; exports.mapPenPoint = mapPenPoint; exports.mix32 = _chunk3K6HWEXZcjs.mix32; exports.mixPixels = mixPixels; exports.mixerLoadForStroke = mixerLoadForStroke; exports.mixerTip = _chunkH4AOUUBEcjs.mixerTip; exports.multiColorForDab = multiColorForDab; exports.multiColorGradient = multiColorGradient; exports.multiColorPalette = multiColorPalette; exports.multiColorSliders = multiColorSliders; exports.multiColorToPaint = _chunkH4AOUUBEcjs.multiColorToPaint; exports.newPaintLayerId = newPaintLayerId; exports.nextPaperEffectVersion = nextPaperEffectVersion; exports.normalizeBehavior = _chunkH4AOUUBEcjs.normalizeBehavior; exports.normalizeBristle = _chunkH4AOUUBEcjs.normalizeBristle; exports.normalizeBrushStroke = normalizeBrushStroke; exports.normalizeCanvas = normalizeCanvas; exports.normalizeDynamics = _chunkH4AOUUBEcjs.normalizeDynamics; exports.normalizeFlow = _chunkKBYB7OWBcjs.normalizeFlow; exports.normalizeHexColor = _chunkI7NJPHWVcjs.normalizeHexColor; exports.normalizeImpasto = _chunkH4AOUUBEcjs.normalizeImpasto; exports.normalizeLight = _chunkH4AOUUBEcjs.normalizeLight; exports.normalizeLighting = normalizeLighting; exports.normalizeMultiColor = _chunkH4AOUUBEcjs.normalizeMultiColor; exports.normalizePaintBrush = _chunkH4AOUUBEcjs.normalizePaintBrush; exports.normalizePaper = _chunkH4AOUUBEcjs.normalizePaper; exports.normalizeParticle = _chunkH4AOUUBEcjs.normalizeParticle; exports.normalizePerspective = normalizePerspective; exports.normalizeRotation = normalizeRotation; exports.normalizeStencil = normalizeStencil; exports.normalizeStickerSettings = _chunkH4AOUUBEcjs.normalizeStickerSettings; exports.normalizeStickerUpdate = _chunkH4AOUUBEcjs.normalizeStickerUpdate; exports.normalizeSymmetry = normalizeSymmetry; exports.normalizeView = normalizeView; exports.normalizeWetBrush = _chunkH4AOUUBEcjs.normalizeWetBrush; exports.normalizeWetParams = _chunkKBYB7OWBcjs.normalizeWetParams; exports.overPixels = overPixels; exports.padSampleRadius = padSampleRadius; exports.paintGradientMappingFor = _chunkI7NJPHWVcjs.paintGradientMappingFor; exports.paintPlaybackPanel = paintPlaybackPanel; exports.paintSourceColor = _chunkI7NJPHWVcjs.paintSourceColor; exports.paintSourceCss = _chunkI7NJPHWVcjs.paintSourceCss; exports.paintToMultiColor = _chunkH4AOUUBEcjs.paintToMultiColor; exports.paperEffectFromJSON = paperEffectFromJSON; exports.paperEffectToJSON = paperEffectToJSON; exports.paperGrain = paperGrain; exports.paperKey = paperKey; exports.paperNode = paperNode; exports.paperPreset = _chunkH4AOUUBEcjs.paperPreset; exports.parseBrushLibrary = _chunkH4AOUUBEcjs.parseBrushLibrary; exports.parseHexColor = parseHexColor; exports.parsePaintSource = _chunkI7NJPHWVcjs.parsePaintSource; exports.patchBrushValue = patchBrushValue; exports.patchPath = patchPath; exports.penOrientation = _chunkH4AOUUBEcjs.penOrientation; exports.perspectiveDirections = perspectiveDirections; exports.perspectiveGuideLines = perspectiveGuideLines; exports.planPaintToolPlayback = planPaintToolPlayback; exports.pointerToPenPoint = pointerToPenPoint; exports.quickStencil = quickStencil; exports.rand01 = _chunk3K6HWEXZcjs.rand01; exports.randSigned = _chunk3K6HWEXZcjs.randSigned; exports.readEffectStrokeMap = _chunkH4AOUUBEcjs.readEffectStrokeMap; exports.readPaintEffectPaint = _chunkH4AOUUBEcjs.readPaintEffectPaint; exports.readPaintEffectSource = readPaintEffectSource; exports.readPaintSource = _chunkI7NJPHWVcjs.readPaintSource; exports.readPath = readPath; exports.readSwatch = readSwatch; exports.reliefInfo = reliefInfo; exports.removePaintGradientStop = _chunkI7NJPHWVcjs.removePaintGradientStop; exports.renderBrushThumbnail = renderBrushThumbnail; exports.renderColorWheel = renderColorWheel; exports.renderPaper = _chunkH4AOUUBEcjs.renderPaper; exports.renderStickers = _chunkH4AOUUBEcjs.renderStickers; exports.replayFrame = replayFrame; exports.replayItems = replayItems; exports.replayPainting = replayPainting; exports.resolvePaintGradient = _chunkI7NJPHWVcjs.resolvePaintGradient; exports.reversePaintGradient = _chunkI7NJPHWVcjs.reversePaintGradient; exports.rgbToHexColor = rgbToHexColor; exports.rgbToHsl = rgbToHsl; exports.rgbToHsv = rgbToHsv; exports.sampleArt = _chunkH4AOUUBEcjs.sampleArt; exports.sampleEffectAt = _chunkH4AOUUBEcjs.sampleEffectAt; exports.sampleEffectField = _chunkH4AOUUBEcjs.sampleEffectField; exports.samplePressure = samplePressure; exports.scalePaintGradient = _chunkI7NJPHWVcjs.scalePaintGradient; exports.scaleStencil = scaleStencil; exports.screenToDocument = screenToDocument; exports.seedFromString = _chunk3K6HWEXZcjs.seedFromString; exports.serializePaintDocument = serializePaintDocument; exports.serializePaintDocumentExternal = serializePaintDocumentExternal; exports.solidPaint = _chunkI7NJPHWVcjs.solidPaint; exports.stampCoverage = _chunkZEYMKDYScjs.stampCoverage; exports.standardBlendMode = _chunk2VX55NFMcjs.standardBlendMode; exports.startWetClock = startWetClock; exports.stencilMask = stencilMask; exports.stencilOutline = stencilOutline; exports.stickerAt = _chunkH4AOUUBEcjs.stickerAt; exports.stickerRect = _chunkH4AOUUBEcjs.stickerRect; exports.stickerRefLabel = stickerRefLabel; exports.stickerStamp = _chunkH4AOUUBEcjs.stickerStamp; exports.stickerSurface = _chunkH4AOUUBEcjs.stickerSurface; exports.strokeBounds = strokeBounds; exports.strokeDuration = strokeDuration; exports.strokeSchedule = strokeSchedule; exports.sweepPath = sweepPath; exports.symmetryAxisAngles = symmetryAxisAngles; exports.symmetryAxisSegments = symmetryAxisSegments; exports.symmetryCopies = symmetryCopies; exports.thickFromJSON = thickFromJSON; exports.thickToJSON = thickToJSON; exports.thumbnailStroke = thumbnailStroke; exports.tiltToOrientation = _chunkH4AOUUBEcjs.tiltToOrientation; exports.timeLapseVideo = timeLapseVideo; exports.timeLapseZip = timeLapseZip; exports.toStrokePoint = _chunkH4AOUUBEcjs.toStrokePoint; exports.toggleDotTexture = toggleDotTexture; exports.toggleStamp = toggleStamp; exports.toggleStickerRef = toggleStickerRef; exports.translateStencil = translateStencil; exports.updatePaintGradientStop = _chunkI7NJPHWVcjs.updatePaintGradientStop; exports.usesPaintExchange = _chunkH4AOUUBEcjs.usesPaintExchange; exports.variationAffine = variationAffine; exports.varyStroke = varyStroke; exports.viewCssTransform = viewCssTransform; exports.viewMatrix = viewMatrix; exports.viewPenToDocument = viewPenToDocument; exports.wetEngineSummary = wetEngineSummary; exports.wetPaperInput = wetPaperInput; exports.wetPigmentOf = wetPigmentOf; exports.wetSupport = _chunkKBYB7OWBcjs.wetSupport; exports.wheelAngle = wheelAngle; exports.wheelPick = wheelPick; exports.wheelPoint = wheelPoint; exports.wheelToHue = _chunk7PT4RJL5cjs.wheelToHue; exports.withPaintPlayback = withPaintPlayback;
11572
+ exports.BACKLIGHT_SPILL = BACKLIGHT_SPILL; exports.BLEND_MENU_GROUPS = BLEND_MENU_GROUPS; exports.BLEND_MODES = _chunk2VX55NFMcjs.BLEND_MODES; exports.BRUSH_ID = _chunkGT77U7QGcjs.BRUSH_ID; exports.BRUSH_ROTATIONS = _chunkGT77U7QGcjs.BRUSH_ROTATIONS; exports.BRUSH_SLIDERS = BRUSH_SLIDERS; exports.BUILTIN_BRUSHES = _chunkGT77U7QGcjs.BUILTIN_BRUSHES; exports.BristleStroke = _chunkGT77U7QGcjs.BristleStroke; exports.DEFAULT_BACKLIGHT_COLOR = DEFAULT_BACKLIGHT_COLOR; exports.DEFAULT_BEHAVIOR = _chunkGT77U7QGcjs.DEFAULT_BEHAVIOR; exports.DEFAULT_BRISTLE = _chunkGT77U7QGcjs.DEFAULT_BRISTLE; exports.DEFAULT_BRUSH_ID = _chunkGT77U7QGcjs.DEFAULT_BRUSH_ID; exports.DEFAULT_DPI = DEFAULT_DPI; exports.DEFAULT_DYNAMICS = _chunkGT77U7QGcjs.DEFAULT_DYNAMICS; exports.DEFAULT_FLOW = _chunkKBYB7OWBcjs.DEFAULT_FLOW; exports.DEFAULT_IMPASTO = _chunkGT77U7QGcjs.DEFAULT_IMPASTO; exports.DEFAULT_LIGHT = _chunkGT77U7QGcjs.DEFAULT_LIGHT; exports.DEFAULT_LIGHTING = DEFAULT_LIGHTING; exports.DEFAULT_MULTI_COLOR = _chunkGT77U7QGcjs.DEFAULT_MULTI_COLOR; exports.DEFAULT_PAINT_GRADIENT = _chunkI7NJPHWVcjs.DEFAULT_PAINT_GRADIENT; exports.DEFAULT_PAINT_GRADIENT_MAPPING = _chunkI7NJPHWVcjs.DEFAULT_PAINT_GRADIENT_MAPPING; exports.DEFAULT_PAPER = _chunkGT77U7QGcjs.DEFAULT_PAPER; exports.DEFAULT_PARTICLE = _chunkGT77U7QGcjs.DEFAULT_PARTICLE; exports.DEFAULT_STICKER = _chunkGT77U7QGcjs.DEFAULT_STICKER; exports.DEFAULT_SWATCHES = DEFAULT_SWATCHES; exports.DEFAULT_VIEW = DEFAULT_VIEW; exports.DEFAULT_WET_BRUSH = _chunkGT77U7QGcjs.DEFAULT_WET_BRUSH; exports.DEFAULT_WET_PARAMS = _chunkKBYB7OWBcjs.DEFAULT_WET_PARAMS; exports.DOT_ROTATIONS = _chunkGT77U7QGcjs.DOT_ROTATIONS; exports.DOT_ROTATION_LABELS = DOT_ROTATION_LABELS; exports.DOT_TEXTURE_ORDERS = _chunkGT77U7QGcjs.DOT_TEXTURE_ORDERS; exports.DOT_TEXTURE_ORDER_LABELS = DOT_TEXTURE_ORDER_LABELS; exports.DryStroke = _chunkGT77U7QGcjs.DryStroke; exports.EFFECT_MAP_REPEATS = _chunkGT77U7QGcjs.EFFECT_MAP_REPEATS; exports.EFFECT_STRIP_HEIGHT = _chunkGT77U7QGcjs.EFFECT_STRIP_HEIGHT; exports.GPU_LEAD = GPU_LEAD; exports.GRAIN_PATTERNS = _chunkI7NJPHWVcjs.GRAIN_PATTERNS; exports.GRAIN_TILE = _chunkI7NJPHWVcjs.GRAIN_TILE; exports.HARMONY_KINDS = _chunk7PT4RJL5cjs.HARMONY_KINDS; exports.IDENTITY_AFFINE = IDENTITY_AFFINE; exports.IDENTITY_COPY = _chunkGT77U7QGcjs.IDENTITY_COPY; exports.IMPASTO_TOOLS = _chunkGT77U7QGcjs.IMPASTO_TOOLS; exports.IMPASTO_TOOL_LABELS = IMPASTO_TOOL_LABELS; exports.LIGHT_SLIDERS = LIGHT_SLIDERS; exports.LIVE_STROKE_ENGINES = LIVE_STROKE_ENGINES; exports.LitCache = LitCache; exports.MAX_BRUSH_SIZE = _chunkI7NJPHWVcjs.MAX_BRUSH_SIZE; exports.MAX_CANVAS_SIDE = MAX_CANVAS_SIDE; exports.MAX_COORDINATE = MAX_COORDINATE; exports.MAX_DOT_TEXTURES = _chunkGT77U7QGcjs.MAX_DOT_TEXTURES; exports.MAX_IMAGE_SIDE = MAX_IMAGE_SIDE; exports.MAX_LIVE_EFFECT_SOURCES = MAX_LIVE_EFFECT_SOURCES; exports.MAX_STICKER_STAMPS = _chunkGT77U7QGcjs.MAX_STICKER_STAMPS; exports.MAX_ZOOM = MAX_ZOOM; exports.MIN_CANVAS_SIDE = MIN_CANVAS_SIDE; exports.MIN_ZOOM = MIN_ZOOM; exports.MIXING_PAD_HEIGHT = MIXING_PAD_HEIGHT; exports.MIXING_PAD_WIDTH = MIXING_PAD_WIDTH; exports.MULTI_COLOR_MODES = _chunkGT77U7QGcjs.MULTI_COLOR_MODES; exports.MixingPad = MixingPad; exports.PAD_SAMPLE_SIZES = PAD_SAMPLE_SIZES; exports.PAINTERLY_BLEND_MODES = _chunk2VX55NFMcjs.PAINTERLY_BLEND_MODES; exports.PAINT_BRUSH_CATEGORIES = _chunkGT77U7QGcjs.PAINT_BRUSH_CATEGORIES; exports.PAINT_BRUSH_ENGINES = _chunkGT77U7QGcjs.PAINT_BRUSH_ENGINES; exports.PAINT_COLOR_JSON_SCHEMA = _chunkI7NJPHWVcjs.PAINT_COLOR_JSON_SCHEMA; exports.PAINT_EFFECT_PLACES = PAINT_EFFECT_PLACES; exports.PAINT_FORMAT = PAINT_FORMAT; exports.PAINT_GRADIENT_FULL_SPEED = _chunkI7NJPHWVcjs.PAINT_GRADIENT_FULL_SPEED; exports.PAINT_GRADIENT_JSON_SCHEMA = _chunkI7NJPHWVcjs.PAINT_GRADIENT_JSON_SCHEMA; exports.PAINT_GRADIENT_KIT = _chunkI7NJPHWVcjs.PAINT_GRADIENT_KIT; exports.PAINT_GRADIENT_MAPPINGS = _chunkI7NJPHWVcjs.PAINT_GRADIENT_MAPPINGS; exports.PAINT_GRADIENT_MAPPING_LABELS = _chunkI7NJPHWVcjs.PAINT_GRADIENT_MAPPING_LABELS; exports.PAINT_GRADIENT_PRESETS = _chunkI7NJPHWVcjs.PAINT_GRADIENT_PRESETS; exports.PAINT_GRADIENT_REPEATS = _chunkI7NJPHWVcjs.PAINT_GRADIENT_REPEATS; exports.PAINT_GRADIENT_REPEAT_LABELS = _chunkI7NJPHWVcjs.PAINT_GRADIENT_REPEAT_LABELS; exports.PAINT_GRADIENT_SPACES = _chunkI7NJPHWVcjs.PAINT_GRADIENT_SPACES; exports.PAINT_GRADIENT_SPACE_LABELS = _chunkI7NJPHWVcjs.PAINT_GRADIENT_SPACE_LABELS; exports.PAINT_SCHEMA_VERSION = PAINT_SCHEMA_VERSION; exports.PAINT_SOURCE_JSON_SCHEMA = _chunkI7NJPHWVcjs.PAINT_SOURCE_JSON_SCHEMA; exports.PAINT_TARGET = PAINT_TARGET; exports.PAINT_TOOLS = PAINT_TOOLS; exports.PAPER_EFFECT_BLENDS = PAPER_EFFECT_BLENDS; exports.PAPER_EFFECT_NODE_ID = PAPER_EFFECT_NODE_ID; exports.PAPER_FAMILIES = _chunkGT77U7QGcjs.PAPER_FAMILIES; exports.PAPER_LIBRARY = _chunkGT77U7QGcjs.PAPER_LIBRARY; exports.PAPER_NODE_ID = PAPER_NODE_ID; exports.PAPER_SLIDERS = PAPER_SLIDERS; exports.PAPER_TARGET = PAPER_TARGET; exports.PARTICLE_KINDS = _chunkGT77U7QGcjs.PARTICLE_KINDS; exports.PARTICLE_KIND_LABELS = PARTICLE_KIND_LABELS; exports.PARTICLE_RENDERS = _chunkGT77U7QGcjs.PARTICLE_RENDERS; exports.PARTICLE_RENDER_LABELS = PARTICLE_RENDER_LABELS; exports.PaintCanvasPresenter = PaintCanvasPresenter; exports.PaintDabStroke = PaintDabStroke; exports.PaintDirector = PaintDirector; exports.PaintDocumentError = PaintDocumentError; exports.PaintEditorController = PaintEditorController; exports.PaintEditorError = PaintEditorError; exports.PaintEffectsRenderer = PaintEffectsRenderer; exports.PaintGesture = PaintGesture; exports.PaintGradientSampler = _chunkI7NJPHWVcjs.PaintGradientSampler; exports.PaintPresence = PaintPresence; exports.PaintSourceError = _chunkI7NJPHWVcjs.PaintSourceError; exports.PaintStrokeSession = PaintStrokeSession; exports.PaintWetLayers = PaintWetLayers; exports.PaperGrain = _chunkI7NJPHWVcjs.PaperGrain; exports.ParticleStroke = _chunkGT77U7QGcjs.ParticleStroke; exports.PenDabWalker = _chunkGT77U7QGcjs.PenDabWalker; exports.PenSmoother = _chunkGT77U7QGcjs.PenSmoother; exports.PerspectiveSnapper = PerspectiveSnapper; exports.RIBBON_PAIRS = _chunkGT77U7QGcjs.RIBBON_PAIRS; exports.RIBBON_PAIR_LABELS = RIBBON_PAIR_LABELS; exports.SNAP_DECIDE_DISTANCE = SNAP_DECIDE_DISTANCE; exports.STAMP_KINDS = _chunk4JNWA3VTcjs.STAMP_KINDS; exports.STAMP_LABELS = STAMP_LABELS; exports.STENCIL_KINDS = STENCIL_KINDS; exports.STENCIL_SHAPES = STENCIL_SHAPES; exports.STICKER_ART_SIZE = _chunkGT77U7QGcjs.STICKER_ART_SIZE; exports.STICKER_SLIDERS = STICKER_SLIDERS; exports.STROKE_SLIDERS = STROKE_SLIDERS; exports.SYMMETRY_MODES = SYMMETRY_MODES; exports.StencilSnapper = StencilSnapper; exports.StickerArtCache = _chunkGT77U7QGcjs.StickerArtCache; exports.StickerBrowser = _chunkATK6ABN3cjs.StickerBrowser; exports.StickerSpray = _chunkGT77U7QGcjs.StickerSpray; exports.TRACING_NODE_ID = TRACING_NODE_ID; exports.ThickStrokeDriver = ThickStrokeDriver; exports.TileableNoise = _chunk3K6HWEXZcjs.TileableNoise; exports.WET_FLOW_KINDS = _chunkKBYB7OWBcjs.WET_FLOW_KINDS; exports.WET_GPU_MODES = WET_GPU_MODES; exports.WET_GPU_OPTIONS = WET_GPU_OPTIONS; exports.WET_MEDIA = _chunkGT77U7QGcjs.WET_MEDIA; exports.WET_MEDIUM_LABELS = WET_MEDIUM_LABELS; exports.WET_MEDIUM_PARAMS = WET_MEDIUM_PARAMS; exports.WET_PARAM_KEYS = _chunkKBYB7OWBcjs.WET_PARAM_KEYS; exports.WET_PARAM_SCHEMA = WET_PARAM_SCHEMA; exports.WET_PARAM_SLIDERS = WET_PARAM_SLIDERS; exports.WET_SPEED_SLIDER = WET_SPEED_SLIDER; exports.WET_TILT_SLIDERS = WET_TILT_SLIDERS; exports.WET_TOOLS = _chunkGT77U7QGcjs.WET_TOOLS; exports.WET_TOOL_LABELS = WET_TOOL_LABELS; exports.WetStrokeDriver = WetStrokeDriver; exports.addPaintGradientStop = _chunkI7NJPHWVcjs.addPaintGradientStop; exports.addPolygonArea = _chunkGT77U7QGcjs.addPolygonArea; exports.affineCopy = affineCopy; exports.applyAffine = applyAffine; exports.backlightOf = backlightOf; exports.brushEngineControls = brushEngineControls; exports.brushLoadColor = brushLoadColor; exports.brushLoadForStroke = brushLoadForStroke; exports.brushTakesPaint = _chunkGT77U7QGcjs.brushTakesPaint; exports.brushToJSON = _chunkGT77U7QGcjs.brushToJSON; exports.buildTimeLapse = buildTimeLapse; exports.checkPaintEffectPlace = checkPaintEffectPlace; exports.clonePaper = _chunkGT77U7QGcjs.clonePaper; exports.colorHarmony = colorHarmony2; exports.composeAffine = composeAffine; exports.contactSheet = contactSheet; exports.createPaintCompositor = createPaintCompositor; exports.createPaintDocument = createPaintDocument; exports.createPaintEditorDocument = createPaintEditorDocument; exports.createPaintEditorToolProvider = createPaintEditorToolProvider; exports.createPaintEffectsToolProvider = createPaintEffectsToolProvider; exports.createPaintLayer = createPaintLayer; exports.createPaintReplayTools = createPaintReplayTools; exports.createPaintStickerTools = createPaintStickerTools; exports.createPaintThickTools = createPaintThickTools; exports.createPaintWetTools = createPaintWetTools; exports.decodeImageBlob = decodeImageBlob; exports.defaultGuides = defaultGuides; exports.defaultImageEncoder = defaultImageEncoder; exports.defaultStickerRasterizer = _chunkGT77U7QGcjs.defaultStickerRasterizer; exports.deserializePaintDocument = deserializePaintDocument; exports.deserializePaintDocumentAsync = deserializePaintDocumentAsync; exports.documentExtensions = documentExtensions; exports.documentToScreen = documentToScreen; exports.downloadBytes = downloadBytes; exports.downsampleRgba = downsampleRgba; exports.drawSticker = _chunkGT77U7QGcjs.drawSticker; exports.drawWaterOverlay = drawWaterOverlay; exports.effectDabField = _chunkGT77U7QGcjs.effectDabField; exports.effectLayersToJSON = effectLayersToJSON; exports.effectPaintKey = _chunkGT77U7QGcjs.effectPaintKey; exports.effectPaintSize = _chunkGT77U7QGcjs.effectPaintSize; exports.emptiedLayers = emptiedLayers; exports.emptyThickChannels = emptyThickChannels; exports.fitZoom = fitZoom; exports.grainCatch = _chunkI7NJPHWVcjs.grainCatch; exports.grainHeights = _chunkI7NJPHWVcjs.grainHeights; exports.guideOverlay = guideOverlay; exports.handlePaintShortcut = handlePaintShortcut; exports.hash2 = _chunk3K6HWEXZcjs.hash2; exports.hexToPaintRgb = _chunkI7NJPHWVcjs.hexToPaintRgb; exports.hexToRgb8 = _chunkGT77U7QGcjs.hexToRgb8; exports.hslToRgb = hslToRgb; exports.hsvToRgb = hsvToRgb; exports.hueToWheel = _chunk7PT4RJL5cjs.hueToWheel; exports.invertAffine = invertAffine; exports.isBlendMode = _chunk2VX55NFMcjs.isBlendMode; exports.isGradientPaint = _chunkI7NJPHWVcjs.isGradientPaint; exports.isPaintEffectPaint = _chunkGT77U7QGcjs.isPaintEffectPaint; exports.isPainterlyBlendMode = _chunk2VX55NFMcjs.isPainterlyBlendMode; exports.isPalmTouch = isPalmTouch; exports.isWetBrush = _chunkGT77U7QGcjs.isWetBrush; exports.isWetCapable = _chunkGT77U7QGcjs.isWetCapable; exports.lightTile = lightTile; exports.lightingKey = lightingKey; exports.liveStrokeBounds = liveStrokeBounds; exports.liveStrokeRefusal = liveStrokeRefusal; exports.mapPenPoint = mapPenPoint; exports.mix32 = _chunk3K6HWEXZcjs.mix32; exports.mixPixels = mixPixels; exports.mixerLoadForStroke = mixerLoadForStroke; exports.mixerTip = _chunkGT77U7QGcjs.mixerTip; exports.multiColorForDab = multiColorForDab; exports.multiColorGradient = multiColorGradient; exports.multiColorPalette = multiColorPalette; exports.multiColorSliders = multiColorSliders; exports.multiColorToPaint = _chunkGT77U7QGcjs.multiColorToPaint; exports.newPaintLayerId = newPaintLayerId; exports.nextPaperEffectVersion = nextPaperEffectVersion; exports.normalizeBehavior = _chunkGT77U7QGcjs.normalizeBehavior; exports.normalizeBristle = _chunkGT77U7QGcjs.normalizeBristle; exports.normalizeBrushStroke = normalizeBrushStroke; exports.normalizeCanvas = normalizeCanvas; exports.normalizeDynamics = _chunkGT77U7QGcjs.normalizeDynamics; exports.normalizeFlow = _chunkKBYB7OWBcjs.normalizeFlow; exports.normalizeHexColor = _chunkI7NJPHWVcjs.normalizeHexColor; exports.normalizeImpasto = _chunkGT77U7QGcjs.normalizeImpasto; exports.normalizeLight = _chunkGT77U7QGcjs.normalizeLight; exports.normalizeLighting = normalizeLighting; exports.normalizeMultiColor = _chunkGT77U7QGcjs.normalizeMultiColor; exports.normalizePaintBrush = _chunkGT77U7QGcjs.normalizePaintBrush; exports.normalizePaper = _chunkGT77U7QGcjs.normalizePaper; exports.normalizeParticle = _chunkGT77U7QGcjs.normalizeParticle; exports.normalizePerspective = normalizePerspective; exports.normalizeRotation = normalizeRotation; exports.normalizeStencil = normalizeStencil; exports.normalizeStickerSettings = _chunkGT77U7QGcjs.normalizeStickerSettings; exports.normalizeStickerUpdate = _chunkGT77U7QGcjs.normalizeStickerUpdate; exports.normalizeSymmetry = normalizeSymmetry; exports.normalizeView = normalizeView; exports.normalizeWetBrush = _chunkGT77U7QGcjs.normalizeWetBrush; exports.normalizeWetParams = _chunkKBYB7OWBcjs.normalizeWetParams; exports.overPixels = overPixels; exports.padSampleRadius = padSampleRadius; exports.paintGradientMappingFor = _chunkI7NJPHWVcjs.paintGradientMappingFor; exports.paintPlaybackPanel = paintPlaybackPanel; exports.paintSourceColor = _chunkI7NJPHWVcjs.paintSourceColor; exports.paintSourceCss = _chunkI7NJPHWVcjs.paintSourceCss; exports.paintToMultiColor = _chunkGT77U7QGcjs.paintToMultiColor; exports.paperEffectFromJSON = paperEffectFromJSON; exports.paperEffectToJSON = paperEffectToJSON; exports.paperGrain = paperGrain; exports.paperKey = paperKey; exports.paperNode = paperNode; exports.paperPreset = _chunkGT77U7QGcjs.paperPreset; exports.parseBrushLibrary = _chunkGT77U7QGcjs.parseBrushLibrary; exports.parseHexColor = parseHexColor; exports.parsePaintSource = _chunkI7NJPHWVcjs.parsePaintSource; exports.patchBrushValue = patchBrushValue; exports.patchPath = patchPath; exports.penOrientation = _chunkGT77U7QGcjs.penOrientation; exports.perspectiveDirections = perspectiveDirections; exports.perspectiveGuideLines = perspectiveGuideLines; exports.planPaintToolPlayback = planPaintToolPlayback; exports.pointerToPenPoint = pointerToPenPoint; exports.quickStencil = quickStencil; exports.rand01 = _chunk3K6HWEXZcjs.rand01; exports.randSigned = _chunk3K6HWEXZcjs.randSigned; exports.readEffectStrokeMap = _chunkGT77U7QGcjs.readEffectStrokeMap; exports.readPaintEffectPaint = _chunkGT77U7QGcjs.readPaintEffectPaint; exports.readPaintEffectSource = readPaintEffectSource; exports.readPaintSource = _chunkI7NJPHWVcjs.readPaintSource; exports.readPath = readPath; exports.readSwatch = readSwatch; exports.reliefInfo = reliefInfo; exports.removePaintGradientStop = _chunkI7NJPHWVcjs.removePaintGradientStop; exports.renderBrushThumbnail = renderBrushThumbnail; exports.renderColorWheel = renderColorWheel; exports.renderPaper = _chunkGT77U7QGcjs.renderPaper; exports.renderStickers = _chunkGT77U7QGcjs.renderStickers; exports.replayFrame = replayFrame; exports.replayItems = replayItems; exports.replayPainting = replayPainting; exports.resolvePaintGradient = _chunkI7NJPHWVcjs.resolvePaintGradient; exports.reversePaintGradient = _chunkI7NJPHWVcjs.reversePaintGradient; exports.rgbToHexColor = rgbToHexColor; exports.rgbToHsl = rgbToHsl; exports.rgbToHsv = rgbToHsv; exports.sampleArt = _chunkGT77U7QGcjs.sampleArt; exports.sampleEffectAt = _chunkGT77U7QGcjs.sampleEffectAt; exports.sampleEffectField = _chunkGT77U7QGcjs.sampleEffectField; exports.samplePressure = samplePressure; exports.scalePaintGradient = _chunkI7NJPHWVcjs.scalePaintGradient; exports.scaleStencil = scaleStencil; exports.screenToDocument = screenToDocument; exports.seedFromString = _chunk3K6HWEXZcjs.seedFromString; exports.serializePaintDocument = serializePaintDocument; exports.serializePaintDocumentExternal = serializePaintDocumentExternal; exports.solidPaint = _chunkI7NJPHWVcjs.solidPaint; exports.stampCoverage = _chunk4JNWA3VTcjs.stampCoverage; exports.standardBlendMode = _chunk2VX55NFMcjs.standardBlendMode; exports.startWetClock = startWetClock; exports.stencilMask = stencilMask; exports.stencilOutline = stencilOutline; exports.stickerAt = _chunkGT77U7QGcjs.stickerAt; exports.stickerRect = _chunkGT77U7QGcjs.stickerRect; exports.stickerRefLabel = stickerRefLabel; exports.stickerStamp = _chunkGT77U7QGcjs.stickerStamp; exports.stickerSurface = _chunkGT77U7QGcjs.stickerSurface; exports.strokeBounds = strokeBounds; exports.strokeDuration = strokeDuration; exports.strokeSchedule = strokeSchedule; exports.sweepPath = sweepPath; exports.symmetryAxisAngles = symmetryAxisAngles; exports.symmetryAxisSegments = symmetryAxisSegments; exports.symmetryCopies = symmetryCopies; exports.thickFromJSON = thickFromJSON; exports.thickToJSON = thickToJSON; exports.thumbnailStroke = thumbnailStroke; exports.tiltToOrientation = _chunkGT77U7QGcjs.tiltToOrientation; exports.timeLapseVideo = timeLapseVideo; exports.timeLapseZip = timeLapseZip; exports.toStrokePoint = _chunkGT77U7QGcjs.toStrokePoint; exports.toggleDotTexture = toggleDotTexture; exports.toggleStamp = toggleStamp; exports.toggleStickerRef = toggleStickerRef; exports.translateStencil = translateStencil; exports.updatePaintGradientStop = _chunkI7NJPHWVcjs.updatePaintGradientStop; exports.usesPaintExchange = _chunkGT77U7QGcjs.usesPaintExchange; exports.variationAffine = variationAffine; exports.varyStroke = varyStroke; exports.viewCssTransform = viewCssTransform; exports.viewMatrix = viewMatrix; exports.viewPenToDocument = viewPenToDocument; exports.wetEngineSummary = wetEngineSummary; exports.wetPaperInput = wetPaperInput; exports.wetPigmentOf = wetPigmentOf; exports.wetSupport = _chunkKBYB7OWBcjs.wetSupport; exports.wheelAngle = wheelAngle; exports.wheelPick = wheelPick; exports.wheelPoint = wheelPoint; exports.wheelToHue = _chunk7PT4RJL5cjs.wheelToHue; exports.withPaintPlayback = withPaintPlayback;