@pixerate/editor 0.137.0 → 0.138.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 (110) hide show
  1. package/dist/agent/index.cjs +2 -2
  2. package/dist/agent/index.d.cts +3 -3
  3. package/dist/agent/index.d.ts +3 -3
  4. package/dist/agent/index.js +1 -1
  5. package/dist/animation-editor/index.cjs +57 -57
  6. package/dist/animation-editor/index.d.cts +3 -3
  7. package/dist/animation-editor/index.d.ts +3 -3
  8. package/dist/animation-editor/index.js +4 -4
  9. package/dist/{arrange-CKXK_hf7.d.cts → arrange-j_mLiFMO.d.cts} +1 -1
  10. package/dist/{arrange-BUREmgD9.d.ts → arrange-q5HQvnnB.d.ts} +1 -1
  11. package/dist/{bezier-CZ2AhjID.d.cts → bezier-CUaH8hcK.d.cts} +1 -1
  12. package/dist/{bezier-Dywv3Bw8.d.ts → bezier-DPmdGwgR.d.ts} +1 -1
  13. package/dist/{brushTypes-C7N3EBK7.d.cts → brushTypes-MX5UVs_m.d.cts} +27 -2
  14. package/dist/{brushTypes-C7N3EBK7.d.ts → brushTypes-MX5UVs_m.d.ts} +27 -2
  15. package/dist/{brushes-DJmUbIgz.d.ts → brushes-B1ABdDAs.d.ts} +2 -108
  16. package/dist/{brushes-CnvZSYYU.d.cts → brushes-DnIdJYxN.d.cts} +2 -108
  17. package/dist/{brushstrokeRender-IMFY3FF6.cjs → brushstrokeRender-PP6NTF6M.cjs} +52 -24
  18. package/dist/brushstrokeRender-PP6NTF6M.cjs.map +1 -0
  19. package/dist/{brushstrokeRender-2FAXA3XC.js → brushstrokeRender-QGEYJ4OZ.js} +40 -12
  20. package/dist/brushstrokeRender-QGEYJ4OZ.js.map +1 -0
  21. package/dist/{builtins-Cc-bH-3U.d.cts → builtins-BakDiKWf.d.cts} +3 -2
  22. package/dist/{builtins-ZU1GJnUA.d.ts → builtins-CE33vyv2.d.ts} +3 -2
  23. package/dist/canvas/index.cjs +16 -9
  24. package/dist/canvas/index.cjs.map +1 -1
  25. package/dist/canvas/index.d.cts +56 -11
  26. package/dist/canvas/index.d.ts +56 -11
  27. package/dist/canvas/index.js +10 -3
  28. package/dist/canvas/index.js.map +1 -1
  29. package/dist/{chunk-QBWEH3IM.cjs → chunk-3T5O225T.cjs} +391 -76
  30. package/dist/chunk-3T5O225T.cjs.map +1 -0
  31. package/dist/{chunk-PRSRYHQD.cjs → chunk-7MN75BXI.cjs} +36 -36
  32. package/dist/{chunk-PRSRYHQD.cjs.map → chunk-7MN75BXI.cjs.map} +1 -1
  33. package/dist/{chunk-EQQMGO42.js → chunk-C2J7GOMJ.js} +18 -5
  34. package/dist/chunk-C2J7GOMJ.js.map +1 -0
  35. package/dist/{chunk-2XS6LTUP.cjs → chunk-C46AZEBE.cjs} +104 -339
  36. package/dist/chunk-C46AZEBE.cjs.map +1 -0
  37. package/dist/{chunk-XN2NBLV5.cjs → chunk-CM3LJPR3.cjs} +82 -82
  38. package/dist/{chunk-XN2NBLV5.cjs.map → chunk-CM3LJPR3.cjs.map} +1 -1
  39. package/dist/{chunk-HUO3TI4C.js → chunk-CPSMARTX.js} +6 -241
  40. package/dist/chunk-CPSMARTX.js.map +1 -0
  41. package/dist/{chunk-KEENUAFN.cjs → chunk-DLLUOVQX.cjs} +18 -5
  42. package/dist/chunk-DLLUOVQX.cjs.map +1 -0
  43. package/dist/{chunk-LSXXAJG3.js → chunk-J7DSKTKB.js} +5 -4
  44. package/dist/chunk-J7DSKTKB.js.map +1 -0
  45. package/dist/{chunk-6S6362D2.js → chunk-OV7253FC.js} +2 -2
  46. package/dist/{chunk-5FSRTP6E.js → chunk-PQFVLOMR.js} +319 -4
  47. package/dist/chunk-PQFVLOMR.js.map +1 -0
  48. package/dist/{chunk-OIBIRXRG.js → chunk-PSPLRQL6.js} +2 -2
  49. package/dist/{chunk-SYT2TLQF.js → chunk-QBARQGSG.js} +2 -2
  50. package/dist/{chunk-5OOIUXNJ.cjs → chunk-SXOTFV3V.cjs} +6 -6
  51. package/dist/{chunk-5OOIUXNJ.cjs.map → chunk-SXOTFV3V.cjs.map} +1 -1
  52. package/dist/{chunk-DFSZO2B5.cjs → chunk-UFL5N4DK.cjs} +5 -4
  53. package/dist/chunk-UFL5N4DK.cjs.map +1 -0
  54. package/dist/{chunk-3D77LOBM.js → chunk-V45ZTW4R.js} +3 -3
  55. package/dist/{chunk-TLCTTQFF.cjs → chunk-VEHVXRJU.cjs} +17 -17
  56. package/dist/{chunk-TLCTTQFF.cjs.map → chunk-VEHVXRJU.cjs.map} +1 -1
  57. package/dist/commands/index.cjs +2 -2
  58. package/dist/commands/index.d.cts +3 -3
  59. package/dist/commands/index.d.ts +3 -3
  60. package/dist/commands/index.js +1 -1
  61. package/dist/{export-DwnZ_hvQ.d.ts → export-BwFRiItd.d.ts} +4 -4
  62. package/dist/{export-CyJdfP_Z.d.cts → export-DuN3dpCg.d.cts} +4 -4
  63. package/dist/{blending-NgF3qo3d.d.ts → grain-COgYMMHv.d.ts} +58 -1
  64. package/dist/{blending-D7jCmjO6.d.cts → grain-GCt_O2kv.d.cts} +58 -1
  65. package/dist/image-editor/index.cjs +695 -677
  66. package/dist/image-editor/index.cjs.map +1 -1
  67. package/dist/image-editor/index.d.cts +11 -11
  68. package/dist/image-editor/index.d.ts +11 -11
  69. package/dist/image-editor/index.js +23 -5
  70. package/dist/image-editor/index.js.map +1 -1
  71. package/dist/{opentype-a1KAW-qs.d.ts → opentype-T7bkbR2D.d.ts} +1 -1
  72. package/dist/{opentype-KR_jj6b_.d.cts → opentype-n99lqxEZ.d.cts} +1 -1
  73. package/dist/paint/index.cjs +21 -3
  74. package/dist/paint/index.cjs.map +1 -1
  75. package/dist/paint/index.d.cts +72 -7
  76. package/dist/paint/index.d.ts +72 -7
  77. package/dist/paint/index.js +20 -2
  78. package/dist/paint-editor/index.cjs +171 -171
  79. package/dist/paint-editor/index.cjs.map +1 -1
  80. package/dist/paint-editor/index.d.cts +75 -29
  81. package/dist/paint-editor/index.d.ts +75 -29
  82. package/dist/paint-editor/index.js +12 -12
  83. package/dist/{pathfinder-BHS4vQNm.d.cts → pathfinder-CQlldanv.d.cts} +2 -2
  84. package/dist/{pathfinder-BVvTIBMo.d.ts → pathfinder-D-V6JLSw.d.ts} +2 -2
  85. package/dist/{rand-Cw9VLrVC.d.cts → rand-D7nfeD1p.d.cts} +18 -2
  86. package/dist/{rand-8xbUb6ur.d.ts → rand-DJGxSq9d.d.ts} +18 -2
  87. package/dist/{svg-CSz3mzkw.d.ts → svg-CnDCpIy9.d.ts} +1 -1
  88. package/dist/{svg-DTb40ICU.d.cts → svg-DPJMUSNt.d.cts} +1 -1
  89. package/dist/vector/index.cjs +944 -944
  90. package/dist/vector/index.d.cts +10 -10
  91. package/dist/vector/index.d.ts +10 -10
  92. package/dist/vector/index.js +4 -4
  93. package/dist/{warp-DTOp0lON.d.cts → warp-C7rMWUgW.d.cts} +1 -1
  94. package/dist/{warp-pd7hrH4T.d.ts → warp-Doasjpyr.d.ts} +1 -1
  95. package/package.json +1 -1
  96. package/skills/pixerate-canvas/SKILL.md +12 -5
  97. package/dist/brushstrokeRender-2FAXA3XC.js.map +0 -1
  98. package/dist/brushstrokeRender-IMFY3FF6.cjs.map +0 -1
  99. package/dist/chunk-2XS6LTUP.cjs.map +0 -1
  100. package/dist/chunk-5FSRTP6E.js.map +0 -1
  101. package/dist/chunk-DFSZO2B5.cjs.map +0 -1
  102. package/dist/chunk-EQQMGO42.js.map +0 -1
  103. package/dist/chunk-HUO3TI4C.js.map +0 -1
  104. package/dist/chunk-KEENUAFN.cjs.map +0 -1
  105. package/dist/chunk-LSXXAJG3.js.map +0 -1
  106. package/dist/chunk-QBWEH3IM.cjs.map +0 -1
  107. /package/dist/{chunk-6S6362D2.js.map → chunk-OV7253FC.js.map} +0 -0
  108. /package/dist/{chunk-OIBIRXRG.js.map → chunk-PSPLRQL6.js.map} +0 -0
  109. /package/dist/{chunk-SYT2TLQF.js.map → chunk-QBARQGSG.js.map} +0 -0
  110. /package/dist/{chunk-3D77LOBM.js.map → chunk-V45ZTW4R.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { H as Homography, V as Vec2, B as Box, Q as Quad, A as AffineMatrix } from './types-CwMPoRMU.js';
2
- import { T as TextShaper, a as TextFont } from './warp-pd7hrH4T.js';
2
+ import { T as TextShaper, a as TextFont } from './warp-Doasjpyr.js';
3
3
 
4
4
  /**
5
5
  * Perspective (projective) maps between quadrilaterals: Free Distort and Perspective in both the
@@ -1,5 +1,5 @@
1
1
  import { H as Homography, V as Vec2, B as Box, Q as Quad, A as AffineMatrix } from './types-CwMPoRMU.cjs';
2
- import { T as TextShaper, a as TextFont } from './warp-DTOp0lON.cjs';
2
+ import { T as TextShaper, a as TextFont } from './warp-C7rMWUgW.cjs';
3
3
 
4
4
  /**
5
5
  * Perspective (projective) maps between quadrilaterals: Free Distort and Perspective in both the
@@ -36,7 +36,7 @@
36
36
 
37
37
 
38
38
 
39
- var _chunkTLCTTQFFcjs = require('../chunk-TLCTTQFF.cjs');
39
+ var _chunkVEHVXRJUcjs = require('../chunk-VEHVXRJU.cjs');
40
40
 
41
41
 
42
42
 
@@ -215,7 +215,16 @@ var _chunkF2Y4E4GUcjs = require('../chunk-F2Y4E4GU.cjs');
215
215
 
216
216
 
217
217
 
218
- var _chunkQBWEH3IMcjs = require('../chunk-QBWEH3IM.cjs');
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+ var _chunk3T5O225Tcjs = require('../chunk-3T5O225T.cjs');
219
228
 
220
229
 
221
230
 
@@ -462,5 +471,14 @@ require('../chunk-643B2HKC.cjs');
462
471
 
463
472
 
464
473
 
465
- exports.BODY_SCATTER = _chunkF2Y4E4GUcjs.BODY_SCATTER; exports.BRUSHSTROKE_MAX_SCALE = _chunkSYPFUL5Bcjs.BRUSHSTROKE_MAX_SCALE; exports.BRUSHSTROKE_MIN_SCALE = _chunkSYPFUL5Bcjs.BRUSHSTROKE_MIN_SCALE; exports.BrushstrokeCache = _chunkQBWEH3IMcjs.BrushstrokeCache; exports.CoverageMap = _chunkQBWEH3IMcjs.CoverageMap; exports.DEFAULT_BLENDER = _chunkQBWEH3IMcjs.DEFAULT_BLENDER; exports.DEFAULT_BRUSH = _chunkQBWEH3IMcjs.DEFAULT_BRUSH; exports.DEFAULT_FLOW = _chunkF2Y4E4GUcjs.DEFAULT_FLOW; exports.DEFAULT_MIXER = _chunkQBWEH3IMcjs.DEFAULT_MIXER; exports.DEFAULT_PAINT_GRADIENT = _chunkQBWEH3IMcjs.DEFAULT_PAINT_GRADIENT; exports.DEFAULT_PAINT_GRADIENT_MAPPING = _chunkQBWEH3IMcjs.DEFAULT_PAINT_GRADIENT_MAPPING; exports.DEFAULT_RETOUCH = _chunkTLCTTQFFcjs.DEFAULT_RETOUCH; exports.DEFAULT_SMUDGE = _chunkQBWEH3IMcjs.DEFAULT_SMUDGE; exports.DEFAULT_WET_PAPER = _chunkF2Y4E4GUcjs.DEFAULT_WET_PAPER; exports.DEFAULT_WET_PARAMS = _chunkF2Y4E4GUcjs.DEFAULT_WET_PARAMS; exports.DRY_EPS = _chunkF2Y4E4GUcjs.DRY_EPS; exports.DabWalker = _chunkQBWEH3IMcjs.DabWalker; exports.EMPTY_MIXER_LOAD = _chunkQBWEH3IMcjs.EMPTY_MIXER_LOAD; exports.EX = _chunkF2Y4E4GUcjs.EX; exports.EY = _chunkF2Y4E4GUcjs.EY; exports.FLAG_ALIVE = _chunkF2Y4E4GUcjs.FLAG_ALIVE; exports.FLAG_BOTTOM = _chunkF2Y4E4GUcjs.FLAG_BOTTOM; exports.FLAG_LEFT = _chunkF2Y4E4GUcjs.FLAG_LEFT; exports.FLAG_RIGHT = _chunkF2Y4E4GUcjs.FLAG_RIGHT; exports.FLAG_TOP = _chunkF2Y4E4GUcjs.FLAG_TOP; exports.FLAG_WET = _chunkF2Y4E4GUcjs.FLAG_WET; exports.FLAT = _chunkF2Y4E4GUcjs.FLAT; exports.FREE_INTERVAL = _chunkF2Y4E4GUcjs.FREE_INTERVAL; exports.HIDE = _chunkF2Y4E4GUcjs.HIDE; exports.IDENTITY_CLONE_TRANSFORM = _chunkTLCTTQFFcjs.IDENTITY_CLONE_TRANSFORM; exports.MAX_BATCH = _chunkF2Y4E4GUcjs.MAX_BATCH; exports.MAX_BRUSH_SIZE = _chunkQBWEH3IMcjs.MAX_BRUSH_SIZE; exports.MAX_TILT_ACCEL = _chunkF2Y4E4GUcjs.MAX_TILT_ACCEL; exports.MAX_WET_LANES = _chunkF2Y4E4GUcjs.MAX_WET_LANES; exports.MAX_WET_SLOTS = _chunkF2Y4E4GUcjs.MAX_WET_SLOTS; exports.MIXER_DRAIN = _chunkQBWEH3IMcjs.MIXER_DRAIN; exports.MIXER_PICKUP_RATE = _chunkQBWEH3IMcjs.MIXER_PICKUP_RATE; exports.MIXING_MODELS = _chunkQBWEH3IMcjs.MIXING_MODELS; exports.MixerStroke = _chunkQBWEH3IMcjs.MixerStroke; exports.OPP = _chunkF2Y4E4GUcjs.OPP; exports.PAINT_COLOR_JSON_SCHEMA = _chunkQBWEH3IMcjs.PAINT_COLOR_JSON_SCHEMA; exports.PAINT_GRADIENT_FULL_SPEED = _chunkQBWEH3IMcjs.PAINT_GRADIENT_FULL_SPEED; exports.PAINT_GRADIENT_JSON_SCHEMA = _chunkQBWEH3IMcjs.PAINT_GRADIENT_JSON_SCHEMA; exports.PAINT_GRADIENT_KIT = _chunkQBWEH3IMcjs.PAINT_GRADIENT_KIT; exports.PAINT_GRADIENT_MAPPINGS = _chunkQBWEH3IMcjs.PAINT_GRADIENT_MAPPINGS; exports.PAINT_GRADIENT_MAPPING_LABELS = _chunkQBWEH3IMcjs.PAINT_GRADIENT_MAPPING_LABELS; exports.PAINT_GRADIENT_PRESETS = _chunkQBWEH3IMcjs.PAINT_GRADIENT_PRESETS; exports.PAINT_GRADIENT_REPEATS = _chunkQBWEH3IMcjs.PAINT_GRADIENT_REPEATS; exports.PAINT_GRADIENT_REPEAT_LABELS = _chunkQBWEH3IMcjs.PAINT_GRADIENT_REPEAT_LABELS; exports.PAINT_GRADIENT_SPACES = _chunkQBWEH3IMcjs.PAINT_GRADIENT_SPACES; exports.PAINT_GRADIENT_SPACE_LABELS = _chunkQBWEH3IMcjs.PAINT_GRADIENT_SPACE_LABELS; exports.PAINT_SOURCE_JSON_SCHEMA = _chunkQBWEH3IMcjs.PAINT_SOURCE_JSON_SCHEMA; exports.PAPER_CAPACITY = _chunkF2Y4E4GUcjs.PAPER_CAPACITY; exports.PARAM = _chunkF2Y4E4GUcjs.PARAM; exports.PARAM_FLOATS = _chunkF2Y4E4GUcjs.PARAM_FLOATS; exports.PIGMENT_BANDS = _chunkO7LUD7MHcjs.PIGMENT_BANDS; exports.PIGMENT_CHANNELS = _chunkF2Y4E4GUcjs.PIGMENT_CHANNELS; exports.PIGMENT_LAMBDA_MIN = _chunkO7LUD7MHcjs.PIGMENT_LAMBDA_MIN; exports.PIGMENT_LAMBDA_STEP = _chunkO7LUD7MHcjs.PIGMENT_LAMBDA_STEP; exports.PIGMENT_UNIT = _chunkF2Y4E4GUcjs.PIGMENT_UNIT; exports.PIGMENT_WAVELENGTHS = _chunkO7LUD7MHcjs.PIGMENT_WAVELENGTHS; exports.PLANE = _chunkF2Y4E4GUcjs.PLANE; exports.PLANE_BYTES = _chunkF2Y4E4GUcjs.PLANE_BYTES; exports.P_D0 = _chunkF2Y4E4GUcjs.P_D0; exports.P_EDGE = _chunkF2Y4E4GUcjs.P_EDGE; exports.P_FX = _chunkF2Y4E4GUcjs.P_FX; exports.P_FY = _chunkF2Y4E4GUcjs.P_FY; exports.P_H = _chunkF2Y4E4GUcjs.P_H; exports.P_P0 = _chunkF2Y4E4GUcjs.P_P0; exports.P_RHO = _chunkF2Y4E4GUcjs.P_RHO; exports.P_SW = _chunkF2Y4E4GUcjs.P_SW; exports.P_UX = _chunkF2Y4E4GUcjs.P_UX; exports.P_UY = _chunkF2Y4E4GUcjs.P_UY; exports.PaintExchange = _chunkQBWEH3IMcjs.PaintExchange; exports.PaintGradientSampler = _chunkQBWEH3IMcjs.PaintGradientSampler; exports.PaintSourceError = _chunkQBWEH3IMcjs.PaintSourceError; exports.RETOUCH_SAMPLES = _chunkTLCTTQFFcjs.RETOUCH_SAMPLES; exports.RegionPixelSource = _chunkTLCTTQFFcjs.RegionPixelSource; exports.RetouchDabStroke = _chunkTLCTTQFFcjs.RetouchDabStroke; exports.SET_PLANES = _chunkF2Y4E4GUcjs.SET_PLANES; exports.SLOT_BYTES = _chunkF2Y4E4GUcjs.SLOT_BYTES; exports.SLOT_PLANES = _chunkF2Y4E4GUcjs.SLOT_PLANES; exports.SLOT_SIDE = _chunkF2Y4E4GUcjs.SLOT_SIDE; exports.SPOT_HEAL_TYPES = _chunkTLCTTQFFcjs.SPOT_HEAL_TYPES; exports.SRGB_TO_LINEAR = _chunkF2Y4E4GUcjs.SRGB_TO_LINEAR; exports.STRIP = _chunkF2Y4E4GUcjs.STRIP; exports.SmudgeTip = _chunkQBWEH3IMcjs.SmudgeTip; exports.StrokeCoverage = _chunkQBWEH3IMcjs.StrokeCoverage; exports.TIP_GRADIENT_STEPS = _chunkQBWEH3IMcjs.TIP_GRADIENT_STEPS; exports.TONE_RANGES = _chunkTLCTTQFFcjs.TONE_RANGES; exports.TileMedium = _chunkQBWEH3IMcjs.TileMedium; exports.TilePixelSource = _chunkTLCTTQFFcjs.TilePixelSource; exports.TransformedPixelSource = _chunkTLCTTQFFcjs.TransformedPixelSource; exports.U_MAX = _chunkF2Y4E4GUcjs.U_MAX; exports.W9 = _chunkF2Y4E4GUcjs.W9; exports.WET_FLOW_KINDS = _chunkF2Y4E4GUcjs.WET_FLOW_KINDS; exports.WET_PARAM_KEYS = _chunkF2Y4E4GUcjs.WET_PARAM_KEYS; exports.WET_TILE = _chunkF2Y4E4GUcjs.WET_TILE; exports.WGSL_HALO = _chunkF2Y4E4GUcjs.WGSL_HALO; exports.WGSL_SHADE = _chunkF2Y4E4GUcjs.WGSL_SHADE; exports.WGSL_STEP = _chunkF2Y4E4GUcjs.WGSL_STEP; exports.WetGpuEngine = _chunkF2Y4E4GUcjs.WetGpuEngine; exports.WetMedium = _chunkF2Y4E4GUcjs.WetMedium; exports.WetWorkerPool = _chunkF2Y4E4GUcjs.WetWorkerPool; exports.WetWorld = _chunkF2Y4E4GUcjs.WetWorld; exports.WetWorldError = _chunkF2Y4E4GUcjs.WetWorldError; exports.addPaintGradientStop = _chunkQBWEH3IMcjs.addPaintGradientStop; exports.applyRetouchToTile = _chunkTLCTTQFFcjs.applyRetouchToTile; exports.applyStrokeToDeepTile = _chunkQBWEH3IMcjs.applyStrokeToDeepTile; exports.applyStrokeToTile = _chunkQBWEH3IMcjs.applyStrokeToTile; exports.applyToneToDeepTile = _chunkTLCTTQFFcjs.applyToneToDeepTile; exports.bestOffset = _chunkTLCTTQFFcjs.bestOffset; exports.blendRadius = _chunkQBWEH3IMcjs.blendRadius; exports.blenderDab = _chunkQBWEH3IMcjs.blenderDab; exports.boxBlurPixels = _chunkTLCTTQFFcjs.boxBlurPixels; exports.brushstrokeDataUrl = _chunkQBWEH3IMcjs.brushstrokeDataUrl; exports.brushstrokeKey = _chunkQBWEH3IMcjs.brushstrokeKey; exports.brushstrokeSamples = _chunkQBWEH3IMcjs.brushstrokeSamples; exports.brushstrokeScaleBucket = _chunkSYPFUL5Bcjs.brushstrokeScaleBucket; exports.brushstrokeStrokeOptions = _chunkQBWEH3IMcjs.brushstrokeStrokeOptions; exports.brushstrokeToCanvas = _chunkQBWEH3IMcjs.brushstrokeToCanvas; exports.canShareMemory = _chunkF2Y4E4GUcjs.canShareMemory; exports.cleanMixer = _chunkQBWEH3IMcjs.cleanMixer; exports.cloneSamplePoint = _chunkTLCTTQFFcjs.cloneSamplePoint; exports.contentAwareFill = _chunkTLCTTQFFcjs.contentAwareFill; exports.coverageTileCoord = _chunkQBWEH3IMcjs.coverageTileCoord; exports.createBlenderScratch = _chunkQBWEH3IMcjs.createBlenderScratch; exports.createPigment = _chunkO7LUD7MHcjs.createPigment; exports.createPigmentTools = _chunkF2Y4E4GUcjs.createPigmentTools; exports.createWetGpuEngine = _chunkF2Y4E4GUcjs.createWetGpuEngine; exports.dabCoverage = _chunkQBWEH3IMcjs.dabCoverage; exports.dabRect = _chunkQBWEH3IMcjs.dabRect; exports.dexp = _chunkF2Y4E4GUcjs.dexp; exports.dilateMask = _chunkTLCTTQFFcjs.dilateMask; exports.dlog = _chunkF2Y4E4GUcjs.dlog; exports.dodgeBurn = _chunkTLCTTQFFcjs.dodgeBurn; exports.dodgeBurnCurve = _chunkTLCTTQFFcjs.dodgeBurnCurve; exports.dpow = _chunkF2Y4E4GUcjs.dpow; exports.dsincos = _chunkF2Y4E4GUcjs.dsincos; exports.edgeBits = _chunkF2Y4E4GUcjs.edgeBits; exports.exchangeRates = _chunkQBWEH3IMcjs.exchangeRates; exports.expNeg = _chunkF2Y4E4GUcjs.expNeg; exports.filmPixel = _chunkF2Y4E4GUcjs.filmPixel; exports.filmReflectance = _chunkF2Y4E4GUcjs.filmReflectance; exports.findWebGpu = _chunkF2Y4E4GUcjs.findWebGpu; exports.flowField = _chunkF2Y4E4GUcjs.flowField; exports.gradientDabColor = _chunkQBWEH3IMcjs.gradientDabColor; exports.hash2 = _chunkQBWEH3IMcjs.hash2; exports.healPixels = _chunkTLCTTQFFcjs.healPixels; exports.hexToPaintRgb = _chunkQBWEH3IMcjs.hexToPaintRgb; exports.isBrushstrokeBrush = _chunkQBWEH3IMcjs.isBrushstrokeBrush; exports.isGradientPaint = _chunkQBWEH3IMcjs.isGradientPaint; exports.isIdentityCloneTransform = _chunkTLCTTQFFcjs.isIdentityCloneTransform; exports.latticeViscosity = _chunkF2Y4E4GUcjs.latticeViscosity; exports.lerpPigment = _chunkO7LUD7MHcjs.lerpPigment; exports.lerpPigmentInto = _chunkO7LUD7MHcjs.lerpPigmentInto; exports.linearToSrgb8 = _chunkF2Y4E4GUcjs.linearToSrgb8; exports.loadMixer = _chunkQBWEH3IMcjs.loadMixer; exports.loadWetKernel = _chunkF2Y4E4GUcjs.loadWetKernel; exports.luma = _chunkTLCTTQFFcjs.luma; exports.maskBounds = _chunkTLCTTQFFcjs.maskBounds; exports.membraneFill = _chunkTLCTTQFFcjs.membraneFill; exports.mix32 = _chunkQBWEH3IMcjs.mix32; exports.mixPigments = _chunkO7LUD7MHcjs.mixPigments; exports.mixerRates = _chunkQBWEH3IMcjs.mixerRates; exports.normalizeBlender = _chunkQBWEH3IMcjs.normalizeBlender; exports.normalizeBrush = _chunkQBWEH3IMcjs.normalizeBrush; exports.normalizeFlow = _chunkF2Y4E4GUcjs.normalizeFlow; exports.normalizeHexColor = _chunkQBWEH3IMcjs.normalizeHexColor; exports.normalizeMixer = _chunkQBWEH3IMcjs.normalizeMixer; exports.normalizeRetouch = _chunkTLCTTQFFcjs.normalizeRetouch; exports.normalizeSmudge = _chunkQBWEH3IMcjs.normalizeSmudge; exports.normalizeTilt = _chunkF2Y4E4GUcjs.normalizeTilt; exports.normalizeWetParams = _chunkF2Y4E4GUcjs.normalizeWetParams; exports.packWetParams = _chunkF2Y4E4GUcjs.packWetParams; exports.paintGradientMappingFor = _chunkQBWEH3IMcjs.paintGradientMappingFor; exports.paintPathStroke = _chunkQBWEH3IMcjs.paintPathStroke; exports.paintSourceColor = _chunkQBWEH3IMcjs.paintSourceColor; exports.paintSourceCss = _chunkQBWEH3IMcjs.paintSourceCss; exports.parsePaintSource = _chunkQBWEH3IMcjs.parsePaintSource; exports.pathStrokeCoverage = _chunkQBWEH3IMcjs.pathStrokeCoverage; exports.pathStrokeDabs = _chunkQBWEH3IMcjs.pathStrokeDabs; exports.perDabStrength = _chunkTLCTTQFFcjs.perDabStrength; exports.pigmentColor = _chunkF2Y4E4GUcjs.pigmentColor; exports.pigmentOf = _chunkF2Y4E4GUcjs.pigmentOf; exports.pixelPigment = _chunkF2Y4E4GUcjs.pixelPigment; exports.pointerPressure = _chunkF2Y4E4GUcjs.pointerPressure; exports.pointerStrokeSample = _chunkF2Y4E4GUcjs.pointerStrokeSample; exports.pointerStrokeSamples = _chunkF2Y4E4GUcjs.pointerStrokeSamples; exports.put255 = _chunkQBWEH3IMcjs.put255; exports.rand01 = _chunkQBWEH3IMcjs.rand01; exports.rasterizeDab = _chunkQBWEH3IMcjs.rasterizeDab; exports.readPaintSource = _chunkQBWEH3IMcjs.readPaintSource; exports.readSourceRegion = _chunkTLCTTQFFcjs.readSourceRegion; exports.reflectanceToRgb = _chunkO7LUD7MHcjs.reflectanceToRgb; exports.removePaintGradientStop = _chunkQBWEH3IMcjs.removePaintGradientStop; exports.renderBrushstroke = _chunkQBWEH3IMcjs.renderBrushstroke; exports.resolvePaintGradient = _chunkQBWEH3IMcjs.resolvePaintGradient; exports.retouchFilter = _chunkTLCTTQFFcjs.retouchFilter; exports.reversePaintGradient = _chunkQBWEH3IMcjs.reversePaintGradient; exports.rgbToReflectance = _chunkO7LUD7MHcjs.rgbToReflectance; exports.rgbaViewOfGrey = _chunkTLCTTQFFcjs.rgbaViewOfGrey; exports.saturationOf = _chunkTLCTTQFFcjs.saturationOf; exports.scalePaintGradient = _chunkQBWEH3IMcjs.scalePaintGradient; exports.seamlessClone = _chunkTLCTTQFFcjs.seamlessClone; exports.setPigmentColor = _chunkO7LUD7MHcjs.setPigmentColor; exports.shadeTile = _chunkF2Y4E4GUcjs.shadeTile; exports.smoothPoints = _chunkQBWEH3IMcjs.smoothPoints; exports.smudgeEffect = _chunkTLCTTQFFcjs.smudgeEffect; exports.solidPaint = _chunkQBWEH3IMcjs.solidPaint; exports.solveMembrane = _chunkTLCTTQFFcjs.solveMembrane; exports.sponge = _chunkTLCTTQFFcjs.sponge; exports.spongeEffect = _chunkTLCTTQFFcjs.spongeEffect; exports.spotHealPixels = _chunkTLCTTQFFcjs.spotHealPixels; exports.spotHealWindow = _chunkTLCTTQFFcjs.spotHealWindow; exports.srgbByteToLinear = _chunkF2Y4E4GUcjs.srgbByteToLinear; exports.stepSlotTs = _chunkF2Y4E4GUcjs.stepSlotTs; exports.tipFalloff = _chunkQBWEH3IMcjs.tipFalloff; exports.tipReach = _chunkQBWEH3IMcjs.tipReach; exports.tipShape = _chunkQBWEH3IMcjs.tipShape; exports.toneOf = _chunkTLCTTQFFcjs.toneOf; exports.updatePaintGradientStop = _chunkQBWEH3IMcjs.updatePaintGradientStop; exports.walkDabs = _chunkQBWEH3IMcjs.walkDabs; exports.wetGpuSupport = _chunkF2Y4E4GUcjs.wetGpuSupport; exports.wetSimdSupported = _chunkF2Y4E4GUcjs.wetSimdSupported; exports.wetSupport = _chunkF2Y4E4GUcjs.wetSupport;
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+ exports.BODY_SCATTER = _chunkF2Y4E4GUcjs.BODY_SCATTER; exports.BRUSHSTROKE_MAX_SCALE = _chunkSYPFUL5Bcjs.BRUSHSTROKE_MAX_SCALE; exports.BRUSHSTROKE_MIN_SCALE = _chunkSYPFUL5Bcjs.BRUSHSTROKE_MIN_SCALE; exports.BrushstrokeCache = _chunk3T5O225Tcjs.BrushstrokeCache; exports.CoverageMap = _chunk3T5O225Tcjs.CoverageMap; exports.DEFAULT_BLENDER = _chunk3T5O225Tcjs.DEFAULT_BLENDER; exports.DEFAULT_BRUSH = _chunk3T5O225Tcjs.DEFAULT_BRUSH; exports.DEFAULT_FLOW = _chunkF2Y4E4GUcjs.DEFAULT_FLOW; exports.DEFAULT_MIXER = _chunk3T5O225Tcjs.DEFAULT_MIXER; exports.DEFAULT_PAINT_GRADIENT = _chunk3T5O225Tcjs.DEFAULT_PAINT_GRADIENT; exports.DEFAULT_PAINT_GRADIENT_MAPPING = _chunk3T5O225Tcjs.DEFAULT_PAINT_GRADIENT_MAPPING; exports.DEFAULT_RETOUCH = _chunkVEHVXRJUcjs.DEFAULT_RETOUCH; exports.DEFAULT_SMUDGE = _chunk3T5O225Tcjs.DEFAULT_SMUDGE; exports.DEFAULT_WET_PAPER = _chunkF2Y4E4GUcjs.DEFAULT_WET_PAPER; exports.DEFAULT_WET_PARAMS = _chunkF2Y4E4GUcjs.DEFAULT_WET_PARAMS; exports.DRY_EPS = _chunkF2Y4E4GUcjs.DRY_EPS; exports.DabWalker = _chunk3T5O225Tcjs.DabWalker; exports.EMPTY_MIXER_LOAD = _chunk3T5O225Tcjs.EMPTY_MIXER_LOAD; exports.EX = _chunkF2Y4E4GUcjs.EX; exports.EY = _chunkF2Y4E4GUcjs.EY; exports.FLAG_ALIVE = _chunkF2Y4E4GUcjs.FLAG_ALIVE; exports.FLAG_BOTTOM = _chunkF2Y4E4GUcjs.FLAG_BOTTOM; exports.FLAG_LEFT = _chunkF2Y4E4GUcjs.FLAG_LEFT; exports.FLAG_RIGHT = _chunkF2Y4E4GUcjs.FLAG_RIGHT; exports.FLAG_TOP = _chunkF2Y4E4GUcjs.FLAG_TOP; exports.FLAG_WET = _chunkF2Y4E4GUcjs.FLAG_WET; exports.FLAT = _chunkF2Y4E4GUcjs.FLAT; exports.FREE_INTERVAL = _chunkF2Y4E4GUcjs.FREE_INTERVAL; exports.GRAIN_PATTERNS = _chunk3T5O225Tcjs.GRAIN_PATTERNS; exports.GRAIN_TILE = _chunk3T5O225Tcjs.GRAIN_TILE; exports.HIDE = _chunkF2Y4E4GUcjs.HIDE; exports.IDENTITY_CLONE_TRANSFORM = _chunkVEHVXRJUcjs.IDENTITY_CLONE_TRANSFORM; exports.MAX_BATCH = _chunkF2Y4E4GUcjs.MAX_BATCH; exports.MAX_BRUSH_SIZE = _chunk3T5O225Tcjs.MAX_BRUSH_SIZE; exports.MAX_TILT_ACCEL = _chunkF2Y4E4GUcjs.MAX_TILT_ACCEL; exports.MAX_WET_LANES = _chunkF2Y4E4GUcjs.MAX_WET_LANES; exports.MAX_WET_SLOTS = _chunkF2Y4E4GUcjs.MAX_WET_SLOTS; exports.MIXER_DRAIN = _chunk3T5O225Tcjs.MIXER_DRAIN; exports.MIXER_PICKUP_RATE = _chunk3T5O225Tcjs.MIXER_PICKUP_RATE; exports.MIXING_MODELS = _chunk3T5O225Tcjs.MIXING_MODELS; exports.MixerStroke = _chunk3T5O225Tcjs.MixerStroke; exports.OPP = _chunkF2Y4E4GUcjs.OPP; exports.PAINT_COLOR_JSON_SCHEMA = _chunk3T5O225Tcjs.PAINT_COLOR_JSON_SCHEMA; exports.PAINT_GRADIENT_FULL_SPEED = _chunk3T5O225Tcjs.PAINT_GRADIENT_FULL_SPEED; exports.PAINT_GRADIENT_JSON_SCHEMA = _chunk3T5O225Tcjs.PAINT_GRADIENT_JSON_SCHEMA; exports.PAINT_GRADIENT_KIT = _chunk3T5O225Tcjs.PAINT_GRADIENT_KIT; exports.PAINT_GRADIENT_MAPPINGS = _chunk3T5O225Tcjs.PAINT_GRADIENT_MAPPINGS; exports.PAINT_GRADIENT_MAPPING_LABELS = _chunk3T5O225Tcjs.PAINT_GRADIENT_MAPPING_LABELS; exports.PAINT_GRADIENT_PRESETS = _chunk3T5O225Tcjs.PAINT_GRADIENT_PRESETS; exports.PAINT_GRADIENT_REPEATS = _chunk3T5O225Tcjs.PAINT_GRADIENT_REPEATS; exports.PAINT_GRADIENT_REPEAT_LABELS = _chunk3T5O225Tcjs.PAINT_GRADIENT_REPEAT_LABELS; exports.PAINT_GRADIENT_SPACES = _chunk3T5O225Tcjs.PAINT_GRADIENT_SPACES; exports.PAINT_GRADIENT_SPACE_LABELS = _chunk3T5O225Tcjs.PAINT_GRADIENT_SPACE_LABELS; exports.PAINT_SOURCE_JSON_SCHEMA = _chunk3T5O225Tcjs.PAINT_SOURCE_JSON_SCHEMA; exports.PAPER_CAPACITY = _chunkF2Y4E4GUcjs.PAPER_CAPACITY; exports.PARAM = _chunkF2Y4E4GUcjs.PARAM; exports.PARAM_FLOATS = _chunkF2Y4E4GUcjs.PARAM_FLOATS; exports.PIGMENT_BANDS = _chunkO7LUD7MHcjs.PIGMENT_BANDS; exports.PIGMENT_CHANNELS = _chunkF2Y4E4GUcjs.PIGMENT_CHANNELS; exports.PIGMENT_LAMBDA_MIN = _chunkO7LUD7MHcjs.PIGMENT_LAMBDA_MIN; exports.PIGMENT_LAMBDA_STEP = _chunkO7LUD7MHcjs.PIGMENT_LAMBDA_STEP; exports.PIGMENT_UNIT = _chunkF2Y4E4GUcjs.PIGMENT_UNIT; exports.PIGMENT_WAVELENGTHS = _chunkO7LUD7MHcjs.PIGMENT_WAVELENGTHS; exports.PLANE = _chunkF2Y4E4GUcjs.PLANE; exports.PLANE_BYTES = _chunkF2Y4E4GUcjs.PLANE_BYTES; exports.P_D0 = _chunkF2Y4E4GUcjs.P_D0; exports.P_EDGE = _chunkF2Y4E4GUcjs.P_EDGE; exports.P_FX = _chunkF2Y4E4GUcjs.P_FX; exports.P_FY = _chunkF2Y4E4GUcjs.P_FY; exports.P_H = _chunkF2Y4E4GUcjs.P_H; exports.P_P0 = _chunkF2Y4E4GUcjs.P_P0; exports.P_RHO = _chunkF2Y4E4GUcjs.P_RHO; exports.P_SW = _chunkF2Y4E4GUcjs.P_SW; exports.P_UX = _chunkF2Y4E4GUcjs.P_UX; exports.P_UY = _chunkF2Y4E4GUcjs.P_UY; exports.PaintExchange = _chunk3T5O225Tcjs.PaintExchange; exports.PaintGradientSampler = _chunk3T5O225Tcjs.PaintGradientSampler; exports.PaintSourceError = _chunk3T5O225Tcjs.PaintSourceError; exports.PaperGrain = _chunk3T5O225Tcjs.PaperGrain; exports.RETOUCH_SAMPLES = _chunkVEHVXRJUcjs.RETOUCH_SAMPLES; exports.RegionPixelSource = _chunkVEHVXRJUcjs.RegionPixelSource; exports.RetouchDabStroke = _chunkVEHVXRJUcjs.RetouchDabStroke; exports.SET_PLANES = _chunkF2Y4E4GUcjs.SET_PLANES; exports.SLOT_BYTES = _chunkF2Y4E4GUcjs.SLOT_BYTES; exports.SLOT_PLANES = _chunkF2Y4E4GUcjs.SLOT_PLANES; exports.SLOT_SIDE = _chunkF2Y4E4GUcjs.SLOT_SIDE; exports.SPOT_HEAL_TYPES = _chunkVEHVXRJUcjs.SPOT_HEAL_TYPES; exports.SRGB_TO_LINEAR = _chunkF2Y4E4GUcjs.SRGB_TO_LINEAR; exports.STRIP = _chunkF2Y4E4GUcjs.STRIP; exports.SmudgeTip = _chunk3T5O225Tcjs.SmudgeTip; exports.StrokeCoverage = _chunk3T5O225Tcjs.StrokeCoverage; exports.TIP_GRADIENT_STEPS = _chunk3T5O225Tcjs.TIP_GRADIENT_STEPS; exports.TONE_RANGES = _chunkVEHVXRJUcjs.TONE_RANGES; exports.TileMedium = _chunk3T5O225Tcjs.TileMedium; exports.TilePixelSource = _chunkVEHVXRJUcjs.TilePixelSource; exports.TileableNoise = _chunk3T5O225Tcjs.TileableNoise; exports.TransformedPixelSource = _chunkVEHVXRJUcjs.TransformedPixelSource; exports.U_MAX = _chunkF2Y4E4GUcjs.U_MAX; exports.W9 = _chunkF2Y4E4GUcjs.W9; exports.WET_FLOW_KINDS = _chunkF2Y4E4GUcjs.WET_FLOW_KINDS; exports.WET_PARAM_KEYS = _chunkF2Y4E4GUcjs.WET_PARAM_KEYS; exports.WET_TILE = _chunkF2Y4E4GUcjs.WET_TILE; exports.WGSL_HALO = _chunkF2Y4E4GUcjs.WGSL_HALO; exports.WGSL_SHADE = _chunkF2Y4E4GUcjs.WGSL_SHADE; exports.WGSL_STEP = _chunkF2Y4E4GUcjs.WGSL_STEP; exports.WetGpuEngine = _chunkF2Y4E4GUcjs.WetGpuEngine; exports.WetMedium = _chunkF2Y4E4GUcjs.WetMedium; exports.WetWorkerPool = _chunkF2Y4E4GUcjs.WetWorkerPool; exports.WetWorld = _chunkF2Y4E4GUcjs.WetWorld; exports.WetWorldError = _chunkF2Y4E4GUcjs.WetWorldError; exports.addPaintGradientStop = _chunk3T5O225Tcjs.addPaintGradientStop; exports.applyRetouchToTile = _chunkVEHVXRJUcjs.applyRetouchToTile; exports.applyStrokeToDeepTile = _chunk3T5O225Tcjs.applyStrokeToDeepTile; exports.applyStrokeToTile = _chunk3T5O225Tcjs.applyStrokeToTile; exports.applyToneToDeepTile = _chunkVEHVXRJUcjs.applyToneToDeepTile; exports.bestOffset = _chunkVEHVXRJUcjs.bestOffset; exports.blendRadius = _chunk3T5O225Tcjs.blendRadius; exports.blenderDab = _chunk3T5O225Tcjs.blenderDab; exports.boxBlurPixels = _chunkVEHVXRJUcjs.boxBlurPixels; exports.brushstrokeDataUrl = _chunk3T5O225Tcjs.brushstrokeDataUrl; exports.brushstrokeKey = _chunk3T5O225Tcjs.brushstrokeKey; exports.brushstrokeSamples = _chunk3T5O225Tcjs.brushstrokeSamples; exports.brushstrokeScaleBucket = _chunkSYPFUL5Bcjs.brushstrokeScaleBucket; exports.brushstrokeStrokeOptions = _chunk3T5O225Tcjs.brushstrokeStrokeOptions; exports.brushstrokeToCanvas = _chunk3T5O225Tcjs.brushstrokeToCanvas; exports.canShareMemory = _chunkF2Y4E4GUcjs.canShareMemory; exports.cleanMixer = _chunk3T5O225Tcjs.cleanMixer; exports.cloneSamplePoint = _chunkVEHVXRJUcjs.cloneSamplePoint; exports.contentAwareFill = _chunkVEHVXRJUcjs.contentAwareFill; exports.coverageTileCoord = _chunk3T5O225Tcjs.coverageTileCoord; exports.createBlenderScratch = _chunk3T5O225Tcjs.createBlenderScratch; exports.createPigment = _chunkO7LUD7MHcjs.createPigment; exports.createPigmentTools = _chunkF2Y4E4GUcjs.createPigmentTools; exports.createWetGpuEngine = _chunkF2Y4E4GUcjs.createWetGpuEngine; exports.dabCoverage = _chunk3T5O225Tcjs.dabCoverage; exports.dabRect = _chunk3T5O225Tcjs.dabRect; exports.dexp = _chunkF2Y4E4GUcjs.dexp; exports.dilateMask = _chunkVEHVXRJUcjs.dilateMask; exports.dlog = _chunkF2Y4E4GUcjs.dlog; exports.dodgeBurn = _chunkVEHVXRJUcjs.dodgeBurn; exports.dodgeBurnCurve = _chunkVEHVXRJUcjs.dodgeBurnCurve; exports.dpow = _chunkF2Y4E4GUcjs.dpow; exports.dsincos = _chunkF2Y4E4GUcjs.dsincos; exports.edgeBits = _chunkF2Y4E4GUcjs.edgeBits; exports.exchangeRates = _chunk3T5O225Tcjs.exchangeRates; exports.expNeg = _chunkF2Y4E4GUcjs.expNeg; exports.filmPixel = _chunkF2Y4E4GUcjs.filmPixel; exports.filmReflectance = _chunkF2Y4E4GUcjs.filmReflectance; exports.findWebGpu = _chunkF2Y4E4GUcjs.findWebGpu; exports.flowField = _chunkF2Y4E4GUcjs.flowField; exports.gradientDabColor = _chunk3T5O225Tcjs.gradientDabColor; exports.grainCatch = _chunk3T5O225Tcjs.grainCatch; exports.grainHeights = _chunk3T5O225Tcjs.grainHeights; exports.hash2 = _chunk3T5O225Tcjs.hash2; exports.healPixels = _chunkVEHVXRJUcjs.healPixels; exports.hexToPaintRgb = _chunk3T5O225Tcjs.hexToPaintRgb; exports.isBrushstrokeBrush = _chunk3T5O225Tcjs.isBrushstrokeBrush; exports.isGradientPaint = _chunk3T5O225Tcjs.isGradientPaint; exports.isIdentityCloneTransform = _chunkVEHVXRJUcjs.isIdentityCloneTransform; exports.latticeViscosity = _chunkF2Y4E4GUcjs.latticeViscosity; exports.lerpPigment = _chunkO7LUD7MHcjs.lerpPigment; exports.lerpPigmentInto = _chunkO7LUD7MHcjs.lerpPigmentInto; exports.linearToSrgb8 = _chunkF2Y4E4GUcjs.linearToSrgb8; exports.loadMixer = _chunk3T5O225Tcjs.loadMixer; exports.loadWetKernel = _chunkF2Y4E4GUcjs.loadWetKernel; exports.luma = _chunkVEHVXRJUcjs.luma; exports.maskBounds = _chunkVEHVXRJUcjs.maskBounds; exports.membraneFill = _chunkVEHVXRJUcjs.membraneFill; exports.mix32 = _chunk3T5O225Tcjs.mix32; exports.mixPigments = _chunkO7LUD7MHcjs.mixPigments; exports.mixerRates = _chunk3T5O225Tcjs.mixerRates; exports.normalizeBlender = _chunk3T5O225Tcjs.normalizeBlender; exports.normalizeBrush = _chunk3T5O225Tcjs.normalizeBrush; exports.normalizeFlow = _chunkF2Y4E4GUcjs.normalizeFlow; exports.normalizeHexColor = _chunk3T5O225Tcjs.normalizeHexColor; exports.normalizeMixer = _chunk3T5O225Tcjs.normalizeMixer; exports.normalizeRetouch = _chunkVEHVXRJUcjs.normalizeRetouch; exports.normalizeSmudge = _chunk3T5O225Tcjs.normalizeSmudge; exports.normalizeTilt = _chunkF2Y4E4GUcjs.normalizeTilt; exports.normalizeWetParams = _chunkF2Y4E4GUcjs.normalizeWetParams; exports.packWetParams = _chunkF2Y4E4GUcjs.packWetParams; exports.paintGradientMappingFor = _chunk3T5O225Tcjs.paintGradientMappingFor; exports.paintPathStroke = _chunk3T5O225Tcjs.paintPathStroke; exports.paintSourceColor = _chunk3T5O225Tcjs.paintSourceColor; exports.paintSourceCss = _chunk3T5O225Tcjs.paintSourceCss; exports.parsePaintSource = _chunk3T5O225Tcjs.parsePaintSource; exports.pathStrokeCoverage = _chunk3T5O225Tcjs.pathStrokeCoverage; exports.pathStrokeDabs = _chunk3T5O225Tcjs.pathStrokeDabs; exports.perDabStrength = _chunkVEHVXRJUcjs.perDabStrength; exports.pigmentColor = _chunkF2Y4E4GUcjs.pigmentColor; exports.pigmentOf = _chunkF2Y4E4GUcjs.pigmentOf; exports.pixelPigment = _chunkF2Y4E4GUcjs.pixelPigment; exports.pointerPressure = _chunkF2Y4E4GUcjs.pointerPressure; exports.pointerStrokeSample = _chunkF2Y4E4GUcjs.pointerStrokeSample; exports.pointerStrokeSamples = _chunkF2Y4E4GUcjs.pointerStrokeSamples; exports.put255 = _chunk3T5O225Tcjs.put255; exports.rand01 = _chunk3T5O225Tcjs.rand01; exports.randSigned = _chunk3T5O225Tcjs.randSigned; exports.rasterizeDab = _chunk3T5O225Tcjs.rasterizeDab; exports.readPaintSource = _chunk3T5O225Tcjs.readPaintSource; exports.readSourceRegion = _chunkVEHVXRJUcjs.readSourceRegion; exports.reflectanceToRgb = _chunkO7LUD7MHcjs.reflectanceToRgb; exports.removePaintGradientStop = _chunk3T5O225Tcjs.removePaintGradientStop; exports.renderBrushstroke = _chunk3T5O225Tcjs.renderBrushstroke; exports.resolvePaintGradient = _chunk3T5O225Tcjs.resolvePaintGradient; exports.retouchFilter = _chunkVEHVXRJUcjs.retouchFilter; exports.reversePaintGradient = _chunk3T5O225Tcjs.reversePaintGradient; exports.rgbToReflectance = _chunkO7LUD7MHcjs.rgbToReflectance; exports.rgbaViewOfGrey = _chunkVEHVXRJUcjs.rgbaViewOfGrey; exports.saturationOf = _chunkVEHVXRJUcjs.saturationOf; exports.scalePaintGradient = _chunk3T5O225Tcjs.scalePaintGradient; exports.seamlessClone = _chunkVEHVXRJUcjs.seamlessClone; exports.seedFromString = _chunk3T5O225Tcjs.seedFromString; exports.setPigmentColor = _chunkO7LUD7MHcjs.setPigmentColor; exports.shadeTile = _chunkF2Y4E4GUcjs.shadeTile; exports.smoothPoints = _chunk3T5O225Tcjs.smoothPoints; exports.smudgeEffect = _chunkVEHVXRJUcjs.smudgeEffect; exports.solidPaint = _chunk3T5O225Tcjs.solidPaint; exports.solveMembrane = _chunkVEHVXRJUcjs.solveMembrane; exports.sponge = _chunkVEHVXRJUcjs.sponge; exports.spongeEffect = _chunkVEHVXRJUcjs.spongeEffect; exports.spotHealPixels = _chunkVEHVXRJUcjs.spotHealPixels; exports.spotHealWindow = _chunkVEHVXRJUcjs.spotHealWindow; exports.srgbByteToLinear = _chunkF2Y4E4GUcjs.srgbByteToLinear; exports.stepSlotTs = _chunkF2Y4E4GUcjs.stepSlotTs; exports.strokeGrainCatch = _chunk3T5O225Tcjs.strokeGrainCatch; exports.tipFalloff = _chunk3T5O225Tcjs.tipFalloff; exports.tipReach = _chunk3T5O225Tcjs.tipReach; exports.tipShape = _chunk3T5O225Tcjs.tipShape; exports.toneOf = _chunkVEHVXRJUcjs.toneOf; exports.updatePaintGradientStop = _chunk3T5O225Tcjs.updatePaintGradientStop; exports.walkDabs = _chunk3T5O225Tcjs.walkDabs; exports.wetGpuSupport = _chunkF2Y4E4GUcjs.wetGpuSupport; exports.wetSimdSupported = _chunkF2Y4E4GUcjs.wetSimdSupported; exports.wetSupport = _chunkF2Y4E4GUcjs.wetSupport;
466
484
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/editor/editor/packages/core/dist/paint/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,urZAAC","file":"/home/runner/work/editor/editor/packages/core/dist/paint/index.cjs"}
1
+ {"version":3,"sources":["/home/runner/work/editor/editor/packages/core/dist/paint/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACF,yDAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wqaAAC","file":"/home/runner/work/editor/editor/packages/core/dist/paint/index.cjs"}
@@ -1,10 +1,10 @@
1
- import { aj as PaintMedium, ak as PaintSample, R as RgbTriple, B as BrushSettings, e as PaintSource, C as CoverageMap, D as Dab } from '../blending-D7jCmjO6.cjs';
2
- export { a7 as BlenderScratch, c as BlenderSettings, a8 as DEFAULT_BLENDER, a9 as DEFAULT_BRUSH, aa as DEFAULT_MIXER, l as DEFAULT_PAINT_GRADIENT, m as DEFAULT_PAINT_GRADIENT_MAPPING, ab as DEFAULT_SMUDGE, ac as DabWalker, ad as EMPTY_MIXER_LOAD, ae as ExchangeRates, n as MAX_BRUSH_SIZE, af as MIXER_DRAIN, ag as MIXER_PICKUP_RATE, ah as MIXING_MODELS, g as MixerLoad, M as MixerSettings, j as MixerStroke, i as MixerTarget, b as MixingModel, o as PAINT_COLOR_JSON_SCHEMA, p as PAINT_GRADIENT_FULL_SPEED, q as PAINT_GRADIENT_JSON_SCHEMA, r as PAINT_GRADIENT_KIT, s as PAINT_GRADIENT_MAPPINGS, t as PAINT_GRADIENT_MAPPING_LABELS, u as PAINT_GRADIENT_PRESETS, v as PAINT_GRADIENT_REPEATS, w as PAINT_GRADIENT_REPEAT_LABELS, x as PAINT_GRADIENT_SPACES, y as PAINT_GRADIENT_SPACE_LABELS, z as PAINT_SOURCE_JSON_SCHEMA, A as PaintColorSource, E as PaintDabParams, ai as PaintExchange, F as PaintGradientKit, G as PaintGradientMapping, H as PaintGradientMappingKind, I as PaintGradientRepeat, J as PaintGradientSample, K as PaintGradientSampler, a as PaintGradientSource, L as PaintGradientSpace, N as PaintGradientStop, f as PaintPixels, O as PaintRgb, Q as PaintSourceError, P as PaintTileTarget, al as SmudgeDab, d as SmudgeSettings, am as SmudgeTip, k as StrokeApply, h as StrokeCoverage, S as StrokePoint, an as TIP_GRADIENT_STEPS, T as TileMedium, ao as TileMediumOptions, U as addPaintGradientStop, ap as applyStrokeToDeepTile, aq as applyStrokeToTile, ar as blendRadius, as as blenderDab, at as cleanMixer, au as coverageTileCoord, av as createBlenderScratch, aw as dabCoverage, ax as dabRect, ay as exchangeRates, az as gradientDabColor, V as hexToPaintRgb, W as isGradientPaint, aA as loadMixer, aB as mixerRates, aC as normalizeBlender, aD as normalizeBrush, X as normalizeHexColor, aE as normalizeMixer, aF as normalizeSmudge, Y as paintGradientMappingFor, Z as paintSourceColor, _ as paintSourceCss, $ as parsePaintSource, aG as put255, aH as rasterizeDab, a0 as readPaintSource, a1 as removePaintGradientStop, a2 as resolvePaintGradient, a3 as reversePaintGradient, a4 as scalePaintGradient, aI as smoothPoints, a5 as solidPaint, aJ as tipFalloff, aK as tipReach, aL as tipShape, a6 as updatePaintGradientStop, aM as walkDabs } from '../blending-D7jCmjO6.cjs';
1
+ import { as as PaintMedium, at as PaintSample, R as RgbTriple, B as BrushSettings, f as PaintSource, C as CoverageMap, D as Dab, G as GrainPattern } from '../grain-GCt_O2kv.cjs';
2
+ export { ag as BlenderScratch, d as BlenderSettings, ah as DEFAULT_BLENDER, ai as DEFAULT_BRUSH, aj as DEFAULT_MIXER, o as DEFAULT_PAINT_GRADIENT, p as DEFAULT_PAINT_GRADIENT_MAPPING, ak as DEFAULT_SMUDGE, al as DabWalker, am as EMPTY_MIXER_LOAD, an as ExchangeRates, q as GRAIN_PATTERNS, r as GRAIN_TILE, n as GrainTuning, s as MAX_BRUSH_SIZE, ao as MIXER_DRAIN, ap as MIXER_PICKUP_RATE, aq as MIXING_MODELS, h as MixerLoad, M as MixerSettings, k as MixerStroke, j as MixerTarget, c as MixingModel, t as PAINT_COLOR_JSON_SCHEMA, u as PAINT_GRADIENT_FULL_SPEED, v as PAINT_GRADIENT_JSON_SCHEMA, w as PAINT_GRADIENT_KIT, x as PAINT_GRADIENT_MAPPINGS, y as PAINT_GRADIENT_MAPPING_LABELS, z as PAINT_GRADIENT_PRESETS, A as PAINT_GRADIENT_REPEATS, E as PAINT_GRADIENT_REPEAT_LABELS, F as PAINT_GRADIENT_SPACES, H as PAINT_GRADIENT_SPACE_LABELS, I as PAINT_SOURCE_JSON_SCHEMA, J as PaintColorSource, K as PaintDabParams, ar as PaintExchange, L as PaintGradientKit, N as PaintGradientMapping, O as PaintGradientMappingKind, Q as PaintGradientRepeat, U as PaintGradientSample, V as PaintGradientSampler, b as PaintGradientSource, W as PaintGradientSpace, X as PaintGradientStop, g as PaintPixels, Y as PaintRgb, Z as PaintSourceError, a as PaintTileTarget, P as PaperGrain, _ as PaperGrainSettings, m as PaperTiling, au as SmudgeDab, e as SmudgeSettings, av as SmudgeTip, l as StrokeApply, i as StrokeCoverage, S as StrokePoint, aw as TIP_GRADIENT_STEPS, T as TileMedium, ax as TileMediumOptions, $ as addPaintGradientStop, ay as applyStrokeToDeepTile, az as applyStrokeToTile, aA as blendRadius, aB as blenderDab, aC as cleanMixer, aD as coverageTileCoord, aE as createBlenderScratch, aF as dabCoverage, aG as dabRect, aH as exchangeRates, aI as gradientDabColor, a0 as grainCatch, a1 as grainHeights, a2 as hexToPaintRgb, a3 as isGradientPaint, aJ as loadMixer, aK as mixerRates, aL as normalizeBlender, aM as normalizeBrush, a4 as normalizeHexColor, aN as normalizeMixer, aO as normalizeSmudge, a5 as paintGradientMappingFor, a6 as paintSourceColor, a7 as paintSourceCss, a8 as parsePaintSource, aP as put255, aQ as rasterizeDab, a9 as readPaintSource, aa as removePaintGradientStop, ab as resolvePaintGradient, ac as reversePaintGradient, ad as scalePaintGradient, aR as smoothPoints, ae as solidPaint, aS as strokeGrainCatch, aT as tipFalloff, aU as tipReach, aV as tipShape, af as updatePaintGradientStop, aW as walkDabs } from '../grain-GCt_O2kv.cjs';
3
3
  import { R as RasterRect, Y as Pigment, a as BlendMode, T as TiledSurface } from '../surface-1MRncXpF.cjs';
4
4
  export { Z as PIGMENT_BANDS, _ as PIGMENT_LAMBDA_MIN, $ as PIGMENT_LAMBDA_STEP, a0 as PIGMENT_WAVELENGTHS, a1 as PigmentOptions, a2 as PigmentRgb, a3 as createPigment, a4 as lerpPigment, a5 as lerpPigmentInto, a6 as mixPigments, a7 as reflectanceToRgb, a8 as rgbToReflectance, a9 as setPigmentColor } from '../surface-1MRncXpF.cjs';
5
5
  import { A as AgentTool } from '../registry-BqA1AZt0.cjs';
6
- import { W as WetWorld } from '../rand-Cw9VLrVC.cjs';
7
- export { C as CloneTransform, D as DEFAULT_FLOW, u as DEFAULT_RETOUCH, v as DEFAULT_WET_PAPER, k as DEFAULT_WET_PARAMS, x as DRY_EPS, E as EX, y as EY, F as FLAG_ALIVE, z as FLAG_BOTTOM, A as FLAG_LEFT, B as FLAG_RIGHT, G as FLAG_TOP, H as FLAG_WET, I as FLAT, J as FREE_INTERVAL, K as IDENTITY_CLONE_TRANSFORM, M as MAX_BATCH, L as MAX_TILT_ACCEL, N as MAX_WET_LANES, O as MAX_WET_SLOTS, P as OPP, Q as PAPER_CAPACITY, S as PARAM, T as PARAM_FLOATS, U as PIGMENT_CHANNELS, V as PLANE, X as PLANE_BYTES, Y as P_D0, Z as P_EDGE, _ as P_FX, $ as P_FY, a0 as P_H, a1 as P_P0, a2 as P_RHO, a3 as P_SW, a4 as P_UX, a5 as P_UY, a6 as PixelSource, a7 as RETOUCH_SAMPLES, a8 as RegionPixelSource, a as RetouchApply, a9 as RetouchDabEffect, aa as RetouchDabStroke, b as RetouchPaint, ab as RetouchSample, R as RetouchSettings, ac as SET_PLANES, ad as SLOT_BYTES, ae as SLOT_PLANES, af as SLOT_SIDE, ag as SPOT_HEAL_TYPES, ah as STRIP, ai as SpotHealType, aj as TONE_RANGES, ak as TilePixelSource, al as ToneRange, am as TransformedPixelSource, an as U_MAX, ao as W9, l as WET_FLOW_KINDS, m as WET_PARAM_KEYS, ap as WET_TILE, h as WetBackendInfo, aq as WetFlowField, n as WetFlowKind, e as WetFlowSpec, ar as WetGpuEngine, as as WetGpuJob, g as WetGpuProvider, at as WetGpuSupport, au as WetKernelKind, av as WetLaneOptions, aw as WetLaneStats, ax as WetPaper, j as WetPaperInput, d as WetParams, i as WetSnapshot, o as WetSupport, c as WetTilt, ay as WetWorkerLayout, az as WetWorkerPool, aA as WetWorldError, f as WetWorldOptions, aB as applyRetouchToTile, aC as applyToneToDeepTile, aD as boxBlurPixels, aE as canShareMemory, aF as cloneSamplePoint, aG as createWetGpuEngine, aH as dodgeBurn, aI as dodgeBurnCurve, aJ as dsincos, aK as edgeBits, aL as findWebGpu, aM as flowField, p as hash2, aN as healPixels, aO as isIdentityCloneTransform, aP as latticeViscosity, aQ as loadWetKernel, aR as luma, q as mix32, r as normalizeFlow, aS as normalizeRetouch, aT as normalizeTilt, s as normalizeWetParams, aU as packWetParams, aV as perDabStrength, t as rand01, aW as readSourceRegion, aX as retouchFilter, aY as rgbaViewOfGrey, aZ as saturationOf, a_ as smudgeEffect, a$ as sponge, b0 as spongeEffect, b1 as spotHealPixels, b2 as spotHealWindow, b3 as toneOf, b4 as wetGpuSupport, b5 as wetSimdSupported, w as wetSupport } from '../rand-Cw9VLrVC.cjs';
6
+ import { W as WetWorld } from '../rand-D7nfeD1p.cjs';
7
+ export { C as CloneTransform, D as DEFAULT_FLOW, x as DEFAULT_RETOUCH, y as DEFAULT_WET_PAPER, k as DEFAULT_WET_PARAMS, z as DRY_EPS, E as EX, A as EY, F as FLAG_ALIVE, B as FLAG_BOTTOM, G as FLAG_LEFT, H as FLAG_RIGHT, I as FLAG_TOP, J as FLAG_WET, K as FLAT, L as FREE_INTERVAL, M as IDENTITY_CLONE_TRANSFORM, N as MAX_BATCH, O as MAX_TILT_ACCEL, P as MAX_WET_LANES, Q as MAX_WET_SLOTS, S as OPP, U as PAPER_CAPACITY, V as PARAM, X as PARAM_FLOATS, Y as PIGMENT_CHANNELS, Z as PLANE, _ as PLANE_BYTES, $ as P_D0, a0 as P_EDGE, a1 as P_FX, a2 as P_FY, a3 as P_H, a4 as P_P0, a5 as P_RHO, a6 as P_SW, a7 as P_UX, a8 as P_UY, a9 as PixelSource, aa as RETOUCH_SAMPLES, ab as RegionPixelSource, a as RetouchApply, ac as RetouchDabEffect, ad as RetouchDabStroke, b as RetouchPaint, ae as RetouchSample, R as RetouchSettings, af as SET_PLANES, ag as SLOT_BYTES, ah as SLOT_PLANES, ai as SLOT_SIDE, aj as SPOT_HEAL_TYPES, ak as STRIP, al as SpotHealType, am as TONE_RANGES, an as TilePixelSource, T as TileableNoise, ao as ToneRange, ap as TransformedPixelSource, aq as U_MAX, ar as W9, l as WET_FLOW_KINDS, m as WET_PARAM_KEYS, as as WET_TILE, h as WetBackendInfo, at as WetFlowField, n as WetFlowKind, e as WetFlowSpec, au as WetGpuEngine, av as WetGpuJob, g as WetGpuProvider, aw as WetGpuSupport, ax as WetKernelKind, ay as WetLaneOptions, az as WetLaneStats, aA as WetPaper, j as WetPaperInput, d as WetParams, i as WetSnapshot, o as WetSupport, c as WetTilt, aB as WetWorkerLayout, aC as WetWorkerPool, aD as WetWorldError, f as WetWorldOptions, aE as applyRetouchToTile, aF as applyToneToDeepTile, aG as boxBlurPixels, aH as canShareMemory, aI as cloneSamplePoint, aJ as createWetGpuEngine, aK as dodgeBurn, aL as dodgeBurnCurve, aM as dsincos, aN as edgeBits, aO as findWebGpu, aP as flowField, p as hash2, aQ as healPixels, aR as isIdentityCloneTransform, aS as latticeViscosity, aT as loadWetKernel, aU as luma, q as mix32, r as normalizeFlow, aV as normalizeRetouch, aW as normalizeTilt, s as normalizeWetParams, aX as packWetParams, aY as perDabStrength, t as rand01, u as randSigned, aZ as readSourceRegion, a_ as retouchFilter, a$ as rgbaViewOfGrey, b0 as saturationOf, v as seedFromString, b1 as smudgeEffect, b2 as sponge, b3 as spongeEffect, b4 as spotHealPixels, b5 as spotHealWindow, b6 as toneOf, b7 as wetGpuSupport, b8 as wetSimdSupported, w as wetSupport } from '../rand-D7nfeD1p.cjs';
8
8
  export { B as BRUSHSTROKE_MAX_SCALE, a as BRUSHSTROKE_MIN_SCALE, b as brushstrokeScaleBucket } from '../brushstroke-scale-B6XAdPSY.cjs';
9
9
  import '../schema-Di0CS6Pe.cjs';
10
10
 
@@ -250,6 +250,27 @@ interface PathStrokeOptions {
250
250
  minSize?: number;
251
251
  /** Join the last sample back to the first. */
252
252
  closed?: boolean;
253
+ /**
254
+ * Per-dab jitter, as the paint editor's brush dynamics apply it: size, angle (fraction of ±180°),
255
+ * opacity drop and scatter across the path (in diameters), each 0..1 (scatter 0..4). Hashed from
256
+ * `seed` and the dab index, so the same stroke always jitters the same way. Default none.
257
+ */
258
+ jitter?: {
259
+ seed: number;
260
+ size?: number;
261
+ angle?: number;
262
+ opacity?: number;
263
+ scatter?: number;
264
+ };
265
+ /**
266
+ * Paper grain the finished stroke catches (dry media; `strokeGrainCatch` at the stroke's mean
267
+ * pressure): `at(x, y)` is the grain height 0..1 at a sample-space point, `depth` 0..1 how much
268
+ * the valleys lose (paper depth × the brush's grain response). Default none.
269
+ */
270
+ grain?: {
271
+ at(x: number, y: number): number;
272
+ depth: number;
273
+ } | null;
253
274
  }
