@pixerate/editor 0.270.0 → 0.272.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 (77) hide show
  1. package/dist/animation-editor/index.cjs +62 -62
  2. package/dist/animation-editor/index.js +5 -5
  3. package/dist/brushes/index.cjs +69 -66
  4. package/dist/brushes/index.js +6 -3
  5. package/dist/brushes/patch.d.cts +1 -1
  6. package/dist/brushes/patch.d.ts +1 -1
  7. package/dist/brushes/schema.d.cts +1 -0
  8. package/dist/brushes/schema.d.ts +1 -0
  9. package/dist/brushes/types.d.cts +8 -0
  10. package/dist/brushes/types.d.ts +8 -0
  11. package/dist/{brushstrokeRender-WR2N5HHY.cjs → brushstrokeRender-5YBCLFDQ.cjs} +15 -15
  12. package/dist/{brushstrokeRender-A727TTNQ.js → brushstrokeRender-DZGFU3J4.js} +3 -3
  13. package/dist/canvas/index.cjs +15 -15
  14. package/dist/canvas/index.js +2 -2
  15. package/dist/{chunk-THBJHPUL.js → chunk-2F3YDXCN.js} +1 -1
  16. package/dist/{chunk-4CPOKP27.js → chunk-2XDNF73E.js} +1 -1
  17. package/dist/{chunk-3KNQ2W6X.cjs → chunk-3JKCREEU.cjs} +59 -53
  18. package/dist/{chunk-4YSPQGZW.js → chunk-5HP2VSAS.js} +1 -1
  19. package/dist/{chunk-BPJSI4NT.cjs → chunk-7W2EQQBP.cjs} +2 -2
  20. package/dist/{chunk-LETF75CA.js → chunk-CLB2I2FU.js} +1 -1
  21. package/dist/{chunk-BAZMCFVL.js → chunk-DZVRH63Y.js} +1 -1
  22. package/dist/{chunk-PY4GWSE2.cjs → chunk-EBFPMSJO.cjs} +27 -5
  23. package/dist/{chunk-VBRHE4AM.cjs → chunk-FXVCB6YG.cjs} +35 -35
  24. package/dist/{chunk-EU2ZZA6L.cjs → chunk-GHGBIAWQ.cjs} +126 -39
  25. package/dist/{chunk-CBVNCWJM.cjs → chunk-LBDC5434.cjs} +2 -2
  26. package/dist/{chunk-2WOGXEDX.cjs → chunk-M3RZOF3G.cjs} +1 -1
  27. package/dist/{chunk-GSTSZPSR.js → chunk-N3SKPQEH.js} +225 -18
  28. package/dist/{chunk-J5VQYK7T.cjs → chunk-N5IMDAHM.cjs} +251 -44
  29. package/dist/{chunk-ININNHLM.js → chunk-NAHJV3O6.js} +11 -5
  30. package/dist/{chunk-MWUZCEFT.js → chunk-S2XPXA47.js} +1 -1
  31. package/dist/{chunk-56RHCIJV.cjs → chunk-SNAFFCAX.cjs} +296 -203
  32. package/dist/{chunk-EHLOCVWB.js → chunk-T2URHAJX.js} +27 -5
  33. package/dist/{chunk-BENSE3VX.cjs → chunk-TNLKFW7D.cjs} +23 -23
  34. package/dist/{chunk-KZI3YWKW.js → chunk-UXYCY3HP.js} +93 -6
  35. package/dist/{chunk-4NMPUJUK.cjs → chunk-YJANF2BL.cjs} +86 -86
  36. package/dist/{chunk-FUDP5QBB.js → chunk-ZEI7ZEA4.js} +101 -8
  37. package/dist/effects/index.cjs +5 -2
  38. package/dist/effects/index.js +4 -1
  39. package/dist/effects/pool.d.cts +9 -0
  40. package/dist/effects/pool.d.ts +9 -0
  41. package/dist/effects/types.d.cts +2 -0
  42. package/dist/effects/types.d.ts +2 -0
  43. package/dist/image-editor/index.cjs +791 -791
  44. package/dist/image-editor/index.js +6 -6
  45. package/dist/paint/index.cjs +2 -2
  46. package/dist/paint/index.js +1 -1
  47. package/dist/paint/wet/world.d.cts +37 -1
  48. package/dist/paint/wet/world.d.ts +37 -1
  49. package/dist/paint-editor/brush-controls.d.cts +2 -0
  50. package/dist/paint-editor/brush-controls.d.ts +2 -0
  51. package/dist/paint-editor/brush-model.d.cts +14 -1
  52. package/dist/paint-editor/brush-model.d.ts +14 -1
  53. package/dist/paint-editor/controller.d.cts +75 -4
  54. package/dist/paint-editor/controller.d.ts +75 -4
  55. package/dist/paint-editor/effect-paint.d.cts +33 -8
  56. package/dist/paint-editor/effect-paint.d.ts +33 -8
  57. package/dist/paint-editor/effects.d.cts +4 -0
  58. package/dist/paint-editor/effects.d.ts +4 -0
  59. package/dist/paint-editor/index.cjs +814 -483
  60. package/dist/paint-editor/index.js +408 -77
  61. package/dist/paint-editor/stroke.d.cts +13 -5
  62. package/dist/paint-editor/stroke.d.ts +13 -5
  63. package/dist/paint-editor/ui.d.cts +1 -1
  64. package/dist/paint-editor/ui.d.ts +1 -1
  65. package/dist/paint-editor/wet.d.cts +8 -1
  66. package/dist/paint-editor/wet.d.ts +8 -1
  67. package/dist/vector/index.cjs +999 -999
  68. package/dist/vector/index.js +5 -5
  69. package/dist/video-editor/index.cjs +317 -317
  70. package/dist/video-editor/index.js +2 -2
  71. package/package.json +1 -1
  72. package/skills/pixerate-brushes/SKILL.md +1 -0
  73. package/skills/pixerate-paint-editor/SKILL.md +6 -13
  74. package/skills/pixerate-paint-editor/references/brush-facets.md +1 -0
  75. package/skills/pixerate-paint-editor/references/effect-paint.md +28 -6
  76. package/skills/pixerate-paint-editor/references/ghost.md +47 -0
  77. package/skills/pixerate-paint-watercolour/SKILL.md +1 -0
@@ -8,7 +8,7 @@ import {
8
8
  parseOpenTypeFont,
9
9
  removeAnchorsKeepingShape,
10
10
  traceField
11
- } from "../chunk-THBJHPUL.js";
11
+ } from "../chunk-2F3YDXCN.js";
12
12
  import {
13
13
  ADJUSTMENT_KEYS,
14
14
  ADJUSTMENT_KINDS,
@@ -409,7 +409,7 @@ import {
409
409
  writePsd,
410
410
  xyToTempTint,
411
411
  xyToUv
412
- } from "../chunk-4YSPQGZW.js";
412
+ } from "../chunk-5HP2VSAS.js";
413
413
  import {
414
414
  flattenPath,
415
415
  rasterizeCoverage
@@ -683,14 +683,14 @@ import {
683
683
  warpMeshParamAt,
684
684
  warpMeshRows,
685
685
  warpPresetMesh
686
- } from "../chunk-FUDP5QBB.js";
686
+ } from "../chunk-ZEI7ZEA4.js";
687
687
  import {
688
688
  IMAGE_PROFILE,
689
689
  checkBrush,
690
690
  closest,
691
691
  createBrushLibrary,
692
692
  resolveBrush
693
- } from "../chunk-KZI3YWKW.js";
693
+ } from "../chunk-UXYCY3HP.js";
694
694
  import "../chunk-JL6YH5WD.js";
695
695
  import "../chunk-RWDSSK2I.js";