254
275
  /** The dabs of a brush stroke along `samples`, with pressure and tilt interpolated between them. */
255
276
  declare function pathStrokeDabs(samples: readonly PathSample[], options: PathStrokeOptions): Dab[];
@@ -348,8 +369,9 @@ type BrushstrokeInput = readonly BrushstrokeSample[] | BrushstrokeProfilePath;
348
369
  /**
349
370
  * A brush for a brushstroke: plain tip settings, or a paint-editor brush (`PaintBrush` matches this
350
371
  * shape structurally). Only dab-engine brushes render; `rotation: 'stroke'` turns the tip with the
351
- * path, and `dynamics` give the size at zero pressure and how tilt shapes the tip. Grain, jitter and
352
- * velocity dynamics are not applied (there is no paper, and the result must be deterministic).
372
+ * path, and `dynamics` give the size at zero pressure and how tilt shapes the tip. With the
373
+ * `character` option the brush's `grain` response and its size, angle, opacity and scatter jitter
374
+ * apply too (seeded, so still deterministic). Velocity dynamics are never applied.
353
375
  */
354
376
  type BrushstrokeBrush = Partial<BrushSettings> | {
355
377
  id?: string;
@@ -357,12 +379,49 @@ type BrushstrokeBrush = Partial<BrushSettings> | {
357
379
  engine?: string;
358
380
  tip: Partial<BrushSettings>;
359
381
  rotation?: string;
382
+ /** How strongly the mark follows the paper grain, 0..1 (with `character`). */
383
+ grain?: number;
360
384
  dynamics?: {
361
385
  minSize?: number;
362
386
  tiltSize?: number;
363
387
  tiltRoundness?: number;
388
+ sizeJitter?: number;
389
+ angleJitter?: number;
390
+ opacityJitter?: number;
391
+ scatter?: number;
364
392
  };
365
393
  };
394
+ /** The paper a brushstroke's grain comes from (all optional). */
395
+ interface BrushstrokePaper {
396
+ /** Grain pattern (default `sanded`: a fine, even tooth). */
397
+ pattern?: GrainPattern;
398
+ /** Grain seed (default 1). */
399
+ seed?: number;
400
+ /** Grain scale in path units: 1 is the pattern's natural size (default 1). */
401
+ scale?: number;
402
+ /** Grain depth 0..1, multiplied by the brush's `grain` response (default 0.5). */
403
+ depth?: number;
404
+ }
405
+ /**
406
+ * A brush's character: its jitter and the paper grain it catches. Seeded, so a stroke always
407
+ * renders the same bytes.
408
+ */
409
+ interface BrushstrokeCharacter {
410
+ /** Jitter seed (default: a hash of the path, so each stroke differs but repeats exactly). */
411
+ seed?: number;
412
+ /** The paper (default: the built-in sanded grain); `null` for no grain. */
413
+ paper?: BrushstrokePaper | null;
414
+ /**
415
+ * Where the path sits on the paper: paper point = `origin + path point × unit` (default origin
416
+ * 0, 0 and unit 1). Pass the stroke's world position so neighbouring strokes share one sheet of
417
+ * paper and the grain stays put on screen.
418
+ */
419
+ origin?: {
420
+ x: number;
421
+ y: number;
422
+ };
423
+ unit?: number;
424
+ }
366
425
  /**
367
426
  * What the stroke is painted with: a solid RGBA colour, or a `PaintSource` (one `#rrggbb` colour,
368
427
  * or gradient paint sampled dab by dab along the path: by distance, pressure, tilt, speed,
@@ -382,6 +441,12 @@ interface BrushstrokeOptions {
382
441
  seed?: number;
383
442
  /** Join the last sample back to the first. */
384
443
  closed?: boolean;
444
+ /**
445
+ * Render the brush's character: its seeded size / angle / opacity / scatter jitter and the paper
446
+ * grain it catches (charcoal, pastel and pencil get their look from these). Default off: plain
447
+ * dabs, as before.
448
+ */
449
+ character?: BrushstrokeCharacter;
385
450
  /**
386
451
  * The largest image to render, in pixels (default 16 777 216, 4096²). A stroke that would be
387
452
  * bigger at `scale` renders at a lower scale instead; the result's `scale` says which.
@@ -504,4 +569,4 @@ declare function pointerStrokeSamples(e: PointerEventLike, toPoint: (clientX: nu
504
569
  y: number;
505
570
  }): PointerStrokeSample[];
506
571
 
507
- export { BODY_SCATTER, BrushSettings, type BrushstrokeBrush, BrushstrokeCache, type BrushstrokeCanvasLike, type BrushstrokeImage, type BrushstrokeInput, type BrushstrokeOptions, type BrushstrokePaint, type BrushstrokeProfilePath, type BrushstrokeSample, CoverageMap, Dab, HIDE, PIGMENT_UNIT, PaintMedium, type PaintPathOptions, PaintSample, PaintSource, type PathSample, type PathStrokeOptions, type PathStrokePaint, Pigment, type PointerEventLike, type PointerStrokeSample, RgbTriple, SRGB_TO_LINEAR, WGSL_HALO, WGSL_SHADE, WGSL_STEP, WetMedium, type WetMediumOptions, WetWorld, bestOffset, brushstrokeDataUrl, brushstrokeKey, brushstrokeSamples, brushstrokeStrokeOptions, brushstrokeToCanvas, contentAwareFill, createPigmentTools, dexp, dilateMask, dlog, dpow, expNeg, filmPixel, filmReflectance, isBrushstrokeBrush, linearToSrgb8, maskBounds, membraneFill, paintPathStroke, pathStrokeCoverage, pathStrokeDabs, pigmentColor, pigmentOf, pixelPigment, pointerPressure, pointerStrokeSample, pointerStrokeSamples, renderBrushstroke, seamlessClone, shadeTile, solveMembrane, srgbByteToLinear, stepSlotTs };
572
+ export { BODY_SCATTER, BrushSettings, type BrushstrokeBrush, BrushstrokeCache, type BrushstrokeCanvasLike, type BrushstrokeCharacter, type BrushstrokeImage, type BrushstrokeInput, type BrushstrokeOptions, type BrushstrokePaint, type BrushstrokePaper, type BrushstrokeProfilePath, type BrushstrokeSample, CoverageMap, Dab, GrainPattern, HIDE, PIGMENT_UNIT, PaintMedium, type PaintPathOptions, PaintSample, PaintSource, type PathSample, type PathStrokeOptions, type PathStrokePaint, Pigment, type PointerEventLike, type PointerStrokeSample, RgbTriple, SRGB_TO_LINEAR, WGSL_HALO, WGSL_SHADE, WGSL_STEP, WetMedium, type WetMediumOptions, WetWorld, bestOffset, brushstrokeDataUrl, brushstrokeKey, brushstrokeSamples, brushstrokeStrokeOptions, brushstrokeToCanvas, contentAwareFill, createPigmentTools, dexp, dilateMask, dlog, dpow, expNeg, filmPixel, filmReflectance, isBrushstrokeBrush, linearToSrgb8, maskBounds, membraneFill, paintPathStroke, pathStrokeCoverage, pathStrokeDabs, pigmentColor, pigmentOf, pixelPigment, pointerPressure, pointerStrokeSample, pointerStrokeSamples, renderBrushstroke, seamlessClone, shadeTile, solveMembrane, srgbByteToLinear, stepSlotTs };
@@ -1,10 +1,10 @@
1
- import { aj as PaintMedium, ak as PaintSample, R as RgbTriple, B as BrushSettings, e as PaintSource, C as CoverageMap, D as Dab } from '../blending-NgF3qo3d.js';
2
- export { a7 as BlenderScratch, c as BlenderSettings, a8 as DEFAULT_BLENDER, a9 as DEFAULT_BRUSH, aa as DEFAULT_MIXER, l as DEFAULT_PAINT_GRADIENT, m as DEFAULT_PAINT_GRADIENT_MAPPING, ab as DEFAULT_SMUDGE, ac as DabWalker, ad as EMPTY_MIXER_LOAD, ae as ExchangeRates, n as MAX_BRUSH_SIZE, af as MIXER_DRAIN, ag as MIXER_PICKUP_RATE, ah as MIXING_MODELS, g as MixerLoad, M as MixerSettings, j as MixerStroke, i as MixerTarget, b as MixingModel, o as PAINT_COLOR_JSON_SCHEMA, p as PAINT_GRADIENT_FULL_SPEED, q as PAINT_GRADIENT_JSON_SCHEMA, r as PAINT_GRADIENT_KIT, s as PAINT_GRADIENT_MAPPINGS, t as PAINT_GRADIENT_MAPPING_LABELS, u as PAINT_GRADIENT_PRESETS, v as PAINT_GRADIENT_REPEATS, w as PAINT_GRADIENT_REPEAT_LABELS, x as PAINT_GRADIENT_SPACES, y as PAINT_GRADIENT_SPACE_LABELS, z as PAINT_SOURCE_JSON_SCHEMA, A as PaintColorSource, E as PaintDabParams, ai as PaintExchange, F as PaintGradientKit, G as PaintGradientMapping, H as PaintGradientMappingKind, I as PaintGradientRepeat, J as PaintGradientSample, K as PaintGradientSampler, a as PaintGradientSource, L as PaintGradientSpace, N as PaintGradientStop, f as PaintPixels, O as PaintRgb, Q as PaintSourceError, P as PaintTileTarget, al as SmudgeDab, d as SmudgeSettings, am as SmudgeTip, k as StrokeApply, h as StrokeCoverage, S as StrokePoint, an as TIP_GRADIENT_STEPS, T as TileMedium, ao as TileMediumOptions, U as addPaintGradientStop, ap as applyStrokeToDeepTile, aq as applyStrokeToTile, ar as blendRadius, as as blenderDab, at as cleanMixer, au as coverageTileCoord, av as createBlenderScratch, aw as dabCoverage, ax as dabRect, ay as exchangeRates, az as gradientDabColor, V as hexToPaintRgb, W as isGradientPaint, aA as loadMixer, aB as mixerRates, aC as normalizeBlender, aD as normalizeBrush, X as normalizeHexColor, aE as normalizeMixer, aF as normalizeSmudge, Y as paintGradientMappingFor, Z as paintSourceColor, _ as paintSourceCss, $ as parsePaintSource, aG as put255, aH as rasterizeDab, a0 as readPaintSource, a1 as removePaintGradientStop, a2 as resolvePaintGradient, a3 as reversePaintGradient, a4 as scalePaintGradient, aI as smoothPoints, a5 as solidPaint, aJ as tipFalloff, aK as tipReach, aL as tipShape, a6 as updatePaintGradientStop, aM as walkDabs } from '../blending-NgF3qo3d.js';
1
+ import { as as PaintMedium, at as PaintSample, R as RgbTriple, B as BrushSettings, f as PaintSource, C as CoverageMap, D as Dab, G as GrainPattern } from '../grain-COgYMMHv.js';
2
+ export { ag as BlenderScratch, d as BlenderSettings, ah as DEFAULT_BLENDER, ai as DEFAULT_BRUSH, aj as DEFAULT_MIXER, o as DEFAULT_PAINT_GRADIENT, p as DEFAULT_PAINT_GRADIENT_MAPPING, ak as DEFAULT_SMUDGE, al as DabWalker, am as EMPTY_MIXER_LOAD, an as ExchangeRates, q as GRAIN_PATTERNS, r as GRAIN_TILE, n as GrainTuning, s as MAX_BRUSH_SIZE, ao as MIXER_DRAIN, ap as MIXER_PICKUP_RATE, aq as MIXING_MODELS, h as MixerLoad, M as MixerSettings, k as MixerStroke, j as MixerTarget, c as MixingModel, t as PAINT_COLOR_JSON_SCHEMA, u as PAINT_GRADIENT_FULL_SPEED, v as PAINT_GRADIENT_JSON_SCHEMA, w as PAINT_GRADIENT_KIT, x as PAINT_GRADIENT_MAPPINGS, y as PAINT_GRADIENT_MAPPING_LABELS, z as PAINT_GRADIENT_PRESETS, A as PAINT_GRADIENT_REPEATS, E as PAINT_GRADIENT_REPEAT_LABELS, F as PAINT_GRADIENT_SPACES, H as PAINT_GRADIENT_SPACE_LABELS, I as PAINT_SOURCE_JSON_SCHEMA, J as PaintColorSource, K as PaintDabParams, ar as PaintExchange, L as PaintGradientKit, N as PaintGradientMapping, O as PaintGradientMappingKind, Q as PaintGradientRepeat, U as PaintGradientSample, V as PaintGradientSampler, b as PaintGradientSource, W as PaintGradientSpace, X as PaintGradientStop, g as PaintPixels, Y as PaintRgb, Z as PaintSourceError, a as PaintTileTarget, P as PaperGrain, _ as PaperGrainSettings, m as PaperTiling, au as SmudgeDab, e as SmudgeSettings, av as SmudgeTip, l as StrokeApply, i as StrokeCoverage, S as StrokePoint, aw as TIP_GRADIENT_STEPS, T as TileMedium, ax as TileMediumOptions, $ as addPaintGradientStop, ay as applyStrokeToDeepTile, az as applyStrokeToTile, aA as blendRadius, aB as blenderDab, aC as cleanMixer, aD as coverageTileCoord, aE as createBlenderScratch, aF as dabCoverage, aG as dabRect, aH as exchangeRates, aI as gradientDabColor, a0 as grainCatch, a1 as grainHeights, a2 as hexToPaintRgb, a3 as isGradientPaint, aJ as loadMixer, aK as mixerRates, aL as normalizeBlender, aM as normalizeBrush, a4 as normalizeHexColor, aN as normalizeMixer, aO as normalizeSmudge, a5 as paintGradientMappingFor, a6 as paintSourceColor, a7 as paintSourceCss, a8 as parsePaintSource, aP as put255, aQ as rasterizeDab, a9 as readPaintSource, aa as removePaintGradientStop, ab as resolvePaintGradient, ac as reversePaintGradient, ad as scalePaintGradient, aR as smoothPoints, ae as solidPaint, aS as strokeGrainCatch, aT as tipFalloff, aU as tipReach, aV as tipShape, af as updatePaintGradientStop, aW as walkDabs } from '../grain-COgYMMHv.js';
3
3
  import { R as RasterRect, Y as Pigment, a as BlendMode, T as TiledSurface } from '../surface-1MRncXpF.js';
4
4
  export { Z as PIGMENT_BANDS, _ as PIGMENT_LAMBDA_MIN, $ as PIGMENT_LAMBDA_STEP, a0 as PIGMENT_WAVELENGTHS, a1 as PigmentOptions, a2 as PigmentRgb, a3 as createPigment, a4 as lerpPigment, a5 as lerpPigmentInto, a6 as mixPigments, a7 as reflectanceToRgb, a8 as rgbToReflectance, a9 as setPigmentColor } from '../surface-1MRncXpF.js';
5
5
  import { A as AgentTool } from '../registry-D-4fit9C.js';
6
- import { W as WetWorld } from '../rand-8xbUb6ur.js';
7
- export { C as CloneTransform, D as DEFAULT_FLOW, u as DEFAULT_RETOUCH, v as DEFAULT_WET_PAPER, k as DEFAULT_WET_PARAMS, x as DRY_EPS, E as EX, y as EY, F as FLAG_ALIVE, z as FLAG_BOTTOM, A as FLAG_LEFT, B as FLAG_RIGHT, G as FLAG_TOP, H as FLAG_WET, I as FLAT, J as FREE_INTERVAL, K as IDENTITY_CLONE_TRANSFORM, M as MAX_BATCH, L as MAX_TILT_ACCEL, N as MAX_WET_LANES, O as MAX_WET_SLOTS, P as OPP, Q as PAPER_CAPACITY, S as PARAM, T as PARAM_FLOATS, U as PIGMENT_CHANNELS, V as PLANE, X as PLANE_BYTES, Y as P_D0, Z as P_EDGE, _ as P_FX, $ as P_FY, a0 as P_H, a1 as P_P0, a2 as P_RHO, a3 as P_SW, a4 as P_UX, a5 as P_UY, a6 as PixelSource, a7 as RETOUCH_SAMPLES, a8 as RegionPixelSource, a as RetouchApply, a9 as RetouchDabEffect, aa as RetouchDabStroke, b as RetouchPaint, ab as RetouchSample, R as RetouchSettings, ac as SET_PLANES, ad as SLOT_BYTES, ae as SLOT_PLANES, af as SLOT_SIDE, ag as SPOT_HEAL_TYPES, ah as STRIP, ai as SpotHealType, aj as TONE_RANGES, ak as TilePixelSource, al as ToneRange, am as TransformedPixelSource, an as U_MAX, ao as W9, l as WET_FLOW_KINDS, m as WET_PARAM_KEYS, ap as WET_TILE, h as WetBackendInfo, aq as WetFlowField, n as WetFlowKind, e as WetFlowSpec, ar as WetGpuEngine, as as WetGpuJob, g as WetGpuProvider, at as WetGpuSupport, au as WetKernelKind, av as WetLaneOptions, aw as WetLaneStats, ax as WetPaper, j as WetPaperInput, d as WetParams, i as WetSnapshot, o as WetSupport, c as WetTilt, ay as WetWorkerLayout, az as WetWorkerPool, aA as WetWorldError, f as WetWorldOptions, aB as applyRetouchToTile, aC as applyToneToDeepTile, aD as boxBlurPixels, aE as canShareMemory, aF as cloneSamplePoint, aG as createWetGpuEngine, aH as dodgeBurn, aI as dodgeBurnCurve, aJ as dsincos, aK as edgeBits, aL as findWebGpu, aM as flowField, p as hash2, aN as healPixels, aO as isIdentityCloneTransform, aP as latticeViscosity, aQ as loadWetKernel, aR as luma, q as mix32, r as normalizeFlow, aS as normalizeRetouch, aT as normalizeTilt, s as normalizeWetParams, aU as packWetParams, aV as perDabStrength, t as rand01, aW as readSourceRegion, aX as retouchFilter, aY as rgbaViewOfGrey, aZ as saturationOf, a_ as smudgeEffect, a$ as sponge, b0 as spongeEffect, b1 as spotHealPixels, b2 as spotHealWindow, b3 as toneOf, b4 as wetGpuSupport, b5 as wetSimdSupported, w as wetSupport } from '../rand-8xbUb6ur.js';
6
+ import { W as WetWorld } from '../rand-DJGxSq9d.js';
7
+ export { C as CloneTransform, D as DEFAULT_FLOW, x as DEFAULT_RETOUCH, y as DEFAULT_WET_PAPER, k as DEFAULT_WET_PARAMS, z as DRY_EPS, E as EX, A as EY, F as FLAG_ALIVE, B as FLAG_BOTTOM, G as FLAG_LEFT, H as FLAG_RIGHT, I as FLAG_TOP, J as FLAG_WET, K as FLAT, L as FREE_INTERVAL, M as IDENTITY_CLONE_TRANSFORM, N as MAX_BATCH, O as MAX_TILT_ACCEL, P as MAX_WET_LANES, Q as MAX_WET_SLOTS, S as OPP, U as PAPER_CAPACITY, V as PARAM, X as PARAM_FLOATS, Y as PIGMENT_CHANNELS, Z as PLANE, _ as PLANE_BYTES, $ as P_D0, a0 as P_EDGE, a1 as P_FX, a2 as P_FY, a3 as P_H, a4 as P_P0, a5 as P_RHO, a6 as P_SW, a7 as P_UX, a8 as P_UY, a9 as PixelSource, aa as RETOUCH_SAMPLES, ab as RegionPixelSource, a as RetouchApply, ac as RetouchDabEffect, ad as RetouchDabStroke, b as RetouchPaint, ae as RetouchSample, R as RetouchSettings, af as SET_PLANES, ag as SLOT_BYTES, ah as SLOT_PLANES, ai as SLOT_SIDE, aj as SPOT_HEAL_TYPES, ak as STRIP, al as SpotHealType, am as TONE_RANGES, an as TilePixelSource, T as TileableNoise, ao as ToneRange, ap as TransformedPixelSource, aq as U_MAX, ar as W9, l as WET_FLOW_KINDS, m as WET_PARAM_KEYS, as as WET_TILE, h as WetBackendInfo, at as WetFlowField, n as WetFlowKind, e as WetFlowSpec, au as WetGpuEngine, av as WetGpuJob, g as WetGpuProvider, aw as WetGpuSupport, ax as WetKernelKind, ay as WetLaneOptions, az as WetLaneStats, aA as WetPaper, j as WetPaperInput, d as WetParams, i as WetSnapshot, o as WetSupport, c as WetTilt, aB as WetWorkerLayout, aC as WetWorkerPool, aD as WetWorldError, f as WetWorldOptions, aE as applyRetouchToTile, aF as applyToneToDeepTile, aG as boxBlurPixels, aH as canShareMemory, aI as cloneSamplePoint, aJ as createWetGpuEngine, aK as dodgeBurn, aL as dodgeBurnCurve, aM as dsincos, aN as edgeBits, aO as findWebGpu, aP as flowField, p as hash2, aQ as healPixels, aR as isIdentityCloneTransform, aS as latticeViscosity, aT as loadWetKernel, aU as luma, q as mix32, r as normalizeFlow, aV as normalizeRetouch, aW as normalizeTilt, s as normalizeWetParams, aX as packWetParams, aY as perDabStrength, t as rand01, u as randSigned, aZ as readSourceRegion, a_ as retouchFilter, a$ as rgbaViewOfGrey, b0 as saturationOf, v as seedFromString, b1 as smudgeEffect, b2 as sponge, b3 as spongeEffect, b4 as spotHealPixels, b5 as spotHealWindow, b6 as toneOf, b7 as wetGpuSupport, b8 as wetSimdSupported, w as wetSupport } from '../rand-DJGxSq9d.js';
8
8
  export { B as BRUSHSTROKE_MAX_SCALE, a as BRUSHSTROKE_MIN_SCALE, b as brushstrokeScaleBucket } from '../brushstroke-scale-B6XAdPSY.js';
9
9
  import '../schema-Di0CS6Pe.js';
10
10
 
@@ -250,6 +250,27 @@ interface PathStrokeOptions {
250
250
  minSize?: number;
251
251
  /** Join the last sample back to the first. */
252
252
  closed?: boolean;
253
+ /**
254
+ * Per-dab jitter, as the paint editor's brush dynamics apply it: size, angle (fraction of ±180°),
255
+ * opacity drop and scatter across the path (in diameters), each 0..1 (scatter 0..4). Hashed from
256
+ * `seed` and the dab index, so the same stroke always jitters the same way. Default none.
257
+ */
258
+ jitter?: {
259
+ seed: number;
260
+ size?: number;
261
+ angle?: number;
262
+ opacity?: number;
263
+ scatter?: number;
264
+ };
265
+ /**
266
+ * Paper grain the finished stroke catches (dry media; `strokeGrainCatch` at the stroke's mean
267
+ * pressure): `at(x, y)` is the grain height 0..1 at a sample-space point, `depth` 0..1 how much
268
+ * the valleys lose (paper depth × the brush's grain response). Default none.
269
+ */
270
+ grain?: {
271
+ at(x: number, y: number): number;
272
+ depth: number;
273
+ } | null;
253
274
  }
254
275
  /** The dabs of a brush stroke along `samples`, with pressure and tilt interpolated between them. */
255
276
  declare function pathStrokeDabs(samples: readonly PathSample[], options: PathStrokeOptions): Dab[];
@@ -348,8 +369,9 @@ type BrushstrokeInput = readonly BrushstrokeSample[] | BrushstrokeProfilePath;
348
369
  /**
349
370
  * A brush for a brushstroke: plain tip settings, or a paint-editor brush (`PaintBrush` matches this
350
371
  * shape structurally). Only dab-engine brushes render; `rotation: 'stroke'` turns the tip with the
351
- * path, and `dynamics` give the size at zero pressure and how tilt shapes the tip. Grain, jitter and
352
- * velocity dynamics are not applied (there is no paper, and the result must be deterministic).
372
+ * path, and `dynamics` give the size at zero pressure and how tilt shapes the tip. With the
373
+ * `character` option the brush's `grain` response and its size, angle, opacity and scatter jitter
374
+ * apply too (seeded, so still deterministic). Velocity dynamics are never applied.
353
375
  */
354
376
  type BrushstrokeBrush = Partial<BrushSettings> | {
355
377
  id?: string;
@@ -357,12 +379,49 @@ type BrushstrokeBrush = Partial<BrushSettings> | {
357
379
  engine?: string;
358
380
  tip: Partial<BrushSettings>;
359
381
  rotation?: string;
382
+ /** How strongly the mark follows the paper grain, 0..1 (with `character`). */
383
+ grain?: number;
360
384
  dynamics?: {
361
385
  minSize?: number;
362
386
  tiltSize?: number;
363
387
  tiltRoundness?: number;
388
+ sizeJitter?: number;
389
+ angleJitter?: number;
390
+ opacityJitter?: number;
391
+ scatter?: number;
364
392
  };
365
393
  };
394
+ /** The paper a brushstroke's grain comes from (all optional). */
395
+ interface BrushstrokePaper {
396
+ /** Grain pattern (default `sanded`: a fine, even tooth). */
397
+ pattern?: GrainPattern;
398
+ /** Grain seed (default 1). */
399
+ seed?: number;
400
+ /** Grain scale in path units: 1 is the pattern's natural size (default 1). */
401
+ scale?: number;
402
+ /** Grain depth 0..1, multiplied by the brush's `grain` response (default 0.5). */
403
+ depth?: number;
404
+ }
405
+ /**
406
+ * A brush's character: its jitter and the paper grain it catches. Seeded, so a stroke always
407
+ * renders the same bytes.
408
+ */
409
+ interface BrushstrokeCharacter {
410
+ /** Jitter seed (default: a hash of the path, so each stroke differs but repeats exactly). */
411
+ seed?: number;
412
+ /** The paper (default: the built-in sanded grain); `null` for no grain. */
413
+ paper?: BrushstrokePaper | null;
414
+ /**
415
+ * Where the path sits on the paper: paper point = `origin + path point × unit` (default origin
416
+ * 0, 0 and unit 1). Pass the stroke's world position so neighbouring strokes share one sheet of
417
+ * paper and the grain stays put on screen.
418
+ */
419
+ origin?: {
420
+ x: number;
421
+ y: number;
422
+ };
423
+ unit?: number;
424
+ }
366
425
  /**
367
426
  * What the stroke is painted with: a solid RGBA colour, or a `PaintSource` (one `#rrggbb` colour,
368
427
  * or gradient paint sampled dab by dab along the path: by distance, pressure, tilt, speed,
@@ -382,6 +441,12 @@ interface BrushstrokeOptions {
382
441
  seed?: number;
383
442
  /** Join the last sample back to the first. */
384
443
  closed?: boolean;
444
+ /**
445
+ * Render the brush's character: its seeded size / angle / opacity / scatter jitter and the paper
446
+ * grain it catches (charcoal, pastel and pencil get their look from these). Default off: plain
447
+ * dabs, as before.
448
+ */
449
+ character?: BrushstrokeCharacter;
385
450
  /**
386
451
  * The largest image to render, in pixels (default 16 777 216, 4096²). A stroke that would be
387
452
  * bigger at `scale` renders at a lower scale instead; the result's `scale` says which.
@@ -504,4 +569,4 @@ declare function pointerStrokeSamples(e: PointerEventLike, toPoint: (clientX: nu
504
569
  y: number;
505
570
  }): PointerStrokeSample[];
506
571
 
507
- export { BODY_SCATTER, BrushSettings, type BrushstrokeBrush, BrushstrokeCache, type BrushstrokeCanvasLike, type BrushstrokeImage, type BrushstrokeInput, type BrushstrokeOptions, type BrushstrokePaint, type BrushstrokeProfilePath, type BrushstrokeSample, CoverageMap, Dab, HIDE, PIGMENT_UNIT, PaintMedium, type PaintPathOptions, PaintSample, PaintSource, type PathSample, type PathStrokeOptions, type PathStrokePaint, Pigment, type PointerEventLike, type PointerStrokeSample, RgbTriple, SRGB_TO_LINEAR, WGSL_HALO, WGSL_SHADE, WGSL_STEP, WetMedium, type WetMediumOptions, WetWorld, bestOffset, brushstrokeDataUrl, brushstrokeKey, brushstrokeSamples, brushstrokeStrokeOptions, brushstrokeToCanvas, contentAwareFill, createPigmentTools, dexp, dilateMask, dlog, dpow, expNeg, filmPixel, filmReflectance, isBrushstrokeBrush, linearToSrgb8, maskBounds, membraneFill, paintPathStroke, pathStrokeCoverage, pathStrokeDabs, pigmentColor, pigmentOf, pixelPigment, pointerPressure, pointerStrokeSample, pointerStrokeSamples, renderBrushstroke, seamlessClone, shadeTile, solveMembrane, srgbByteToLinear, stepSlotTs };
572
+ export { BODY_SCATTER, BrushSettings, type BrushstrokeBrush, BrushstrokeCache, type BrushstrokeCanvasLike, type BrushstrokeCharacter, type BrushstrokeImage, type BrushstrokeInput, type BrushstrokeOptions, type BrushstrokePaint, type BrushstrokePaper, type BrushstrokeProfilePath, type BrushstrokeSample, CoverageMap, Dab, GrainPattern, HIDE, PIGMENT_UNIT, PaintMedium, type PaintPathOptions, PaintSample, PaintSource, type PathSample, type PathStrokeOptions, type PathStrokePaint, Pigment, type PointerEventLike, type PointerStrokeSample, RgbTriple, SRGB_TO_LINEAR, WGSL_HALO, WGSL_SHADE, WGSL_STEP, WetMedium, type WetMediumOptions, WetWorld, bestOffset, brushstrokeDataUrl, brushstrokeKey, brushstrokeSamples, brushstrokeStrokeOptions, brushstrokeToCanvas, contentAwareFill, createPigmentTools, dexp, dilateMask, dlog, dpow, expNeg, filmPixel, filmReflectance, isBrushstrokeBrush, linearToSrgb8, maskBounds, membraneFill, paintPathStroke, pathStrokeCoverage, pathStrokeDabs, pigmentColor, pigmentOf, pixelPigment, pointerPressure, pointerStrokeSample, pointerStrokeSamples, renderBrushstroke, seamlessClone, shadeTile, solveMembrane, srgbByteToLinear, stepSlotTs };
@@ -36,7 +36,7 @@ import {
36
36
  spotHealPixels,
37
37
  spotHealWindow,
38
38
  toneOf
39
- } from "../chunk-OIBIRXRG.js";
39
+ } from "../chunk-PSPLRQL6.js";
40
40
  import {
41
41
  BODY_SCATTER,
42
42
  DEFAULT_FLOW,
@@ -139,6 +139,8 @@ import {
139
139
  DEFAULT_SMUDGE,
140
140
  DabWalker,
141
141
  EMPTY_MIXER_LOAD,
142
+ GRAIN_PATTERNS,
143
+ GRAIN_TILE,
142
144
  MAX_BRUSH_SIZE,
143
145
  MIXER_DRAIN,
144
146
  MIXER_PICKUP_RATE,
@@ -159,10 +161,12 @@ import {
159
161
  PaintExchange,
160
162
  PaintGradientSampler,
161
163
  PaintSourceError,
164
+ PaperGrain,
162
165
  SmudgeTip,
163
166
  StrokeCoverage,
164
167
  TIP_GRADIENT_STEPS,
165
168
  TileMedium,
169
+ TileableNoise,
166
170
  addPaintGradientStop,
167
171
  applyStrokeToDeepTile,
168
172
  applyStrokeToTile,
@@ -180,6 +184,8 @@ import {
180
184
  dabRect,
181
185
  exchangeRates,
182
186
  gradientDabColor,
187
+ grainCatch,
188
+ grainHeights,
183
189
  hash2,
184
190
  hexToPaintRgb,
185
191
  isBrushstrokeBrush,
@@ -201,6 +207,7 @@ import {
201
207
  pathStrokeDabs,
202
208
  put255,
203
209
  rand01,
210
+ randSigned,
204
211
  rasterizeDab,
205
212
  readPaintSource,
206
213
  removePaintGradientStop,
@@ -208,14 +215,16 @@ import {
208
215
  resolvePaintGradient,
209
216
  reversePaintGradient,
210
217
  scalePaintGradient,
218
+ seedFromString,
211
219
  smoothPoints,
212
220
  solidPaint,
221
+ strokeGrainCatch,
213
222
  tipFalloff,
214
223
  tipReach,
215
224
  tipShape,
216
225
  updatePaintGradientStop,
217
226
  walkDabs
218
- } from "../chunk-5FSRTP6E.js";
227
+ } from "../chunk-PQFVLOMR.js";
219
228
  import {
220
229
  BRUSHSTROKE_MAX_SCALE,
221
230
  BRUSHSTROKE_MIN_SCALE,
@@ -264,6 +273,8 @@ export {
264
273
  FLAG_WET,
265
274
  FLAT,
266
275
  FREE_INTERVAL,
276
+ GRAIN_PATTERNS,
277
+ GRAIN_TILE,
267
278
  HIDE,
268
279
  IDENTITY_CLONE_TRANSFORM,
269
280
  MAX_BATCH,
@@ -312,6 +323,7 @@ export {
312
323
  PaintExchange,
313
324
  PaintGradientSampler,
314
325
  PaintSourceError,
326
+ PaperGrain,
315
327
  RETOUCH_SAMPLES,
316
328
  RegionPixelSource,
317
329
  RetouchDabStroke,
@@ -328,6 +340,7 @@ export {
328
340
  TONE_RANGES,
329
341
  TileMedium,
330
342
  TilePixelSource,
343
+ TileableNoise,
331
344
  TransformedPixelSource,
332
345
  U_MAX,
333
346
  W9,
@@ -383,6 +396,8 @@ export {
383
396
  findWebGpu,
384
397
  flowField,
385
398
  gradientDabColor,
399
+ grainCatch,
400
+ grainHeights,
386
401
  hash2,
387
402
  healPixels,
388
403
  hexToPaintRgb,
@@ -427,6 +442,7 @@ export {
427
442
  pointerStrokeSamples,
428
443
  put255,
429
444
  rand01,
445
+ randSigned,
430
446
  rasterizeDab,
431
447
  readPaintSource,
432
448
  readSourceRegion,
@@ -441,6 +457,7 @@ export {
441
457
  saturationOf,
442
458
  scalePaintGradient,
443
459
  seamlessClone,
460
+ seedFromString,
444
461
  setPigmentColor,
445
462
  shadeTile,
446
463
  smoothPoints,
@@ -453,6 +470,7 @@ export {
453
470
  spotHealWindow,
454
471
  srgbByteToLinear,
455
472
  stepSlotTs,
473
+ strokeGrainCatch,
456
474
  tipFalloff,
457
475
  tipReach,
458
476
  tipShape,