696
696
  import {
@@ -706,7 +706,7 @@ import {
706
706
  import "../chunk-SZTI6EER.js";
707
707
  import {
708
708
  EffectRendererPool
709
- } from "../chunk-EHLOCVWB.js";
709
+ } from "../chunk-T2URHAJX.js";
710
710
  import {
711
711
  EffectUnsupportedError,
712
712
  EffectsSlot,
@@ -808,7 +808,7 @@ import {
808
808
  wetGpuSupport,
809
809
  wetSimdSupported,
810
810
  wetSupport
811
- } from "../chunk-GSTSZPSR.js";
811
+ } from "../chunk-N3SKPQEH.js";
812
812
  import {
813
813
  BrushstrokeCache,
814
814
  brushstrokeDataUrl,
@@ -134,7 +134,7 @@ var _chunkBB6TR422cjs = require('../chunk-BB6TR422.cjs');
134
134
 
135
135
 
136
136
 
137
- var _chunkJ5VQYK7Tcjs = require('../chunk-J5VQYK7T.cjs');
137
+ var _chunkN5IMDAHMcjs = require('../chunk-N5IMDAHM.cjs');
138
138
 
139
139
 
140
140
 
@@ -498,4 +498,4 @@ require('../chunk-XFM3OCHU.cjs');
498
498
 
499
499
 
500
500
 
501
- exports.BODY_SCATTER = _chunkJ5VQYK7Tcjs.BODY_SCATTER; exports.BRUSHSTROKE_MAX_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MAX_SCALE; exports.BRUSHSTROKE_MIN_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MIN_SCALE; exports.BrushstrokeCache = _chunkSTLTOISWcjs.BrushstrokeCache; exports.CoverageMap = _chunkNIBFKXMDcjs.CoverageMap; exports.DEFAULT_BLENDER = _chunkNIBFKXMDcjs.DEFAULT_BLENDER; exports.DEFAULT_BRUSH = _chunkNIBFKXMDcjs.DEFAULT_BRUSH; exports.DEFAULT_FLOW = _chunkJ5VQYK7Tcjs.DEFAULT_FLOW; exports.DEFAULT_MIXER = _chunkNIBFKXMDcjs.DEFAULT_MIXER; exports.DEFAULT_PAINT_GRADIENT = _chunkNIBFKXMDcjs.DEFAULT_PAINT_GRADIENT; exports.DEFAULT_PAINT_GRADIENT_MAPPING = _chunkNIBFKXMDcjs.DEFAULT_PAINT_GRADIENT_MAPPING; exports.DEFAULT_RETOUCH = _chunk62MFUHSIcjs.DEFAULT_RETOUCH; exports.DEFAULT_SMUDGE = _chunkNIBFKXMDcjs.DEFAULT_SMUDGE; exports.DEFAULT_WET_PAPER = _chunkJ5VQYK7Tcjs.DEFAULT_WET_PAPER; exports.DEFAULT_WET_PARAMS = _chunkJ5VQYK7Tcjs.DEFAULT_WET_PARAMS; exports.DRY_EPS = _chunkJ5VQYK7Tcjs.DRY_EPS; exports.DabWalker = _chunkNIBFKXMDcjs.DabWalker; exports.EMPTY_MIXER_LOAD = _chunkNIBFKXMDcjs.EMPTY_MIXER_LOAD; exports.EX = _chunkJ5VQYK7Tcjs.EX; exports.EY = _chunkJ5VQYK7Tcjs.EY; exports.FLAG_ALIVE = _chunkJ5VQYK7Tcjs.FLAG_ALIVE; exports.FLAG_BOTTOM = _chunkJ5VQYK7Tcjs.FLAG_BOTTOM; exports.FLAG_LEFT = _chunkJ5VQYK7Tcjs.FLAG_LEFT; exports.FLAG_RIGHT = _chunkJ5VQYK7Tcjs.FLAG_RIGHT; exports.FLAG_TOP = _chunkJ5VQYK7Tcjs.FLAG_TOP; exports.FLAG_WET = _chunkJ5VQYK7Tcjs.FLAG_WET; exports.FLAT = _chunkJ5VQYK7Tcjs.FLAT; exports.FREE_INTERVAL = _chunkJ5VQYK7Tcjs.FREE_INTERVAL; exports.GRAIN_PATTERNS = _chunkNIBFKXMDcjs.GRAIN_PATTERNS; exports.GRAIN_TILE = _chunkNIBFKXMDcjs.GRAIN_TILE; exports.HIDE = _chunkJ5VQYK7Tcjs.HIDE; exports.IDENTITY_CLONE_TRANSFORM = _chunk62MFUHSIcjs.IDENTITY_CLONE_TRANSFORM; exports.MASS_CHANNELS = _chunkJ5VQYK7Tcjs.MASS_CHANNELS; exports.MAX_BATCH = _chunkJ5VQYK7Tcjs.MAX_BATCH; exports.MAX_BRUSH_SIZE = _chunkNIBFKXMDcjs.MAX_BRUSH_SIZE; exports.MAX_TILT_ACCEL = _chunkJ5VQYK7Tcjs.MAX_TILT_ACCEL; exports.MAX_WET_LANES = _chunkJ5VQYK7Tcjs.MAX_WET_LANES; exports.MAX_WET_SLOTS = _chunkJ5VQYK7Tcjs.MAX_WET_SLOTS; exports.MIXER_DRAIN = _chunkNIBFKXMDcjs.MIXER_DRAIN; exports.MIXER_PICKUP_RATE = _chunkNIBFKXMDcjs.MIXER_PICKUP_RATE; exports.MIXING_MODELS = _chunkNIBFKXMDcjs.MIXING_MODELS; exports.MixerStroke = _chunkNIBFKXMDcjs.MixerStroke; exports.OPP = _chunkJ5VQYK7Tcjs.OPP; exports.PAINT_COLOR_JSON_SCHEMA = _chunkNIBFKXMDcjs.PAINT_COLOR_JSON_SCHEMA; exports.PAINT_GRADIENT_FULL_SPEED = _chunkNIBFKXMDcjs.PAINT_GRADIENT_FULL_SPEED; exports.PAINT_GRADIENT_JSON_SCHEMA = _chunkNIBFKXMDcjs.PAINT_GRADIENT_JSON_SCHEMA; exports.PAINT_GRADIENT_KIT = _chunkNIBFKXMDcjs.PAINT_GRADIENT_KIT; exports.PAINT_GRADIENT_MAPPINGS = _chunkNIBFKXMDcjs.PAINT_GRADIENT_MAPPINGS; exports.PAINT_GRADIENT_MAPPING_LABELS = _chunkNIBFKXMDcjs.PAINT_GRADIENT_MAPPING_LABELS; exports.PAINT_GRADIENT_PRESETS = _chunkNIBFKXMDcjs.PAINT_GRADIENT_PRESETS; exports.PAINT_GRADIENT_REPEATS = _chunkNIBFKXMDcjs.PAINT_GRADIENT_REPEATS; exports.PAINT_GRADIENT_REPEAT_LABELS = _chunkNIBFKXMDcjs.PAINT_GRADIENT_REPEAT_LABELS; exports.PAINT_GRADIENT_SPACES = _chunkNIBFKXMDcjs.PAINT_GRADIENT_SPACES; exports.PAINT_GRADIENT_SPACE_LABELS = _chunkNIBFKXMDcjs.PAINT_GRADIENT_SPACE_LABELS; exports.PAINT_SOURCE_JSON_SCHEMA = _chunkNIBFKXMDcjs.PAINT_SOURCE_JSON_SCHEMA; exports.PAPER_CAPACITY = _chunkJ5VQYK7Tcjs.PAPER_CAPACITY; exports.PARAM = _chunkJ5VQYK7Tcjs.PARAM; exports.PARAM_FLOATS = _chunkJ5VQYK7Tcjs.PARAM_FLOATS; exports.PIGMENT_BANDS = _chunk2VX55NFMcjs.PIGMENT_BANDS; exports.PIGMENT_CHANNELS = _chunkJ5VQYK7Tcjs.PIGMENT_CHANNELS; exports.PIGMENT_LAMBDA_MIN = _chunk2VX55NFMcjs.PIGMENT_LAMBDA_MIN; exports.PIGMENT_LAMBDA_STEP = _chunk2VX55NFMcjs.PIGMENT_LAMBDA_STEP; exports.PIGMENT_UNIT = _chunkJ5VQYK7Tcjs.PIGMENT_UNIT; exports.PIGMENT_WAVELENGTHS = _chunk2VX55NFMcjs.PIGMENT_WAVELENGTHS; exports.PLANE = _chunkJ5VQYK7Tcjs.PLANE; exports.PLANE_BYTES = _chunkJ5VQYK7Tcjs.PLANE_BYTES; exports.P_D0 = _chunkJ5VQYK7Tcjs.P_D0; exports.P_DL = _chunkJ5VQYK7Tcjs.P_DL; exports.P_EDGE = _chunkJ5VQYK7Tcjs.P_EDGE; exports.P_FX = _chunkJ5VQYK7Tcjs.P_FX; exports.P_FY = _chunkJ5VQYK7Tcjs.P_FY; exports.P_H = _chunkJ5VQYK7Tcjs.P_H; exports.P_L = _chunkJ5VQYK7Tcjs.P_L; exports.P_P0 = _chunkJ5VQYK7Tcjs.P_P0; exports.P_RHO = _chunkJ5VQYK7Tcjs.P_RHO; exports.P_SW = _chunkJ5VQYK7Tcjs.P_SW; exports.P_UX = _chunkJ5VQYK7Tcjs.P_UX; exports.P_UY = _chunkJ5VQYK7Tcjs.P_UY; exports.PaintExchange = _chunkNIBFKXMDcjs.PaintExchange; exports.PaintGradientSampler = _chunkNIBFKXMDcjs.PaintGradientSampler; exports.PaintSourceError = _chunkNIBFKXMDcjs.PaintSourceError; exports.PaperGrain = _chunkNIBFKXMDcjs.PaperGrain; exports.RETOUCH_SAMPLES = _chunk62MFUHSIcjs.RETOUCH_SAMPLES; exports.RegionPixelSource = _chunk62MFUHSIcjs.RegionPixelSource; exports.RetouchDabStroke = _chunk62MFUHSIcjs.RetouchDabStroke; exports.SET_PLANES = _chunkJ5VQYK7Tcjs.SET_PLANES; exports.SLOT_BYTES = _chunkJ5VQYK7Tcjs.SLOT_BYTES; exports.SLOT_PLANES = _chunkJ5VQYK7Tcjs.SLOT_PLANES; exports.SLOT_SIDE = _chunkJ5VQYK7Tcjs.SLOT_SIDE; exports.SPOT_HEAL_TYPES = _chunk62MFUHSIcjs.SPOT_HEAL_TYPES; exports.SRGB_TO_LINEAR = _chunkJ5VQYK7Tcjs.SRGB_TO_LINEAR; exports.STRIP = _chunkJ5VQYK7Tcjs.STRIP; exports.SmudgeTip = _chunkNIBFKXMDcjs.SmudgeTip; exports.StrokeCoverage = _chunkNIBFKXMDcjs.StrokeCoverage; exports.TIP_GRADIENT_STEPS = _chunkNIBFKXMDcjs.TIP_GRADIENT_STEPS; exports.TONE_RANGES = _chunk62MFUHSIcjs.TONE_RANGES; exports.TileMedium = _chunkNIBFKXMDcjs.TileMedium; exports.TilePixelSource = _chunk62MFUHSIcjs.TilePixelSource; exports.TileableNoise = _chunk3K6HWEXZcjs.TileableNoise; exports.TransformedPixelSource = _chunk62MFUHSIcjs.TransformedPixelSource; exports.U_MAX = _chunkJ5VQYK7Tcjs.U_MAX; exports.W9 = _chunkJ5VQYK7Tcjs.W9; exports.WET_FLOW_KINDS = _chunkJ5VQYK7Tcjs.WET_FLOW_KINDS; exports.WET_PARAM_KEYS = _chunkJ5VQYK7Tcjs.WET_PARAM_KEYS; exports.WET_TILE = _chunkJ5VQYK7Tcjs.WET_TILE; exports.WGSL_HALO = _chunkJ5VQYK7Tcjs.WGSL_HALO; exports.WGSL_SHADE = _chunkJ5VQYK7Tcjs.WGSL_SHADE; exports.WGSL_STEP = _chunkJ5VQYK7Tcjs.WGSL_STEP; exports.WetGpuEngine = _chunkJ5VQYK7Tcjs.WetGpuEngine; exports.WetMedium = _chunkJ5VQYK7Tcjs.WetMedium; exports.WetWorkerPool = _chunkJ5VQYK7Tcjs.WetWorkerPool; exports.WetWorld = _chunkJ5VQYK7Tcjs.WetWorld; exports.WetWorldError = _chunkJ5VQYK7Tcjs.WetWorldError; exports.addPaintGradientStop = _chunkNIBFKXMDcjs.addPaintGradientStop; exports.applyRetouchToTile = _chunk62MFUHSIcjs.applyRetouchToTile; exports.applyStrokeToDeepTile = _chunkNIBFKXMDcjs.applyStrokeToDeepTile; exports.applyStrokeToTile = _chunkNIBFKXMDcjs.applyStrokeToTile; exports.applyToneToDeepTile = _chunk62MFUHSIcjs.applyToneToDeepTile; exports.bestOffset = _chunkBB6TR422cjs.bestOffset; exports.blendRadius = _chunkNIBFKXMDcjs.blendRadius; exports.blenderDab = _chunkNIBFKXMDcjs.blenderDab; exports.boxBlurPixels = _chunk62MFUHSIcjs.boxBlurPixels; exports.brushstrokeDataUrl = _chunkSTLTOISWcjs.brushstrokeDataUrl; exports.brushstrokeKey = _chunkSTLTOISWcjs.brushstrokeKey; exports.brushstrokeSamples = _chunkSTLTOISWcjs.brushstrokeSamples; exports.brushstrokeScaleBucket = _chunkYQGCPL5Xcjs.brushstrokeScaleBucket; exports.brushstrokeStrokeOptions = _chunkSTLTOISWcjs.brushstrokeStrokeOptions; exports.brushstrokeToCanvas = _chunkSTLTOISWcjs.brushstrokeToCanvas; exports.canShareMemory = _chunkJ5VQYK7Tcjs.canShareMemory; exports.cleanMixer = _chunkNIBFKXMDcjs.cleanMixer; exports.cloneSamplePoint = _chunk62MFUHSIcjs.cloneSamplePoint; exports.contentAwareFill = _chunkBB6TR422cjs.contentAwareFill; exports.coverageTileCoord = _chunkNIBFKXMDcjs.coverageTileCoord; exports.createBlenderScratch = _chunkNIBFKXMDcjs.createBlenderScratch; exports.createPigment = _chunk2VX55NFMcjs.createPigment; exports.createPigmentTools = _chunk62MFUHSIcjs.createPigmentTools; exports.createWetGpuEngine = _chunkJ5VQYK7Tcjs.createWetGpuEngine; exports.dabCoverage = _chunkNIBFKXMDcjs.dabCoverage; exports.dabRect = _chunkNIBFKXMDcjs.dabRect; exports.dexp = _chunkJ5VQYK7Tcjs.dexp; exports.dilateMask = _chunkBB6TR422cjs.dilateMask; exports.dlog = _chunkJ5VQYK7Tcjs.dlog; exports.dodgeBurn = _chunk62MFUHSIcjs.dodgeBurn; exports.dodgeBurnCurve = _chunk62MFUHSIcjs.dodgeBurnCurve; exports.dpow = _chunkJ5VQYK7Tcjs.dpow; exports.dsincos = _chunkJ5VQYK7Tcjs.dsincos; exports.edgeBits = _chunkJ5VQYK7Tcjs.edgeBits; exports.exchangeRates = _chunkNIBFKXMDcjs.exchangeRates; exports.expNeg = _chunkJ5VQYK7Tcjs.expNeg; exports.filmPixel = _chunkJ5VQYK7Tcjs.filmPixel; exports.filmReflectance = _chunkJ5VQYK7Tcjs.filmReflectance; exports.findWebGpu = _chunkJ5VQYK7Tcjs.findWebGpu; exports.flowField = _chunkJ5VQYK7Tcjs.flowField; exports.gradientDabColor = _chunkNIBFKXMDcjs.gradientDabColor; exports.grainCatch = _chunkNIBFKXMDcjs.grainCatch; exports.grainHeights = _chunkNIBFKXMDcjs.grainHeights; exports.hash2 = _chunk3K6HWEXZcjs.hash2; exports.healPixels = _chunk62MFUHSIcjs.healPixels; exports.hexToPaintRgb = _chunkNIBFKXMDcjs.hexToPaintRgb; exports.isBrushstrokeBrush = _chunkSTLTOISWcjs.isBrushstrokeBrush; exports.isGradientPaint = _chunkNIBFKXMDcjs.isGradientPaint; exports.isIdentityCloneTransform = _chunk62MFUHSIcjs.isIdentityCloneTransform; exports.latticeViscosity = _chunkJ5VQYK7Tcjs.latticeViscosity; exports.lerpPigment = _chunk2VX55NFMcjs.lerpPigment; exports.lerpPigmentInto = _chunk2VX55NFMcjs.lerpPigmentInto; exports.linearToSrgb8 = _chunkJ5VQYK7Tcjs.linearToSrgb8; exports.loadMixer = _chunkNIBFKXMDcjs.loadMixer; exports.loadWetKernel = _chunkJ5VQYK7Tcjs.loadWetKernel; exports.luma = _chunk62MFUHSIcjs.luma; exports.maskBounds = _chunkBB6TR422cjs.maskBounds; exports.membraneFill = _chunkBB6TR422cjs.membraneFill; exports.mix32 = _chunk3K6HWEXZcjs.mix32; exports.mixPigments = _chunk2VX55NFMcjs.mixPigments; exports.mixerRates = _chunkNIBFKXMDcjs.mixerRates; exports.moveWetSnapshot = _chunkJ5VQYK7Tcjs.moveWetSnapshot; exports.normalizeBlender = _chunkNIBFKXMDcjs.normalizeBlender; exports.normalizeBrush = _chunkNIBFKXMDcjs.normalizeBrush; exports.normalizeFlow = _chunkJ5VQYK7Tcjs.normalizeFlow; exports.normalizeHexColor = _chunkNIBFKXMDcjs.normalizeHexColor; exports.normalizeMixer = _chunkNIBFKXMDcjs.normalizeMixer; exports.normalizeRetouch = _chunk62MFUHSIcjs.normalizeRetouch; exports.normalizeSmudge = _chunkNIBFKXMDcjs.normalizeSmudge; exports.normalizeTilt = _chunkJ5VQYK7Tcjs.normalizeTilt; exports.normalizeWetParams = _chunkJ5VQYK7Tcjs.normalizeWetParams; exports.packWetParams = _chunkJ5VQYK7Tcjs.packWetParams; exports.paintGradientMappingFor = _chunkNIBFKXMDcjs.paintGradientMappingFor; exports.paintPathStroke = _chunkSTLTOISWcjs.paintPathStroke; exports.paintSourceColor = _chunkNIBFKXMDcjs.paintSourceColor; exports.paintSourceCss = _chunkNIBFKXMDcjs.paintSourceCss; exports.parsePaintSource = _chunkNIBFKXMDcjs.parsePaintSource; exports.pathStrokeCoverage = _chunkSTLTOISWcjs.pathStrokeCoverage; exports.pathStrokeDabs = _chunkSTLTOISWcjs.pathStrokeDabs; exports.perDabStrength = _chunk62MFUHSIcjs.perDabStrength; exports.pigmentColor = _chunkJ5VQYK7Tcjs.pigmentColor; exports.pigmentOf = _chunkJ5VQYK7Tcjs.pigmentOf; exports.pixelPigment = _chunkJ5VQYK7Tcjs.pixelPigment; exports.pointerPressure = _chunk62MFUHSIcjs.pointerPressure; exports.pointerStrokeSample = _chunk62MFUHSIcjs.pointerStrokeSample; exports.pointerStrokeSamples = _chunk62MFUHSIcjs.pointerStrokeSamples; exports.put255 = _chunkNIBFKXMDcjs.put255; exports.rand01 = _chunk3K6HWEXZcjs.rand01; exports.randSigned = _chunk3K6HWEXZcjs.randSigned; exports.rasterizeDab = _chunkNIBFKXMDcjs.rasterizeDab; exports.readPaintSource = _chunkNIBFKXMDcjs.readPaintSource; exports.readSourceRegion = _chunk62MFUHSIcjs.readSourceRegion; exports.reflectanceToRgb = _chunk2VX55NFMcjs.reflectanceToRgb; exports.removePaintGradientStop = _chunkNIBFKXMDcjs.removePaintGradientStop; exports.renderBrushstroke = _chunkSTLTOISWcjs.renderBrushstroke; exports.resolvePaintGradient = _chunkNIBFKXMDcjs.resolvePaintGradient; exports.retouchFilter = _chunk62MFUHSIcjs.retouchFilter; exports.reversePaintGradient = _chunkNIBFKXMDcjs.reversePaintGradient; exports.rgbToReflectance = _chunk2VX55NFMcjs.rgbToReflectance; exports.rgbaViewOfGrey = _chunk62MFUHSIcjs.rgbaViewOfGrey; exports.saturationOf = _chunk62MFUHSIcjs.saturationOf; exports.scalePaintGradient = _chunkNIBFKXMDcjs.scalePaintGradient; exports.seamlessClone = _chunkBB6TR422cjs.seamlessClone; exports.seedFromString = _chunk3K6HWEXZcjs.seedFromString; exports.setPigmentColor = _chunk2VX55NFMcjs.setPigmentColor; exports.shadeLightTile = _chunkJ5VQYK7Tcjs.shadeLightTile; exports.shadeTile = _chunkJ5VQYK7Tcjs.shadeTile; exports.smoothPoints = _chunkNIBFKXMDcjs.smoothPoints; exports.smudgeEffect = _chunk62MFUHSIcjs.smudgeEffect; exports.solidPaint = _chunkNIBFKXMDcjs.solidPaint; exports.solveMembrane = _chunkBB6TR422cjs.solveMembrane; exports.sponge = _chunk62MFUHSIcjs.sponge; exports.spongeEffect = _chunk62MFUHSIcjs.spongeEffect; exports.spotHealPixels = _chunk62MFUHSIcjs.spotHealPixels; exports.spotHealWindow = _chunk62MFUHSIcjs.spotHealWindow; exports.srgbByteToLinear = _chunkJ5VQYK7Tcjs.srgbByteToLinear; exports.stepSlotTs = _chunkJ5VQYK7Tcjs.stepSlotTs; exports.strokeGrainCatch = _chunkNIBFKXMDcjs.strokeGrainCatch; exports.tipFalloff = _chunkNIBFKXMDcjs.tipFalloff; exports.tipReach = _chunkNIBFKXMDcjs.tipReach; exports.tipShape = _chunkNIBFKXMDcjs.tipShape; exports.toneOf = _chunk62MFUHSIcjs.toneOf; exports.updatePaintGradientStop = _chunkNIBFKXMDcjs.updatePaintGradientStop; exports.walkDabs = _chunkNIBFKXMDcjs.walkDabs; exports.wetGpuSupport = _chunkJ5VQYK7Tcjs.wetGpuSupport; exports.wetSimdSupported = _chunkJ5VQYK7Tcjs.wetSimdSupported; exports.wetSupport = _chunkJ5VQYK7Tcjs.wetSupport;
501
+ exports.BODY_SCATTER = _chunkN5IMDAHMcjs.BODY_SCATTER; exports.BRUSHSTROKE_MAX_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MAX_SCALE; exports.BRUSHSTROKE_MIN_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MIN_SCALE; exports.BrushstrokeCache = _chunkSTLTOISWcjs.BrushstrokeCache; exports.CoverageMap = _chunkNIBFKXMDcjs.CoverageMap; exports.DEFAULT_BLENDER = _chunkNIBFKXMDcjs.DEFAULT_BLENDER; exports.DEFAULT_BRUSH = _chunkNIBFKXMDcjs.DEFAULT_BRUSH; exports.DEFAULT_FLOW = _chunkN5IMDAHMcjs.DEFAULT_FLOW; exports.DEFAULT_MIXER = _chunkNIBFKXMDcjs.DEFAULT_MIXER; exports.DEFAULT_PAINT_GRADIENT = _chunkNIBFKXMDcjs.DEFAULT_PAINT_GRADIENT; exports.DEFAULT_PAINT_GRADIENT_MAPPING = _chunkNIBFKXMDcjs.DEFAULT_PAINT_GRADIENT_MAPPING; exports.DEFAULT_RETOUCH = _chunk62MFUHSIcjs.DEFAULT_RETOUCH; exports.DEFAULT_SMUDGE = _chunkNIBFKXMDcjs.DEFAULT_SMUDGE; exports.DEFAULT_WET_PAPER = _chunkN5IMDAHMcjs.DEFAULT_WET_PAPER; exports.DEFAULT_WET_PARAMS = _chunkN5IMDAHMcjs.DEFAULT_WET_PARAMS; exports.DRY_EPS = _chunkN5IMDAHMcjs.DRY_EPS; exports.DabWalker = _chunkNIBFKXMDcjs.DabWalker; exports.EMPTY_MIXER_LOAD = _chunkNIBFKXMDcjs.EMPTY_MIXER_LOAD; exports.EX = _chunkN5IMDAHMcjs.EX; exports.EY = _chunkN5IMDAHMcjs.EY; exports.FLAG_ALIVE = _chunkN5IMDAHMcjs.FLAG_ALIVE; exports.FLAG_BOTTOM = _chunkN5IMDAHMcjs.FLAG_BOTTOM; exports.FLAG_LEFT = _chunkN5IMDAHMcjs.FLAG_LEFT; exports.FLAG_RIGHT = _chunkN5IMDAHMcjs.FLAG_RIGHT; exports.FLAG_TOP = _chunkN5IMDAHMcjs.FLAG_TOP; exports.FLAG_WET = _chunkN5IMDAHMcjs.FLAG_WET; exports.FLAT = _chunkN5IMDAHMcjs.FLAT; exports.FREE_INTERVAL = _chunkN5IMDAHMcjs.FREE_INTERVAL; exports.GRAIN_PATTERNS = _chunkNIBFKXMDcjs.GRAIN_PATTERNS; exports.GRAIN_TILE = _chunkNIBFKXMDcjs.GRAIN_TILE; exports.HIDE = _chunkN5IMDAHMcjs.HIDE; exports.IDENTITY_CLONE_TRANSFORM = _chunk62MFUHSIcjs.IDENTITY_CLONE_TRANSFORM; exports.MASS_CHANNELS = _chunkN5IMDAHMcjs.MASS_CHANNELS; exports.MAX_BATCH = _chunkN5IMDAHMcjs.MAX_BATCH; exports.MAX_BRUSH_SIZE = _chunkNIBFKXMDcjs.MAX_BRUSH_SIZE; exports.MAX_TILT_ACCEL = _chunkN5IMDAHMcjs.MAX_TILT_ACCEL; exports.MAX_WET_LANES = _chunkN5IMDAHMcjs.MAX_WET_LANES; exports.MAX_WET_SLOTS = _chunkN5IMDAHMcjs.MAX_WET_SLOTS; exports.MIXER_DRAIN = _chunkNIBFKXMDcjs.MIXER_DRAIN; exports.MIXER_PICKUP_RATE = _chunkNIBFKXMDcjs.MIXER_PICKUP_RATE; exports.MIXING_MODELS = _chunkNIBFKXMDcjs.MIXING_MODELS; exports.MixerStroke = _chunkNIBFKXMDcjs.MixerStroke; exports.OPP = _chunkN5IMDAHMcjs.OPP; exports.PAINT_COLOR_JSON_SCHEMA = _chunkNIBFKXMDcjs.PAINT_COLOR_JSON_SCHEMA; exports.PAINT_GRADIENT_FULL_SPEED = _chunkNIBFKXMDcjs.PAINT_GRADIENT_FULL_SPEED; exports.PAINT_GRADIENT_JSON_SCHEMA = _chunkNIBFKXMDcjs.PAINT_GRADIENT_JSON_SCHEMA; exports.PAINT_GRADIENT_KIT = _chunkNIBFKXMDcjs.PAINT_GRADIENT_KIT; exports.PAINT_GRADIENT_MAPPINGS = _chunkNIBFKXMDcjs.PAINT_GRADIENT_MAPPINGS; exports.PAINT_GRADIENT_MAPPING_LABELS = _chunkNIBFKXMDcjs.PAINT_GRADIENT_MAPPING_LABELS; exports.PAINT_GRADIENT_PRESETS = _chunkNIBFKXMDcjs.PAINT_GRADIENT_PRESETS; exports.PAINT_GRADIENT_REPEATS = _chunkNIBFKXMDcjs.PAINT_GRADIENT_REPEATS; exports.PAINT_GRADIENT_REPEAT_LABELS = _chunkNIBFKXMDcjs.PAINT_GRADIENT_REPEAT_LABELS; exports.PAINT_GRADIENT_SPACES = _chunkNIBFKXMDcjs.PAINT_GRADIENT_SPACES; exports.PAINT_GRADIENT_SPACE_LABELS = _chunkNIBFKXMDcjs.PAINT_GRADIENT_SPACE_LABELS; exports.PAINT_SOURCE_JSON_SCHEMA = _chunkNIBFKXMDcjs.PAINT_SOURCE_JSON_SCHEMA; exports.PAPER_CAPACITY = _chunkN5IMDAHMcjs.PAPER_CAPACITY; exports.PARAM = _chunkN5IMDAHMcjs.PARAM; exports.PARAM_FLOATS = _chunkN5IMDAHMcjs.PARAM_FLOATS; exports.PIGMENT_BANDS = _chunk2VX55NFMcjs.PIGMENT_BANDS; exports.PIGMENT_CHANNELS = _chunkN5IMDAHMcjs.PIGMENT_CHANNELS; exports.PIGMENT_LAMBDA_MIN = _chunk2VX55NFMcjs.PIGMENT_LAMBDA_MIN; exports.PIGMENT_LAMBDA_STEP = _chunk2VX55NFMcjs.PIGMENT_LAMBDA_STEP; exports.PIGMENT_UNIT = _chunkN5IMDAHMcjs.PIGMENT_UNIT; exports.PIGMENT_WAVELENGTHS = _chunk2VX55NFMcjs.PIGMENT_WAVELENGTHS; exports.PLANE = _chunkN5IMDAHMcjs.PLANE; exports.PLANE_BYTES = _chunkN5IMDAHMcjs.PLANE_BYTES; exports.P_D0 = _chunkN5IMDAHMcjs.P_D0; exports.P_DL = _chunkN5IMDAHMcjs.P_DL; exports.P_EDGE = _chunkN5IMDAHMcjs.P_EDGE; exports.P_FX = _chunkN5IMDAHMcjs.P_FX; exports.P_FY = _chunkN5IMDAHMcjs.P_FY; exports.P_H = _chunkN5IMDAHMcjs.P_H; exports.P_L = _chunkN5IMDAHMcjs.P_L; exports.P_P0 = _chunkN5IMDAHMcjs.P_P0; exports.P_RHO = _chunkN5IMDAHMcjs.P_RHO; exports.P_SW = _chunkN5IMDAHMcjs.P_SW; exports.P_UX = _chunkN5IMDAHMcjs.P_UX; exports.P_UY = _chunkN5IMDAHMcjs.P_UY; exports.PaintExchange = _chunkNIBFKXMDcjs.PaintExchange; exports.PaintGradientSampler = _chunkNIBFKXMDcjs.PaintGradientSampler; exports.PaintSourceError = _chunkNIBFKXMDcjs.PaintSourceError; exports.PaperGrain = _chunkNIBFKXMDcjs.PaperGrain; exports.RETOUCH_SAMPLES = _chunk62MFUHSIcjs.RETOUCH_SAMPLES; exports.RegionPixelSource = _chunk62MFUHSIcjs.RegionPixelSource; exports.RetouchDabStroke = _chunk62MFUHSIcjs.RetouchDabStroke; exports.SET_PLANES = _chunkN5IMDAHMcjs.SET_PLANES; exports.SLOT_BYTES = _chunkN5IMDAHMcjs.SLOT_BYTES; exports.SLOT_PLANES = _chunkN5IMDAHMcjs.SLOT_PLANES; exports.SLOT_SIDE = _chunkN5IMDAHMcjs.SLOT_SIDE; exports.SPOT_HEAL_TYPES = _chunk62MFUHSIcjs.SPOT_HEAL_TYPES; exports.SRGB_TO_LINEAR = _chunkN5IMDAHMcjs.SRGB_TO_LINEAR; exports.STRIP = _chunkN5IMDAHMcjs.STRIP; exports.SmudgeTip = _chunkNIBFKXMDcjs.SmudgeTip; exports.StrokeCoverage = _chunkNIBFKXMDcjs.StrokeCoverage; exports.TIP_GRADIENT_STEPS = _chunkNIBFKXMDcjs.TIP_GRADIENT_STEPS; exports.TONE_RANGES = _chunk62MFUHSIcjs.TONE_RANGES; exports.TileMedium = _chunkNIBFKXMDcjs.TileMedium; exports.TilePixelSource = _chunk62MFUHSIcjs.TilePixelSource; exports.TileableNoise = _chunk3K6HWEXZcjs.TileableNoise; exports.TransformedPixelSource = _chunk62MFUHSIcjs.TransformedPixelSource; exports.U_MAX = _chunkN5IMDAHMcjs.U_MAX; exports.W9 = _chunkN5IMDAHMcjs.W9; exports.WET_FLOW_KINDS = _chunkN5IMDAHMcjs.WET_FLOW_KINDS; exports.WET_PARAM_KEYS = _chunkN5IMDAHMcjs.WET_PARAM_KEYS; exports.WET_TILE = _chunkN5IMDAHMcjs.WET_TILE; exports.WGSL_HALO = _chunkN5IMDAHMcjs.WGSL_HALO; exports.WGSL_SHADE = _chunkN5IMDAHMcjs.WGSL_SHADE; exports.WGSL_STEP = _chunkN5IMDAHMcjs.WGSL_STEP; exports.WetGpuEngine = _chunkN5IMDAHMcjs.WetGpuEngine; exports.WetMedium = _chunkN5IMDAHMcjs.WetMedium; exports.WetWorkerPool = _chunkN5IMDAHMcjs.WetWorkerPool; exports.WetWorld = _chunkN5IMDAHMcjs.WetWorld; exports.WetWorldError = _chunkN5IMDAHMcjs.WetWorldError; exports.addPaintGradientStop = _chunkNIBFKXMDcjs.addPaintGradientStop; exports.applyRetouchToTile = _chunk62MFUHSIcjs.applyRetouchToTile; exports.applyStrokeToDeepTile = _chunkNIBFKXMDcjs.applyStrokeToDeepTile; exports.applyStrokeToTile = _chunkNIBFKXMDcjs.applyStrokeToTile; exports.applyToneToDeepTile = _chunk62MFUHSIcjs.applyToneToDeepTile; exports.bestOffset = _chunkBB6TR422cjs.bestOffset; exports.blendRadius = _chunkNIBFKXMDcjs.blendRadius; exports.blenderDab = _chunkNIBFKXMDcjs.blenderDab; exports.boxBlurPixels = _chunk62MFUHSIcjs.boxBlurPixels; exports.brushstrokeDataUrl = _chunkSTLTOISWcjs.brushstrokeDataUrl; exports.brushstrokeKey = _chunkSTLTOISWcjs.brushstrokeKey; exports.brushstrokeSamples = _chunkSTLTOISWcjs.brushstrokeSamples; exports.brushstrokeScaleBucket = _chunkYQGCPL5Xcjs.brushstrokeScaleBucket; exports.brushstrokeStrokeOptions = _chunkSTLTOISWcjs.brushstrokeStrokeOptions; exports.brushstrokeToCanvas = _chunkSTLTOISWcjs.brushstrokeToCanvas; exports.canShareMemory = _chunkN5IMDAHMcjs.canShareMemory; exports.cleanMixer = _chunkNIBFKXMDcjs.cleanMixer; exports.cloneSamplePoint = _chunk62MFUHSIcjs.cloneSamplePoint; exports.contentAwareFill = _chunkBB6TR422cjs.contentAwareFill; exports.coverageTileCoord = _chunkNIBFKXMDcjs.coverageTileCoord; exports.createBlenderScratch = _chunkNIBFKXMDcjs.createBlenderScratch; exports.createPigment = _chunk2VX55NFMcjs.createPigment; exports.createPigmentTools = _chunk62MFUHSIcjs.createPigmentTools; exports.createWetGpuEngine = _chunkN5IMDAHMcjs.createWetGpuEngine; exports.dabCoverage = _chunkNIBFKXMDcjs.dabCoverage; exports.dabRect = _chunkNIBFKXMDcjs.dabRect; exports.dexp = _chunkN5IMDAHMcjs.dexp; exports.dilateMask = _chunkBB6TR422cjs.dilateMask; exports.dlog = _chunkN5IMDAHMcjs.dlog; exports.dodgeBurn = _chunk62MFUHSIcjs.dodgeBurn; exports.dodgeBurnCurve = _chunk62MFUHSIcjs.dodgeBurnCurve; exports.dpow = _chunkN5IMDAHMcjs.dpow; exports.dsincos = _chunkN5IMDAHMcjs.dsincos; exports.edgeBits = _chunkN5IMDAHMcjs.edgeBits; exports.exchangeRates = _chunkNIBFKXMDcjs.exchangeRates; exports.expNeg = _chunkN5IMDAHMcjs.expNeg; exports.filmPixel = _chunkN5IMDAHMcjs.filmPixel; exports.filmReflectance = _chunkN5IMDAHMcjs.filmReflectance; exports.findWebGpu = _chunkN5IMDAHMcjs.findWebGpu; exports.flowField = _chunkN5IMDAHMcjs.flowField; exports.gradientDabColor = _chunkNIBFKXMDcjs.gradientDabColor; exports.grainCatch = _chunkNIBFKXMDcjs.grainCatch; exports.grainHeights = _chunkNIBFKXMDcjs.grainHeights; exports.hash2 = _chunk3K6HWEXZcjs.hash2; exports.healPixels = _chunk62MFUHSIcjs.healPixels; exports.hexToPaintRgb = _chunkNIBFKXMDcjs.hexToPaintRgb; exports.isBrushstrokeBrush = _chunkSTLTOISWcjs.isBrushstrokeBrush; exports.isGradientPaint = _chunkNIBFKXMDcjs.isGradientPaint; exports.isIdentityCloneTransform = _chunk62MFUHSIcjs.isIdentityCloneTransform; exports.latticeViscosity = _chunkN5IMDAHMcjs.latticeViscosity; exports.lerpPigment = _chunk2VX55NFMcjs.lerpPigment; exports.lerpPigmentInto = _chunk2VX55NFMcjs.lerpPigmentInto; exports.linearToSrgb8 = _chunkN5IMDAHMcjs.linearToSrgb8; exports.loadMixer = _chunkNIBFKXMDcjs.loadMixer; exports.loadWetKernel = _chunkN5IMDAHMcjs.loadWetKernel; exports.luma = _chunk62MFUHSIcjs.luma; exports.maskBounds = _chunkBB6TR422cjs.maskBounds; exports.membraneFill = _chunkBB6TR422cjs.membraneFill; exports.mix32 = _chunk3K6HWEXZcjs.mix32; exports.mixPigments = _chunk2VX55NFMcjs.mixPigments; exports.mixerRates = _chunkNIBFKXMDcjs.mixerRates; exports.moveWetSnapshot = _chunkN5IMDAHMcjs.moveWetSnapshot; exports.normalizeBlender = _chunkNIBFKXMDcjs.normalizeBlender; exports.normalizeBrush = _chunkNIBFKXMDcjs.normalizeBrush; exports.normalizeFlow = _chunkN5IMDAHMcjs.normalizeFlow; exports.normalizeHexColor = _chunkNIBFKXMDcjs.normalizeHexColor; exports.normalizeMixer = _chunkNIBFKXMDcjs.normalizeMixer; exports.normalizeRetouch = _chunk62MFUHSIcjs.normalizeRetouch; exports.normalizeSmudge = _chunkNIBFKXMDcjs.normalizeSmudge; exports.normalizeTilt = _chunkN5IMDAHMcjs.normalizeTilt; exports.normalizeWetParams = _chunkN5IMDAHMcjs.normalizeWetParams; exports.packWetParams = _chunkN5IMDAHMcjs.packWetParams; exports.paintGradientMappingFor = _chunkNIBFKXMDcjs.paintGradientMappingFor; exports.paintPathStroke = _chunkSTLTOISWcjs.paintPathStroke; exports.paintSourceColor = _chunkNIBFKXMDcjs.paintSourceColor; exports.paintSourceCss = _chunkNIBFKXMDcjs.paintSourceCss; exports.parsePaintSource = _chunkNIBFKXMDcjs.parsePaintSource; exports.pathStrokeCoverage = _chunkSTLTOISWcjs.pathStrokeCoverage; exports.pathStrokeDabs = _chunkSTLTOISWcjs.pathStrokeDabs; exports.perDabStrength = _chunk62MFUHSIcjs.perDabStrength; exports.pigmentColor = _chunkN5IMDAHMcjs.pigmentColor; exports.pigmentOf = _chunkN5IMDAHMcjs.pigmentOf; exports.pixelPigment = _chunkN5IMDAHMcjs.pixelPigment; exports.pointerPressure = _chunk62MFUHSIcjs.pointerPressure; exports.pointerStrokeSample = _chunk62MFUHSIcjs.pointerStrokeSample; exports.pointerStrokeSamples = _chunk62MFUHSIcjs.pointerStrokeSamples; exports.put255 = _chunkNIBFKXMDcjs.put255; exports.rand01 = _chunk3K6HWEXZcjs.rand01; exports.randSigned = _chunk3K6HWEXZcjs.randSigned; exports.rasterizeDab = _chunkNIBFKXMDcjs.rasterizeDab; exports.readPaintSource = _chunkNIBFKXMDcjs.readPaintSource; exports.readSourceRegion = _chunk62MFUHSIcjs.readSourceRegion; exports.reflectanceToRgb = _chunk2VX55NFMcjs.reflectanceToRgb; exports.removePaintGradientStop = _chunkNIBFKXMDcjs.removePaintGradientStop; exports.renderBrushstroke = _chunkSTLTOISWcjs.renderBrushstroke; exports.resolvePaintGradient = _chunkNIBFKXMDcjs.resolvePaintGradient; exports.retouchFilter = _chunk62MFUHSIcjs.retouchFilter; exports.reversePaintGradient = _chunkNIBFKXMDcjs.reversePaintGradient; exports.rgbToReflectance = _chunk2VX55NFMcjs.rgbToReflectance; exports.rgbaViewOfGrey = _chunk62MFUHSIcjs.rgbaViewOfGrey; exports.saturationOf = _chunk62MFUHSIcjs.saturationOf; exports.scalePaintGradient = _chunkNIBFKXMDcjs.scalePaintGradient; exports.seamlessClone = _chunkBB6TR422cjs.seamlessClone; exports.seedFromString = _chunk3K6HWEXZcjs.seedFromString; exports.setPigmentColor = _chunk2VX55NFMcjs.setPigmentColor; exports.shadeLightTile = _chunkN5IMDAHMcjs.shadeLightTile; exports.shadeTile = _chunkN5IMDAHMcjs.shadeTile; exports.smoothPoints = _chunkNIBFKXMDcjs.smoothPoints; exports.smudgeEffect = _chunk62MFUHSIcjs.smudgeEffect; exports.solidPaint = _chunkNIBFKXMDcjs.solidPaint; exports.solveMembrane = _chunkBB6TR422cjs.solveMembrane; exports.sponge = _chunk62MFUHSIcjs.sponge; exports.spongeEffect = _chunk62MFUHSIcjs.spongeEffect; exports.spotHealPixels = _chunk62MFUHSIcjs.spotHealPixels; exports.spotHealWindow = _chunk62MFUHSIcjs.spotHealWindow; exports.srgbByteToLinear = _chunkN5IMDAHMcjs.srgbByteToLinear; exports.stepSlotTs = _chunkN5IMDAHMcjs.stepSlotTs; exports.strokeGrainCatch = _chunkNIBFKXMDcjs.strokeGrainCatch; exports.tipFalloff = _chunkNIBFKXMDcjs.tipFalloff; exports.tipReach = _chunkNIBFKXMDcjs.tipReach; exports.tipShape = _chunkNIBFKXMDcjs.tipShape; exports.toneOf = _chunk62MFUHSIcjs.toneOf; exports.updatePaintGradientStop = _chunkNIBFKXMDcjs.updatePaintGradientStop; exports.walkDabs = _chunkNIBFKXMDcjs.walkDabs; exports.wetGpuSupport = _chunkN5IMDAHMcjs.wetGpuSupport; exports.wetSimdSupported = _chunkN5IMDAHMcjs.wetSimdSupported; exports.wetSupport = _chunkN5IMDAHMcjs.wetSupport;
@@ -134,7 +134,7 @@ import {
134
134
  wetGpuSupport,
135
135
  wetSimdSupported,
136
136
  wetSupport
137
- } from "../chunk-GSTSZPSR.js";
137
+ } from "../chunk-N3SKPQEH.js";
138
138
  import {
139
139
  BrushstrokeCache,
140
140
  brushstrokeDataUrl,
@@ -59,6 +59,17 @@ export interface WetWorldOptions {
59
59
  /** Worker threads for the wasm kernel: `auto` (default: cores − 1, at most 10) or a number (0: none). */
60
60
  threads?: number | 'auto';
61
61
  }
62
+ /** A wet layer's active ghost paint state: pigment per unit tracer and fade countdown. */
63
+ export interface WetGhostState {
64
+ /** Pigment per unit of tracer (K_r, K_g, K_b, S). */
65
+ pigment: [number, number, number, number];
66
+ /** Free-interval ticks left before the ghost has fully faded. */
67
+ remaining: number;
68
+ /** Total free-interval ticks configured for the current ghost fade. */
69
+ total: number;
70
+ /** Linger seconds configured for the current ghost fade. */
71
+ linger: number;
72
+ }
62
73
  export interface WetLaneOptions {
63
74
  params?: Partial<WetParams>;
64
75
  /** The layer's pixels under the wet paint (default empty). */
@@ -68,6 +79,8 @@ export interface WetLaneOptions {
68
79
  flowStrength?: number;
69
80
  /** The layer's light paint under the wet paint (one channel; default none). */
70
81
  light?: TiledSurface | null;
82
+ /** Active ghost paint state on the layer, if any. */
83
+ ghost?: WetGhostState | null;
71
84
  }
72
85
  /** Totals for one wet layer. */
73
86
  export interface WetLaneStats {
@@ -95,6 +108,7 @@ export interface WetSnapshot {
95
108
  base: TiledSurface;
96
109
  light?: TiledSurface;
97
110
  lit?: boolean;
111
+ ghost?: WetGhostState | null;
98
112
  }>;
99
113
  /** Per active key: the current set and the deposit planes; and its last flags. */
100
114
  readonly slots: ReadonlyMap<number, {
@@ -191,6 +205,15 @@ export declare class WetWorld {
191
205
  isLit(id: string): boolean;
192
206
  /** Replaces the light paint under a layer's wet paint. */
193
207
  setLight(id: string, light: TiledSurface): void;
208
+ /** Active ghost paint state on the layer, or `null`. */
209
+ getGhost(id: string): WetGhostState | null;
210
+ /** Sets or clears a layer's active ghost paint state. */
211
+ setGhost(id: string, ghost: WetGhostState | null): void;
212
+ /**
213
+ * Starts a ghost paint fade on `id` with `pigment` per unit tracer and `linger` seconds. If an
214
+ * earlier ghost of a different colour is still fading on the layer, it finishes at once first.
215
+ */
216
+ startGhost(id: string, pigment: readonly [number, number, number, number], linger: number, stepsPerSecond?: number): void;
194
217
  private pack;
195
218
  private touchAll;
196
219
  private laneIndexOf;
@@ -287,7 +310,20 @@ export declare class WetWorld {
287
310
  * the paper as settled pigment, so water can move it again, and the same share of its light
288
311
  * paint (`light`) as settled light. Only where there is surface water.
289
312
  */
290
- rewet(id: string, rect: RasterRect, cov: ArrayLike<number> | null, amount: number, paper: readonly [number, number, number]): void;
313
+ rewet(id: string, rect: RasterRect, cov: ArrayLike<number> | null, amount: number, paper: readonly [number, number, number], suspend?: boolean): void;
314
+ /**
315
+ * Subtracts `amount` (0..1) of a ghost lane's remaining tracer (`P_L`, `P_DL`) and proportional
316
+ * ghost pigment (`lane.ghost.pigment`) across all live tiles of `id`. Speeds up in cells that
317
+ * are nearly dry so drying paint never pops. Clears the lane's `ghost` state once no tracer remains.
318
+ */
319
+ fadeGhost(id: string, amount: number): void;
320
+ /** Whether any live tile of `lane` still holds ghost tracer (`P_L > 0` or `P_DL > 0`). */
321
+ private hasGhostTracer;
322
+ /**
323
+ * Fades ghost tracer and pigment in one slot by `amount` (0..1). Returns whether any tracer
324
+ * remains in the slot.
325
+ */
326
+ private fadeGhostKey;
291
327
  /**
292
328
  * Dries wet paint at once (everything settles where it is, the water goes): in `rect`, or the
293
329
  * whole layer. Whole tiles that end up dry are baked into the base and freed. Returns the
@@ -59,6 +59,17 @@ export interface WetWorldOptions {
59
59
  /** Worker threads for the wasm kernel: `auto` (default: cores − 1, at most 10) or a number (0: none). */
60
60
  threads?: number | 'auto';
61
61
  }
62
+ /** A wet layer's active ghost paint state: pigment per unit tracer and fade countdown. */
63
+ export interface WetGhostState {
64
+ /** Pigment per unit of tracer (K_r, K_g, K_b, S). */
65
+ pigment: [number, number, number, number];
66
+ /** Free-interval ticks left before the ghost has fully faded. */
67
+ remaining: number;
68
+ /** Total free-interval ticks configured for the current ghost fade. */
69
+ total: number;
70
+ /** Linger seconds configured for the current ghost fade. */
71
+ linger: number;
72
+ }
62
73
  export interface WetLaneOptions {
63
74
  params?: Partial<WetParams>;
64
75
  /** The layer's pixels under the wet paint (default empty). */
@@ -68,6 +79,8 @@ export interface WetLaneOptions {
68
79
  flowStrength?: number;
69
80
  /** The layer's light paint under the wet paint (one channel; default none). */
70
81
  light?: TiledSurface | null;
82
+ /** Active ghost paint state on the layer, if any. */
83
+ ghost?: WetGhostState | null;
71
84
  }
72
85
  /** Totals for one wet layer. */
73
86
  export interface WetLaneStats {
@@ -95,6 +108,7 @@ export interface WetSnapshot {
95
108
  base: TiledSurface;
96
109
  light?: TiledSurface;
97
110
  lit?: boolean;
111
+ ghost?: WetGhostState | null;
98
112
  }>;
99
113
  /** Per active key: the current set and the deposit planes; and its last flags. */
100
114
  readonly slots: ReadonlyMap<number, {
@@ -191,6 +205,15 @@ export declare class WetWorld {
191
205
  isLit(id: string): boolean;
192
206
  /** Replaces the light paint under a layer's wet paint. */
193
207
  setLight(id: string, light: TiledSurface): void;
208
+ /** Active ghost paint state on the layer, or `null`. */
209
+ getGhost(id: string): WetGhostState | null;
210
+ /** Sets or clears a layer's active ghost paint state. */
211
+ setGhost(id: string, ghost: WetGhostState | null): void;
212
+ /**
213
+ * Starts a ghost paint fade on `id` with `pigment` per unit tracer and `linger` seconds. If an
214
+ * earlier ghost of a different colour is still fading on the layer, it finishes at once first.
215
+ */
216
+ startGhost(id: string, pigment: readonly [number, number, number, number], linger: number, stepsPerSecond?: number): void;
194
217
  private pack;
195
218
  private touchAll;
196
219
  private laneIndexOf;
@@ -287,7 +310,20 @@ export declare class WetWorld {
287
310
  * the paper as settled pigment, so water can move it again, and the same share of its light
288
311
  * paint (`light`) as settled light. Only where there is surface water.
289
312
  */
290
- rewet(id: string, rect: RasterRect, cov: ArrayLike<number> | null, amount: number, paper: readonly [number, number, number]): void;
313
+ rewet(id: string, rect: RasterRect, cov: ArrayLike<number> | null, amount: number, paper: readonly [number, number, number], suspend?: boolean): void;
314
+ /**
315
+ * Subtracts `amount` (0..1) of a ghost lane's remaining tracer (`P_L`, `P_DL`) and proportional
316
+ * ghost pigment (`lane.ghost.pigment`) across all live tiles of `id`. Speeds up in cells that
317
+ * are nearly dry so drying paint never pops. Clears the lane's `ghost` state once no tracer remains.
318
+ */
319
+ fadeGhost(id: string, amount: number): void;
320
+ /** Whether any live tile of `lane` still holds ghost tracer (`P_L > 0` or `P_DL > 0`). */
321
+ private hasGhostTracer;
322
+ /**
323
+ * Fades ghost tracer and pigment in one slot by `amount` (0..1). Returns whether any tracer
324
+ * remains in the slot.
325
+ */
326
+ private fadeGhostKey;
291
327
  /**
292
328
  * Dries wet paint at once (everything settles where it is, the water goes): in `rect`, or the
293
329
  * whole layer. Whole tiles that end up dry are baked into the base and freed. Returns the
@@ -41,6 +41,7 @@ export interface BrushEngineControls {
41
41
  /** Light paint: the "light follows pressure" toggle (`light.pressure`); the Light slider is in `sliders`. */
42
42
  light?: boolean;
43
43
  }
44
+ export declare const GHOST_SLIDERS: readonly SliderControl[];
44
45
  /**
45
46
  * The controls the active brush's engine adds to the brush panel (`null` for the eraser):
46
47
  * blender strength and blend distance; smudge strength and length; the Mixer Brush's pick-up,
@@ -50,6 +51,7 @@ export interface BrushEngineControls {
50
51
  */
51
52
  export declare function brushEngineControls(brush: Pick<PaintBrush, 'engine'> & {
52
53
  wet?: PaintBrush['wet'];
54
+ ghost?: PaintBrush['ghost'];
53
55
  }): BrushEngineControls | null;
54
56
  /** The multi-colour sliders for a mode: softness, and dabs per colour in `dab` mode. */
55
57
  export declare function multiColorSliders(mode: string): readonly SliderControl[];
@@ -41,6 +41,7 @@ export interface BrushEngineControls {
41
41
  /** Light paint: the "light follows pressure" toggle (`light.pressure`); the Light slider is in `sliders`. */
42
42
  light?: boolean;
43
43
  }
44
+ export declare const GHOST_SLIDERS: readonly SliderControl[];
44
45
  /**
45
46
  * The controls the active brush's engine adds to the brush panel (`null` for the eraser):
46
47
  * blender strength and blend distance; smudge strength and length; the Mixer Brush's pick-up,
@@ -50,6 +51,7 @@ export interface BrushEngineControls {
50
51
  */
51
52
  export declare function brushEngineControls(brush: Pick<PaintBrush, 'engine'> & {
52
53
  wet?: PaintBrush['wet'];
54
+ ghost?: PaintBrush['ghost'];
53
55
  }): BrushEngineControls | null;
54
56
  /** The multi-colour sliders for a mode: softness, and dabs per colour in `dab` mode. */
55
57
  export declare function multiColorSliders(mode: string): readonly SliderControl[];
@@ -94,6 +94,15 @@ export interface LightSettings {
94
94
  }
95
95
  export declare const DEFAULT_LIGHT: Readonly<LightSettings>;
96
96
  export declare function normalizeLight(raw?: Partial<LightSettings>, base?: LightSettings): LightSettings;
97
+ /** Ghost paint: wet paint whose colour vanishes after `linger` seconds, leaving only what it smeared. */
98
+ export interface GhostSettings {
99
+ /** Seconds of simulated time before the ghost paint has fully faded, 0.5..60 (default 4). */
100
+ linger: number;
101
+ /** How much the ghost paint drags and lifts the paint it passes through, 0..1 (default 0.3). */
102
+ smear: number;
103
+ }
104
+ export declare const DEFAULT_GHOST: Readonly<GhostSettings>;
105
+ export declare function normalizeGhost(raw?: Partial<GhostSettings>, base?: GhostSettings): GhostSettings;
97
106
  export declare function normalizeImpasto(raw?: Partial<ImpastoSettings>, base?: ImpastoSettings): ImpastoSettings;
98
107
  /** Multi-coloured brush: `tip` lays the colours across the tip, `dab` changes colour from dab to dab. */
99
108
  export type MultiColorMode = 'off' | 'tip' | 'dab';
@@ -218,6 +227,8 @@ export interface PaintBrush {
218
227
  sticker: StickerSettings;
219
228
  /** Light paint: the light it lays with its colour (amount 0: none). */
220
229
  light: LightSettings;
230
+ /** Wet engine: ghost paint settings (missing when not a ghost brush). */
231
+ ghost?: GhostSettings;
221
232
  /**
222
233
  * Dab engine: a stamp tip. Each dab (and each spray droplet) is this sticker's shape, an editor
223
234
  * stamp (`editor:star`) or any sticker ref from the sticker library, laid in the paint colour;
@@ -254,10 +265,12 @@ export interface SpraySettings {
254
265
  size: number;
255
266
  }
256
267
  export declare const DEFAULT_SPRAY: Readonly<SpraySettings>;
257
- export type PaintBrushInput = Partial<Omit<PaintBrush, 'tip' | 'dynamics' | 'mixer' | 'behavior' | 'blender' | 'smudge' | 'wet' | 'impasto' | 'particle' | 'bristle' | 'sticker' | 'paint' | 'light' | 'spray' | 'tipGrain'>> & {
268
+ export type PaintBrushInput = Partial<Omit<PaintBrush, 'tip' | 'dynamics' | 'mixer' | 'behavior' | 'blender' | 'smudge' | 'wet' | 'impasto' | 'particle' | 'bristle' | 'sticker' | 'paint' | 'light' | 'ghost' | 'spray' | 'tipGrain'>> & {
258
269
  spray?: Partial<SpraySettings> | null;
259
270
  /** Tip grain (`null` removes it). */
260
271
  tipGrain?: Partial<TipGrainSettings> | null;
272
+ /** Ghost paint (`null` removes it). */
273
+ ghost?: Partial<GhostSettings> | null;
261
274
  light?: Partial<LightSettings>;
262
275
  /** A gradient (or `null` for the editor's paint); a plain colour source clears it. */
263
276
  paint?: PaintSource | null;
@@ -94,6 +94,15 @@ export interface LightSettings {
94
94
  }
95
95
  export declare const DEFAULT_LIGHT: Readonly<LightSettings>;
96
96
  export declare function normalizeLight(raw?: Partial<LightSettings>, base?: LightSettings): LightSettings;
97
+ /** Ghost paint: wet paint whose colour vanishes after `linger` seconds, leaving only what it smeared. */
98
+ export interface GhostSettings {
99
+ /** Seconds of simulated time before the ghost paint has fully faded, 0.5..60 (default 4). */
100
+ linger: number;
101
+ /** How much the ghost paint drags and lifts the paint it passes through, 0..1 (default 0.3). */
102
+ smear: number;
103
+ }
104
+ export declare const DEFAULT_GHOST: Readonly<GhostSettings>;
105
+ export declare function normalizeGhost(raw?: Partial<GhostSettings>, base?: GhostSettings): GhostSettings;
97
106
  export declare function normalizeImpasto(raw?: Partial<ImpastoSettings>, base?: ImpastoSettings): ImpastoSettings;
98
107
  /** Multi-coloured brush: `tip` lays the colours across the tip, `dab` changes colour from dab to dab. */
99
108
  export type MultiColorMode = 'off' | 'tip' | 'dab';
@@ -218,6 +227,8 @@ export interface PaintBrush {
218
227
  sticker: StickerSettings;
219
228
  /** Light paint: the light it lays with its colour (amount 0: none). */
220
229
  light: LightSettings;
230
+ /** Wet engine: ghost paint settings (missing when not a ghost brush). */
231
+ ghost?: GhostSettings;
221
232
  /**
222
233
  * Dab engine: a stamp tip. Each dab (and each spray droplet) is this sticker's shape, an editor
223
234
  * stamp (`editor:star`) or any sticker ref from the sticker library, laid in the paint colour;
@@ -254,10 +265,12 @@ export interface SpraySettings {
254
265
  size: number;
255
266
  }
256
267
  export declare const DEFAULT_SPRAY: Readonly<SpraySettings>;
257
- export type PaintBrushInput = Partial<Omit<PaintBrush, 'tip' | 'dynamics' | 'mixer' | 'behavior' | 'blender' | 'smudge' | 'wet' | 'impasto' | 'particle' | 'bristle' | 'sticker' | 'paint' | 'light' | 'spray' | 'tipGrain'>> & {
268
+ export type PaintBrushInput = Partial<Omit<PaintBrush, 'tip' | 'dynamics' | 'mixer' | 'behavior' | 'blender' | 'smudge' | 'wet' | 'impasto' | 'particle' | 'bristle' | 'sticker' | 'paint' | 'light' | 'ghost' | 'spray' | 'tipGrain'>> & {
258
269
  spray?: Partial<SpraySettings> | null;
259
270
  /** Tip grain (`null` removes it). */
260
271
  tipGrain?: Partial<TipGrainSettings> | null;
272
+ /** Ghost paint (`null` removes it). */
273
+ ghost?: Partial<GhostSettings> | null;
261
274
  light?: Partial<LightSettings>;
262
275
  /** A gradient (or `null` for the editor's paint); a plain colour source clears it. */
263
276
  paint?: PaintSource | null;
@@ -378,6 +378,17 @@ export declare class PaintEditorController {
378
378
  private paintEpoch;
379
379
  /** Rendered effect paints by `effectPaintKey` (most recently used last). */
380
380
  private readonly effectPaintPixels;
381
+ /** Primary path control name (`format: 'svg-path'`) per effect id, learned from `describeEffect`. */
382
+ private readonly effectPathControls;
383
+ /** How many renders the running batch needs together (`prepareEffectPaints`; a synchronous replay reads them all). */
384
+ private effectPaintBatch;
385
+ /** The hand-painted stroke waiting for its path render (`finishPathStroke`), or `null`. */
386
+ private pathStroke;
387
+ /**
388
+ * The hand-painted path stroke's live preview: the effect rendered along the path drawn so far
389
+ * (one render at a time; the newest path when it lands), repainted into the stroke as it lands.
390
+ */
391
+ private pathPreview;
381
392
  private mixerLoad;
382
393
  private view;
383
394
  private hand;
@@ -739,7 +750,11 @@ export declare class PaintEditorController {
739
750
  layerId: string;
740
751
  source: PaintEffectSource;
741
752
  }>;
742
- /** At most this many rendered effect paints are kept (each is canvas-sized). */
753
+ /**
754
+ * At most this many rendered effect paints are kept (each is canvas-sized), more only while
755
+ * something needs them all: a replay's batch, and the path-mapped strokes on stroke layers,
756
+ * which each have a render of their own and are redrawn synchronously.
757
+ */
743
758
  private static readonly EFFECT_PAINT_CACHE;
744
759
  /** The effect paint strokes use (or the one rendering), or `null`. */
745
760
  getEffectPaint(): PaintEffectPaint | null;
@@ -748,8 +763,10 @@ export declare class PaintEditorController {
748
763
  * size, and brushes then take each pixel's colour (and alpha) from it, fixed to the canvas, as if
749
764
  * painting a hidden picture into view. `setColor` and `setPaint` go back to colour. Editor state,
750
765
  * not an undo step. Strokes that would paint with it throw while it renders. Returns the paint.
751
- * With `map: { by: 'stroke' }` the effect lies along each stroke instead of the canvas; with
752
- * `live`, strokes on a stroke layer keep playing it (see `setEffectPlayback`).
766
+ * With `map: { by: 'stroke' }` the effect lies along each stroke as a strip; with
767
+ * `map: { by: 'path' }` an effect with a path control (`format: 'svg-path'`) draws itself along
768
+ * each stroke's centreline in canvas pixels; with `live`, strokes on a stroke layer keep playing
769
+ * it (see `setEffectPlayback`).
753
770
  */
754
771
  setEffectPaint(source: {
755
772
  effect: string;
@@ -760,15 +777,47 @@ export declare class PaintEditorController {
760
777
  }): Promise<PaintEffectPaint>;
761
778
  /** The rendered pixels of an effect paint at the current canvas size, or `null` when it has not been rendered. */
762
779
  private effectPaintImage;
780
+ private cacheEffectPaintPixels;
781
+ private cacheEffectPaintImage;
782
+ private trimEffectPaints;
783
+ /** Renders an effect paint on the caller's stack when its renderer is warm and has `renderSync`; otherwise `null`. */
784
+ private renderEffectPaintSync;
763
785
  /** Renders an effect paint at the canvas size into the cache (nothing when it is there already). */
764
786
  private renderEffectPaint;
787
+ /** Renders an effect paint at the canvas size without keeping it. */
788
+ private renderEffectPaintPixels;
765
789
  /**
766
790
  * Renders effect paints that are not rendered yet (strokes and replays need them rendered
767
791
  * first, since strokes are synchronous). Throws naming the effect and provider when one cannot be.
768
792
  */
769
793
  prepareEffectPaints(paints: Iterable<PaintEffectPaint>): Promise<void>;
794
+ /**
795
+ * Renders the path-mapped effect paint for one or more strokes' points before a synchronous
796
+ * stroke call runs (`paint_stroke` and `stroke_path` do; `paintStroke` throws without it on a
797
+ * provider that can't render synchronously). For a stroke layer edit, see `prepareStrokeEdit`.
798
+ */
799
+ prepareStrokePathEffect(init: PaintStrokeInit, pointsList: readonly (readonly PenPoint[])[]): Promise<void>;
800
+ /**
801
+ * Renders what an edit of a stroke layer's stroke paints with (`updateStroke`, `editStrokePoints`):
802
+ * a new effect paint, or a path-mapped stroke's new path. Those calls are synchronous, and throw
803
+ * without it on a provider that can't render synchronously. Bad edits are left for them to refuse.
804
+ */
805
+ prepareStrokeEdit(id: string, edit: {
806
+ paint?: unknown;
807
+ points?: readonly PenPoint[];
808
+ transform?: StrokeVariation;
809
+ }): Promise<void>;
810
+ /** Whether `prepareStrokeEdit` has to be awaited before this edit can run. */
811
+ strokeEditNeedsRender(id: string, edit: {
812
+ paint?: unknown;
813
+ points?: readonly PenPoint[];
814
+ transform?: StrokeVariation;
815
+ }): boolean;
816
+ private strokeEditPaint;
817
+ /** A stroke edit's transform as an affine map, checked. */
818
+ private strokeTransform;
770
819
  /** Renders the effect paints of recorded strokes (default all of them) before a replay. */
771
- prepareStrokeEffects(strokeIds?: readonly string[]): Promise<void>;
820
+ prepareStrokeEffects(strokeIds?: readonly string[], variation?: ReplayOptions): Promise<void>;
772
821
  /** A small preview of the effect paint (a PNG data URL `size` px wide), or `null` without a rendered one. */
773
822
  effectPaintThumbnail(size?: number): string | null;
774
823
  /**
@@ -945,8 +994,30 @@ export declare class PaintEditorController {
945
994
  * (one undo step) or `cancel()`.
946
995
  */
947
996
  beginStroke(init?: PaintStrokeInit): PaintStrokeSession;
997
+ /**
998
+ * Renders a hand-painted path stroke's effect along the path drawn so far and paints the stroke
999
+ * again with it when it lands, so the effect follows the pen while it draws. One render at a
1000
+ * time: when one lands, the next takes the newest path. A failed render leaves the preview as it
1001
+ * was; the render on release reports it.
1002
+ */
1003
+ private previewPathStroke;
948
1004
  /** The current live stroke, if any. */
949
1005
  get activeStroke(): PaintStrokeSession | null;
1006
+ /**
1007
+ * While a hand-painted stroke waits for its path render (`map: { by: 'path' }`), settles when it
1008
+ * has landed and rejects if it could not (the stroke is dropped); `null` otherwise. Until then
1009
+ * the editor is busy, as during a stroke, and shows the stroke as it was painted.
1010
+ */
1011
+ get strokeRendering(): Promise<void> | null;
1012
+ /** The paint a finished hand-painted stroke must be painted again with, or `null` when it already painted with it. */
1013
+ private pathStrokePaint;
1014
+ /**
1015
+ * Ends a hand-painted stroke with a path-mapped effect. Its whole path isn't known until now, so
1016
+ * the live stroke was only a preview from renders along the path so far (`previewPathStroke`):
1017
+ * nothing of it was committed. Paints it again with the path's own render, as one stroke and one undo step, at
1018
+ * once if that can render synchronously and when the render lands if not.
1019
+ */
1020
+ private finishPathStroke;
950
1021
  /** Runs a whole stroke against `doc` without touching the editor; returns the new document. */
951
1022
  private runStroke;
952
1023
  /** Paints one stroke from data (one undo step). */
@@ -378,6 +378,17 @@ export declare class PaintEditorController {
378
378
  private paintEpoch;
379
379
  /** Rendered effect paints by `effectPaintKey` (most recently used last). */
380
380
  private readonly effectPaintPixels;
381
+ /** Primary path control name (`format: 'svg-path'`) per effect id, learned from `describeEffect`. */
382
+ private readonly effectPathControls;
383
+ /** How many renders the running batch needs together (`prepareEffectPaints`; a synchronous replay reads them all). */
384
+ private effectPaintBatch;
385
+ /** The hand-painted stroke waiting for its path render (`finishPathStroke`), or `null`. */
386
+ private pathStroke;
387
+ /**
388
+ * The hand-painted path stroke's live preview: the effect rendered along the path drawn so far
389
+ * (one render at a time; the newest path when it lands), repainted into the stroke as it lands.
390
+ */
391
+ private pathPreview;
381
392
  private mixerLoad;
382
393
  private view;
383
394
  private hand;
@@ -739,7 +750,11 @@ export declare class PaintEditorController {
739
750
  layerId: string;
740
751
  source: PaintEffectSource;
741
752
  }>;
742
- /** At most this many rendered effect paints are kept (each is canvas-sized). */
753
+ /**
754
+ * At most this many rendered effect paints are kept (each is canvas-sized), more only while
755
+ * something needs them all: a replay's batch, and the path-mapped strokes on stroke layers,
756
+ * which each have a render of their own and are redrawn synchronously.
757
+ */
743
758
  private static readonly EFFECT_PAINT_CACHE;
744
759
  /** The effect paint strokes use (or the one rendering), or `null`. */
745
760
  getEffectPaint(): PaintEffectPaint | null;
@@ -748,8 +763,10 @@ export declare class PaintEditorController {
748
763
  * size, and brushes then take each pixel's colour (and alpha) from it, fixed to the canvas, as if
749
764
  * painting a hidden picture into view. `setColor` and `setPaint` go back to colour. Editor state,
750
765
  * not an undo step. Strokes that would paint with it throw while it renders. Returns the paint.
751
- * With `map: { by: 'stroke' }` the effect lies along each stroke instead of the canvas; with
752
- * `live`, strokes on a stroke layer keep playing it (see `setEffectPlayback`).
766
+ * With `map: { by: 'stroke' }` the effect lies along each stroke as a strip; with
767
+ * `map: { by: 'path' }` an effect with a path control (`format: 'svg-path'`) draws itself along
768
+ * each stroke's centreline in canvas pixels; with `live`, strokes on a stroke layer keep playing
769
+ * it (see `setEffectPlayback`).
753
770
  */
754
771
  setEffectPaint(source: {
755
772
  effect: string;
@@ -760,15 +777,47 @@ export declare class PaintEditorController {
760
777
  }): Promise<PaintEffectPaint>;
761
778
  /** The rendered pixels of an effect paint at the current canvas size, or `null` when it has not been rendered. */
762
779
  private effectPaintImage;
780
+ private cacheEffectPaintPixels;
781
+ private cacheEffectPaintImage;
782
+ private trimEffectPaints;
783
+ /** Renders an effect paint on the caller's stack when its renderer is warm and has `renderSync`; otherwise `null`. */
784
+ private renderEffectPaintSync;
763
785
  /** Renders an effect paint at the canvas size into the cache (nothing when it is there already). */
764
786
  private renderEffectPaint;
787
+ /** Renders an effect paint at the canvas size without keeping it. */
788
+ private renderEffectPaintPixels;
765
789
  /**
766
790
  * Renders effect paints that are not rendered yet (strokes and replays need them rendered
767
791
  * first, since strokes are synchronous). Throws naming the effect and provider when one cannot be.
768
792
  */
769
793
  prepareEffectPaints(paints: Iterable<PaintEffectPaint>): Promise<void>;
794
+ /**
795
+ * Renders the path-mapped effect paint for one or more strokes' points before a synchronous
796
+ * stroke call runs (`paint_stroke` and `stroke_path` do; `paintStroke` throws without it on a
797
+ * provider that can't render synchronously). For a stroke layer edit, see `prepareStrokeEdit`.
798
+ */
799
+ prepareStrokePathEffect(init: PaintStrokeInit, pointsList: readonly (readonly PenPoint[])[]): Promise<void>;
800
+ /**
801
+ * Renders what an edit of a stroke layer's stroke paints with (`updateStroke`, `editStrokePoints`):
802
+ * a new effect paint, or a path-mapped stroke's new path. Those calls are synchronous, and throw
803
+ * without it on a provider that can't render synchronously. Bad edits are left for them to refuse.
804
+ */
805
+ prepareStrokeEdit(id: string, edit: {
806
+ paint?: unknown;
807
+ points?: readonly PenPoint[];
808
+ transform?: StrokeVariation;
809
+ }): Promise<void>;
810
+ /** Whether `prepareStrokeEdit` has to be awaited before this edit can run. */
811
+ strokeEditNeedsRender(id: string, edit: {
812
+ paint?: unknown;
813
+ points?: readonly PenPoint[];
814
+ transform?: StrokeVariation;
815
+ }): boolean;
816
+ private strokeEditPaint;
817
+ /** A stroke edit's transform as an affine map, checked. */
818
+ private strokeTransform;
770
819
  /** Renders the effect paints of recorded strokes (default all of them) before a replay. */
771
- prepareStrokeEffects(strokeIds?: readonly string[]): Promise<void>;
820
+ prepareStrokeEffects(strokeIds?: readonly string[], variation?: ReplayOptions): Promise<void>;
772
821
  /** A small preview of the effect paint (a PNG data URL `size` px wide), or `null` without a rendered one. */
773
822
  effectPaintThumbnail(size?: number): string | null;
774
823
  /**
@@ -945,8 +994,30 @@ export declare class PaintEditorController {
945
994
  * (one undo step) or `cancel()`.
946
995
  */
947
996
  beginStroke(init?: PaintStrokeInit): PaintStrokeSession;
997
+ /**
998
+ * Renders a hand-painted path stroke's effect along the path drawn so far and paints the stroke
999
+ * again with it when it lands, so the effect follows the pen while it draws. One render at a
1000
+ * time: when one lands, the next takes the newest path. A failed render leaves the preview as it
1001
+ * was; the render on release reports it.
1002
+ */
1003
+ private previewPathStroke;
948
1004
  /** The current live stroke, if any. */
949
1005
  get activeStroke(): PaintStrokeSession | null;
1006
+ /**
1007
+ * While a hand-painted stroke waits for its path render (`map: { by: 'path' }`), settles when it
1008
+ * has landed and rejects if it could not (the stroke is dropped); `null` otherwise. Until then
1009
+ * the editor is busy, as during a stroke, and shows the stroke as it was painted.
1010
+ */
1011
+ get strokeRendering(): Promise<void> | null;
1012
+ /** The paint a finished hand-painted stroke must be painted again with, or `null` when it already painted with it. */
1013
+ private pathStrokePaint;
1014
+ /**
1015
+ * Ends a hand-painted stroke with a path-mapped effect. Its whole path isn't known until now, so
1016
+ * the live stroke was only a preview from renders along the path so far (`previewPathStroke`):
1017
+ * nothing of it was committed. Paints it again with the path's own render, as one stroke and one undo step, at
1018
+ * once if that can render synchronously and when the render lands if not.
1019
+ */
1020
+ private finishPathStroke;
950
1021
  /** Runs a whole stroke against `doc` without touching the editor; returns the new document. */
951
1022
  private runStroke;
952
1023
  /** Paints one stroke from data (one undo step). */