@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,14 +1,14 @@
1
- import { P as PaintBrush, a as PenPoint, S as StrokeCopy, b as PaperGrain, c as PaperSettings, W as WetMediumKind, d as Sticker, M as MultiColorSettings, e as PaintBrushInput, B as BrushLibraryFile, I as ImpastoTool, f as ParticleKind, g as ParticleRender, h as StampKind, i as WetTool } from '../brushes-CnvZSYYU.cjs';
2
- export { j as BRUSH_ID, k as BRUSH_ROTATIONS, l as BUILTIN_BRUSHES, m as BristleSettings, n as BristleStroke, o as BrushBehavior, p as BrushBehaviorInput, q as BrushDynamics, r as BrushRotation, C as CoverageStroke, D as DEFAULT_BEHAVIOR, s as DEFAULT_BRISTLE, t as DEFAULT_BRUSH_ID, u as DEFAULT_DYNAMICS, v as DEFAULT_IMPASTO, w as DEFAULT_MULTI_COLOR, x as DEFAULT_PAPER, y as DEFAULT_PARTICLE, z as DEFAULT_STICKER, A as DEFAULT_WET_BRUSH, E as DryStroke, F as DryStrokeOptions, G as GRAIN_PATTERNS, H as GRAIN_TILE, J as GrainPattern, K as GrainTuning, L as IDENTITY_COPY, N as IMPASTO_TOOLS, O as ImpastoSettings, Q as Linear2, R as MULTI_COLOR_MODES, T as MultiColorMode, U as PAINT_BRUSH_CATEGORIES, V as PAINT_BRUSH_ENGINES, X as PAPER_FAMILIES, Y as PAPER_LIBRARY, Z as PARTICLE_KINDS, _ as PARTICLE_RENDERS, $ as PaintBrushCategory, a0 as PaintBrushEngine, a1 as PaperFamily, a2 as PaperTiling, a3 as ParticleSettings, a4 as ParticleStroke, a5 as PenDab, a6 as PenDabWalker, a7 as PenSmoother, a8 as ProceduralStrokeOptions, a9 as STAMP_KINDS, aa as StickerSettings, ab as StickerSpray, ac as StickerSprayInit, ad as WET_MEDIA, ae as WET_TOOLS, af as WetBrushSettings, ag as brushTakesPaint, ah as brushToJSON, ai as clonePaper, aj as drawSticker, ak as grainCatch, al as grainHeights, am as hexToRgb8, an as isWetBrush, ao as isWetCapable, ap as mixerTip, aq as multiColorToPaint, ar as normalizeBehavior, as as normalizeBristle, at as normalizeDynamics, au as normalizeImpasto, av as normalizeMultiColor, aw as normalizePaintBrush, ax as normalizePaper, ay as normalizeParticle, az as normalizeStickerSettings, aA as normalizeStickerUpdate, aB as normalizeWetBrush, aC as paintToMultiColor, aD as paperPreset, aE as parseBrushLibrary, aF as penOrientation, aG as renderPaper, aH as renderStickers, aI as stampCoverage, aJ as stickerRect, aK as stickerSurface, aL as tiltToOrientation, aM as toStrokePoint, aN as usesPaintExchange } from '../brushes-CnvZSYYU.cjs';
1
+ import { W as WetWorld, c as WetTilt, d as WetParams, e as WetFlowSpec, f as WetWorldOptions, g as WetGpuProvider, h as WetBackendInfo, i as WetSnapshot, j as WetPaperInput } from '../rand-D7nfeD1p.cjs';
2
+ export { D as DEFAULT_FLOW, k as DEFAULT_WET_PARAMS, T as TileableNoise, l as WET_FLOW_KINDS, m as WET_PARAM_KEYS, n as WetFlowKind, o as WetSupport, p as hash2, q as mix32, r as normalizeFlow, s as normalizeWetParams, t as rand01, u as randSigned, v as seedFromString, w as wetSupport } from '../rand-D7nfeD1p.cjs';
3
+ import { G as GrainPattern, m as PaperTiling, n as GrainTuning, P as PaperGrain, h as MixerLoad, b as PaintGradientSource, R as RgbTriple, a as PaintTileTarget, c as MixingModel, f as PaintSource } from '../grain-GCt_O2kv.cjs';
4
+ export { o as DEFAULT_PAINT_GRADIENT, p as DEFAULT_PAINT_GRADIENT_MAPPING, q as GRAIN_PATTERNS, r as GRAIN_TILE, s as MAX_BRUSH_SIZE, 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, L as PaintGradientKit, N as PaintGradientMapping, O as PaintGradientMappingKind, Q as PaintGradientRepeat, U as PaintGradientSample, V as PaintGradientSampler, W as PaintGradientSpace, X as PaintGradientStop, Y as PaintRgb, Z as PaintSourceError, _ as PaperGrainSettings, $ as addPaintGradientStop, a0 as grainCatch, a1 as grainHeights, a2 as hexToPaintRgb, a3 as isGradientPaint, a4 as normalizeHexColor, a5 as paintGradientMappingFor, a6 as paintSourceColor, a7 as paintSourceCss, a8 as parsePaintSource, a9 as readPaintSource, aa as removePaintGradientStop, ab as resolvePaintGradient, ac as reversePaintGradient, ad as scalePaintGradient, ae as solidPaint, af as updatePaintGradientStop } from '../grain-GCt_O2kv.cjs';
3
5
  import { a1 as RasterLayer, a0 as RasterGroupLayer, a5 as RasterPixelLayer, C as CompositorLayer, a as RasterCompositor, R as RasterSources, U as LayerLocks } from '../deep-CcwHkQdb.cjs';
4
- import { g as MixerLoad, a as PaintGradientSource, R as RgbTriple, P as PaintTileTarget, b as MixingModel, e as PaintSource } from '../blending-D7jCmjO6.cjs';
5
- export { l as DEFAULT_PAINT_GRADIENT, m as DEFAULT_PAINT_GRADIENT_MAPPING, n as MAX_BRUSH_SIZE, 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, F as PaintGradientKit, G as PaintGradientMapping, H as PaintGradientMappingKind, I as PaintGradientRepeat, J as PaintGradientSample, K as PaintGradientSampler, L as PaintGradientSpace, N as PaintGradientStop, O as PaintRgb, Q as PaintSourceError, U as addPaintGradientStop, V as hexToPaintRgb, W as isGradientPaint, X as normalizeHexColor, Y as paintGradientMappingFor, Z as paintSourceColor, _ as paintSourceCss, $ as parsePaintSource, a0 as readPaintSource, a1 as removePaintGradientStop, a2 as resolvePaintGradient, a3 as reversePaintGradient, a4 as scalePaintGradient, a5 as solidPaint, a6 as updatePaintGradientStop } from '../blending-D7jCmjO6.cjs';
6
- import { W as WetWorld, c as WetTilt, d as WetParams, e as WetFlowSpec, f as WetWorldOptions, g as WetGpuProvider, h as WetBackendInfo, i as WetSnapshot, j as WetPaperInput } from '../rand-Cw9VLrVC.cjs';
7
- export { D as DEFAULT_FLOW, k as DEFAULT_WET_PARAMS, l as WET_FLOW_KINDS, m as WET_PARAM_KEYS, n as WetFlowKind, o as WetSupport, p as hash2, q as mix32, r as normalizeFlow, s as normalizeWetParams, t as rand01, w as wetSupport } from '../rand-Cw9VLrVC.cjs';
6
+ import { P as PaintBrush, a as PenPoint, S as StrokeCopy, W as WetMediumKind, b as Sticker, M as MultiColorSettings, c as PaintBrushInput, B as BrushLibraryFile, I as ImpastoTool, d as ParticleKind, e as ParticleRender, f as StampKind, g as WetTool } from '../brushes-DnIdJYxN.cjs';
7
+ export { h as BRUSH_ID, i as BRUSH_ROTATIONS, j as BUILTIN_BRUSHES, k as BristleSettings, l as BristleStroke, m as BrushBehavior, n as BrushBehaviorInput, o as BrushDynamics, p as BrushRotation, C as CoverageStroke, D as DEFAULT_BEHAVIOR, q as DEFAULT_BRISTLE, r as DEFAULT_BRUSH_ID, s as DEFAULT_DYNAMICS, t as DEFAULT_IMPASTO, u as DEFAULT_MULTI_COLOR, v as DEFAULT_PARTICLE, w as DEFAULT_STICKER, x as DEFAULT_WET_BRUSH, y as DryStroke, z as DryStrokeOptions, A as IDENTITY_COPY, E as IMPASTO_TOOLS, F as ImpastoSettings, L as Linear2, G as MULTI_COLOR_MODES, H as MultiColorMode, J as PAINT_BRUSH_CATEGORIES, K as PAINT_BRUSH_ENGINES, N as PARTICLE_KINDS, O as PARTICLE_RENDERS, Q as PaintBrushCategory, R as PaintBrushEngine, T as ParticleSettings, U as ParticleStroke, V as PenDab, X as PenDabWalker, Y as PenSmoother, Z as ProceduralStrokeOptions, _ as STAMP_KINDS, $ as StickerSettings, a0 as StickerSpray, a1 as StickerSprayInit, a2 as WET_MEDIA, a3 as WET_TOOLS, a4 as WetBrushSettings, a5 as brushTakesPaint, a6 as brushToJSON, a7 as drawSticker, a8 as isWetBrush, a9 as isWetCapable, aa as mixerTip, ab as multiColorToPaint, ac as normalizeBehavior, ad as normalizeBristle, ae as normalizeDynamics, af as normalizeImpasto, ag as normalizeMultiColor, ah as normalizePaintBrush, ai as normalizeParticle, aj as normalizeStickerSettings, ak as normalizeStickerUpdate, al as normalizeWetBrush, am as paintToMultiColor, an as parseBrushLibrary, ao as penOrientation, ap as renderStickers, aq as stampCoverage, ar as stickerRect, as as stickerSurface, at as tiltToOrientation, au as toStrokePoint, av as usesPaintExchange } from '../brushes-DnIdJYxN.cjs';
8
8
  import { R as RasterRect, T as TiledSurface, a as BlendMode, b as BlendModeInfo } from '../surface-1MRncXpF.cjs';
9
9
  export { B as BLEND_MODES, P as PAINTERLY_BLEND_MODES, i as Tile, v as isBlendMode, w as isPainterlyBlendMode, I as standardBlendMode } from '../surface-1MRncXpF.cjs';
10
10
  import { e as EffectValue, E as EffectProvider, f as EffectDescription, a as EffectRenderRequest, b as EffectPixels, v as EffectsSlot } from '../helpers-v6GMazzg.cjs';
11
- import { I as ImageEditorAssetStore, S as SerializedLayer, P as PsdExportResult } from '../export-CyJdfP_Z.cjs';
11
+ import { I as ImageEditorAssetStore, S as SerializedLayer, P as PsdExportResult } from '../export-DuN3dpCg.cjs';
12
12
  import { V as VideoProject, D as VideoFfmpegExport } from '../export-D9mXp05Q.cjs';
13
13
  import { g as PresenceStore, e as PresenceClock, d as PresenceActorInfo, c as PresenceActor, f as PresenceState } from '../presence-Cb6WhcrQ.cjs';
14
14
  import { a as AgentToolProvider, A as AgentTool } from '../registry-BqA1AZt0.cjs';
@@ -20,33 +20,79 @@ import '../provenance-DmlcgdzT.cjs';
20
20
  import '../sourcemap-C8AH3MBQ.cjs';
21
21
  import '../tokens-D7yXvUU6.cjs';
22
22
  import '../builtin-CY97ppKM.cjs';
23
- import '../bezier-CZ2AhjID.cjs';
24
- import '../brushTypes-C7N3EBK7.cjs';
25
- import '../warp-DTOp0lON.cjs';
23
+ import '../bezier-CUaH8hcK.cjs';
24
+ import '../brushTypes-MX5UVs_m.cjs';
25
+ import '../warp-C7rMWUgW.cjs';
26
26
 
27
27
  /**
28
- * Seeded, deterministic noise for paper grain and brush jitter (photocraft's counter-based
29
- * randomness and tileable value noise, on 32-bit integer hashes instead of 64-bit ones so it runs
30
- * fast in JavaScript). Every value is a pure function of its inputs, so a paper or a stroke
31
- * regenerates identically on every machine.
28
+ * Paper: a generated grain height map (0 = valley, 1 = peak) that tiles across the canvas, a paper
29
+ * colour, grain depth, and the three properties wet media will read later (absorption,
30
+ * permeability, roughness). Dry media catch the peaks: a light stroke only marks the high grain, a
31
+ * firm one fills the valleys too. Everything is generated from a pattern and a seed, so a paper is
32
+ * a few numbers in the document, never a bitmap, and no third-party texture is bundled.
32
33
  */
33
34
 
34
- /** Uniform in [-1, 1). */
35
- declare function randSigned(seed: number, index: number, stream: number): number;
36
- /** A seed from a string (FNV-1a, then mixed). */
37
- declare function seedFromString(text: string): number;
35
+ /** Paper families, as a library groups them. */
36
+ type PaperFamily = 'watercolor' | 'drawing' | 'pastel' | 'canvas' | 'panel' | 'smooth';
37
+ declare const PAPER_FAMILIES: readonly PaperFamily[];
38
+ interface PaperSettings {
39
+ /** The library preset this paper started from (`custom` when it matches none). */
40
+ preset: string;
41
+ name: string;
42
+ family: PaperFamily;
43
+ pattern: GrainPattern;
44
+ /** Grain seed: another seed gives another sheet of the same paper. */
45
+ seed: number;
46
+ /** Paper colour #rrggbb. */
47
+ color: string;
48
+ /** Grain scale: 1 is the pattern's natural size, 2 twice as coarse (0.25..8). */
49
+ scale: number;
50
+ /** How the grain tile repeats: `repeat` or `mirror` (alternate tiles flipped, so seams vanish). */
51
+ tiling: PaperTiling;
52
+ /** Grain depth 0..1: how much grain-responsive dry media skip the valleys (0: none). */
53
+ depth: number;
54
+ /** How much the grain shades the paper colour on screen and in exports, 0..1. */
55
+ shading: number;
56
+ /** The height map as dry media read it. */
57
+ dry: GrainTuning;
58
+ /** The height map as wet media will read it (stored now; wet media is a later phase). */
59
+ wet: GrainTuning;
60
+ /** Wet media: how fast the paper takes up water, 0..1. */
61
+ absorption: number;
62
+ /** Wet media: how far water spreads inside the paper, 0..1. */
63
+ permeability: number;
64
+ /** Wet media: how much the grain catches pigment, 0..1. */
65
+ roughness: number;
66
+ /** Metallic paper (gold or silver leaf, pearlescent card): the grain catches the light, 0..1 (default 0). */
67
+ metallic?: number;
68
+ }
69
+ type PaperPreset = PaperSettings;
70
+ /** The built-in paper library: generated papers in families. */
71
+ declare const PAPER_LIBRARY: readonly PaperPreset[];
72
+ declare const DEFAULT_PAPER: Readonly<PaperSettings>;
73
+ /** A paper from the library by id, or `undefined`. */
74
+ declare function paperPreset(id: string): PaperSettings | undefined;
75
+ declare function clonePaper(p: PaperSettings): PaperSettings;
38
76
  /**
39
- * Tileable fractal value noise in 0..1 over a `size`-pixel square: `cellsX × cellsY` lattice cells
40
- * at the base octave (unequal counts give fibres and streaks), doubling per octave, so the result
41
- * repeats exactly every `size` pixels.
77
+ * A paper with every field in range. Missing fields come from `base` (default: the library preset
78
+ * named by `raw.preset`, else cold pressed).
42
79
  */
43
- declare class TileableNoise {
44
- readonly size: number;
45
- private readonly octaves;
46
- constructor(size: number, cellsX: number, cellsY: number, octaves: number, salt: number);
47
- /** Fractal noise at pixel (x, y). */
48
- at(x: number, y: number): number;
49
- }
80
+ declare function normalizePaper(raw?: Partial<PaperSettings> | Record<string, unknown>, base?: PaperSettings): PaperSettings;
81
+ /** `#rrggbb` → [r, g, b] 0..255. */
82
+ declare function hexToRgb8(hex: string): [number, number, number];
83
+ /**
84
+ * The paper as opaque RGBA over `rect` (document pixels): its colour, darkened in the valleys by
85
+ * `shading`.
86
+ */
87
+ declare function renderPaper(paper: PaperSettings, rect: {
88
+ x: number;
89
+ y: number;
90
+ width: number;
91
+ height: number;
92
+ }, grain?: PaperGrain, light?: {
93
+ azimuth: number;
94
+ elevation: number;
95
+ }): Uint8ClampedArray;
50
96
 
51
97
  /**
52
98
  * Painting guides: mirror and kaleidoscope symmetry (every stroke paints its reflected or rotated
@@ -2998,4 +3044,4 @@ declare const PAPER_TARGET = "paper";
2998
3044
  /** The effect tools for a paint editor (see the module comment). */
2999
3045
  declare function createPaintEffectsToolProvider(controller: PaintEditorController, options?: PaintEffectsToolProviderOptions): AgentToolProvider;
3000
3046
 
3001
- export { type Affine, BLEND_MENU_GROUPS, BRUSH_SLIDERS, type BlendMenuGroup, BlendMode, BlendModeInfo, type BrushEngineControls, BrushLibraryFile, type BrushThumbnail, type ColorWheel, DEFAULT_DPI, DEFAULT_LIGHTING, DEFAULT_SWATCHES, DEFAULT_VIEW, type FillLayerOptions, GPU_LEAD, HARMONY_KINDS, type Hand, type HarmonyColor, type HarmonyKind, IDENTITY_AFFINE, IMPASTO_TOOL_LABELS, type ImageEncoder, type ImageFormat, type ImageNode, ImpastoTool, LIGHT_SLIDERS, type LayerUpdate, LitCache, type LoadedPaintDocument, MAX_CANVAS_SIDE, MAX_COORDINATE, MAX_IMAGE_SIDE, MAX_ZOOM, MIN_CANVAS_SIDE, MIN_ZOOM, MIXING_PAD_HEIGHT, MIXING_PAD_WIDTH, MixingPad, type MixingPadTool, MultiColorSettings, PAD_SAMPLE_SIZES, PAINT_EFFECT_PLACES, PAINT_FORMAT, PAINT_SCHEMA_VERSION, PAINT_TOOLS, PAPER_EFFECT_BLENDS, PAPER_EFFECT_NODE_ID, PAPER_NODE_ID, PAPER_SLIDERS, PAPER_TARGET, PARTICLE_KIND_LABELS, PARTICLE_RENDER_LABELS, type PadMixOptions, type PadMixPart, type Paint2DContext, type PaintAgentCommand, type PaintAssetStore, PaintBrush, PaintBrushInput, type PaintCanvas, PaintCanvasPresenter, PaintDabStroke, type PaintDabStrokeOptions, PaintDirector, type PaintDirectorOptions, PaintDocumentError, type PaintDocumentExtensions, type PaintDocumentState, PaintEditorController, PaintEditorError, type PaintEditorOptions, type PaintEditorState, type PaintEditorToolProviderOptions, type PaintEffectPlace, type PaintEffectSource, PaintEffectsRenderer, type PaintEffectsToolProviderOptions, type PaintEvent, PaintGesture, PaintGradientSource, type PaintGroupLayer, type PaintGuides, type PaintLayer, type PaintLayerInfo, type PaintLighting, type PaintPaperEffect, type PaintPerformanceResult, type PaintPixelLayer, type PaintPointerEvent, PaintPresence, type PaintPresenceActor, type PaintPresenceState, type PaintReplayOptions, PaintSource, type PaintStrokeInit, type PaintStrokeResult, PaintStrokeSession, type PaintTool, type PaintView, type PaintWetHost, PaintWetLayers, type PaintWetOptions, type PaintWetStateInfo, type PaperEffectBlend, PaperGrain, type PaperNode, PaperSettings, ParticleKind, ParticleRender, PenPoint, type PerspectiveGuide, PerspectiveSnapper, type PixelImage, type Point2, type PointerSample, type RecordedStroke, type ReferenceImage, type RenderOptions, type ReplayFrame, type ReplayOptions, type Rgb255, SNAP_DECIDE_DISTANCE, STAMP_LABELS, STENCIL_KINDS, STENCIL_SHAPES, STICKER_SLIDERS, SYMMETRY_MODES, type SavedMixingPadInfo, type SavedThickChannels, type SerializeOptions, type SerializedPaintDocument, type SliderControl, StampKind, type Stencil, type StencilInput, type StencilKind, type StencilShape, StencilSnapper, Sticker, StrokeCopy, type StrokeSessionHost, type StrokeSessionInit, type StrokeVariation, type Swatch, type SymmetryGuide, type SymmetryMode, TRACING_NODE_ID, type ThickChannels, ThickStrokeDriver, type ThickStrokeInit, TileableNoise, type TimeLapse, type TimeLapseOptions, type TracingImage, type ViewLayer, type ViewportBox, WET_GPU_MODES, WET_GPU_OPTIONS, WET_MEDIUM_LABELS, WET_MEDIUM_PARAMS, WET_PARAM_SCHEMA, WET_PARAM_SLIDERS, WET_SPEED_SLIDER, WET_TILT_SLIDERS, WET_TOOL_LABELS, WetBackendInfo, type WetEngineInfo, type WetEvent, WetFlowSpec, type WetGpuMode, type WetLayerInfo, type WetLayerSettings, WetMediumKind, WetParams, WetStrokeDriver, type WetStrokeInit, WetTilt, WetTool, affineCopy, applyAffine, brushEngineControls, brushLoadColor, brushLoadForStroke, buildTimeLapse, checkPaintEffectPlace, colorHarmony, composeAffine, contactSheet, createPaintCompositor, createPaintDocument, createPaintEditorToolProvider, createPaintEffectsToolProvider, createPaintLayer, createPaintReplayTools, createPaintStickerTools, createPaintThickTools, createPaintWetTools, decodeImageBlob, defaultGuides, defaultImageEncoder, deserializePaintDocument, deserializePaintDocumentAsync, documentExtensions, documentToScreen, downloadBytes, downsampleRgba, drawWaterOverlay, effectLayersToJSON, emptiedLayers, emptyThickChannels, fitZoom, guideOverlay, handlePaintShortcut, hslToRgb, hsvToRgb, hueToWheel, invertAffine, isPalmTouch, lightTile, lightingKey, mapPenPoint, mixPixels, mixerLoadForStroke, multiColorForDab, multiColorGradient, multiColorPalette, multiColorSliders, newPaintLayerId, nextPaperEffectVersion, normalizeBrushStroke, normalizeCanvas, normalizeLighting, normalizePerspective, normalizeRotation, normalizeStencil, normalizeSymmetry, normalizeView, overPixels, padSampleRadius, paperEffectFromJSON, paperEffectToJSON, paperGrain, paperKey, paperNode, parseHexColor, patchBrushValue, patchPath, perspectiveDirections, perspectiveGuideLines, pointerToPenPoint, quickStencil, randSigned, readPaintEffectSource, readPath, readSwatch, reliefInfo, renderBrushThumbnail, renderColorWheel, replayFrame, replayItems, replayPainting, rgbToHexColor, rgbToHsl, rgbToHsv, samplePressure, scaleStencil, screenToDocument, seedFromString, serializePaintDocument, serializePaintDocumentExternal, startWetClock, stencilMask, stencilOutline, strokeBounds, strokeDuration, strokeSchedule, sweepPath, symmetryAxisAngles, symmetryAxisSegments, symmetryCopies, thickFromJSON, thickToJSON, thumbnailStroke, timeLapseVideo, timeLapseZip, toggleStamp, variationAffine, varyStroke, viewCssTransform, viewMatrix, viewPenToDocument, wetEngineSummary, wetPaperInput, wetPigmentOf, wheelAngle, wheelPick, wheelPoint, wheelToHue };
3047
+ export { type Affine, BLEND_MENU_GROUPS, BRUSH_SLIDERS, type BlendMenuGroup, BlendMode, BlendModeInfo, type BrushEngineControls, BrushLibraryFile, type BrushThumbnail, type ColorWheel, DEFAULT_DPI, DEFAULT_LIGHTING, DEFAULT_PAPER, DEFAULT_SWATCHES, DEFAULT_VIEW, type FillLayerOptions, GPU_LEAD, GrainPattern, GrainTuning, HARMONY_KINDS, type Hand, type HarmonyColor, type HarmonyKind, IDENTITY_AFFINE, IMPASTO_TOOL_LABELS, type ImageEncoder, type ImageFormat, type ImageNode, ImpastoTool, LIGHT_SLIDERS, type LayerUpdate, LitCache, type LoadedPaintDocument, MAX_CANVAS_SIDE, MAX_COORDINATE, MAX_IMAGE_SIDE, MAX_ZOOM, MIN_CANVAS_SIDE, MIN_ZOOM, MIXING_PAD_HEIGHT, MIXING_PAD_WIDTH, MixingPad, type MixingPadTool, MultiColorSettings, PAD_SAMPLE_SIZES, PAINT_EFFECT_PLACES, PAINT_FORMAT, PAINT_SCHEMA_VERSION, PAINT_TOOLS, PAPER_EFFECT_BLENDS, PAPER_EFFECT_NODE_ID, PAPER_FAMILIES, PAPER_LIBRARY, PAPER_NODE_ID, PAPER_SLIDERS, PAPER_TARGET, PARTICLE_KIND_LABELS, PARTICLE_RENDER_LABELS, type PadMixOptions, type PadMixPart, type Paint2DContext, type PaintAgentCommand, type PaintAssetStore, PaintBrush, PaintBrushInput, type PaintCanvas, PaintCanvasPresenter, PaintDabStroke, type PaintDabStrokeOptions, PaintDirector, type PaintDirectorOptions, PaintDocumentError, type PaintDocumentExtensions, type PaintDocumentState, PaintEditorController, PaintEditorError, type PaintEditorOptions, type PaintEditorState, type PaintEditorToolProviderOptions, type PaintEffectPlace, type PaintEffectSource, PaintEffectsRenderer, type PaintEffectsToolProviderOptions, type PaintEvent, PaintGesture, PaintGradientSource, type PaintGroupLayer, type PaintGuides, type PaintLayer, type PaintLayerInfo, type PaintLighting, type PaintPaperEffect, type PaintPerformanceResult, type PaintPixelLayer, type PaintPointerEvent, PaintPresence, type PaintPresenceActor, type PaintPresenceState, type PaintReplayOptions, PaintSource, type PaintStrokeInit, type PaintStrokeResult, PaintStrokeSession, type PaintTool, type PaintView, type PaintWetHost, PaintWetLayers, type PaintWetOptions, type PaintWetStateInfo, type PaperEffectBlend, type PaperFamily, PaperGrain, type PaperNode, type PaperSettings, PaperTiling, ParticleKind, ParticleRender, PenPoint, type PerspectiveGuide, PerspectiveSnapper, type PixelImage, type Point2, type PointerSample, type RecordedStroke, type ReferenceImage, type RenderOptions, type ReplayFrame, type ReplayOptions, type Rgb255, SNAP_DECIDE_DISTANCE, STAMP_LABELS, STENCIL_KINDS, STENCIL_SHAPES, STICKER_SLIDERS, SYMMETRY_MODES, type SavedMixingPadInfo, type SavedThickChannels, type SerializeOptions, type SerializedPaintDocument, type SliderControl, StampKind, type Stencil, type StencilInput, type StencilKind, type StencilShape, StencilSnapper, Sticker, StrokeCopy, type StrokeSessionHost, type StrokeSessionInit, type StrokeVariation, type Swatch, type SymmetryGuide, type SymmetryMode, TRACING_NODE_ID, type ThickChannels, ThickStrokeDriver, type ThickStrokeInit, type TimeLapse, type TimeLapseOptions, type TracingImage, type ViewLayer, type ViewportBox, WET_GPU_MODES, WET_GPU_OPTIONS, WET_MEDIUM_LABELS, WET_MEDIUM_PARAMS, WET_PARAM_SCHEMA, WET_PARAM_SLIDERS, WET_SPEED_SLIDER, WET_TILT_SLIDERS, WET_TOOL_LABELS, WetBackendInfo, type WetEngineInfo, type WetEvent, WetFlowSpec, type WetGpuMode, type WetLayerInfo, type WetLayerSettings, WetMediumKind, WetParams, WetStrokeDriver, type WetStrokeInit, WetTilt, WetTool, affineCopy, applyAffine, brushEngineControls, brushLoadColor, brushLoadForStroke, buildTimeLapse, checkPaintEffectPlace, clonePaper, colorHarmony, composeAffine, contactSheet, createPaintCompositor, createPaintDocument, createPaintEditorToolProvider, createPaintEffectsToolProvider, createPaintLayer, createPaintReplayTools, createPaintStickerTools, createPaintThickTools, createPaintWetTools, decodeImageBlob, defaultGuides, defaultImageEncoder, deserializePaintDocument, deserializePaintDocumentAsync, documentExtensions, documentToScreen, downloadBytes, downsampleRgba, drawWaterOverlay, effectLayersToJSON, emptiedLayers, emptyThickChannels, fitZoom, guideOverlay, handlePaintShortcut, hexToRgb8, hslToRgb, hsvToRgb, hueToWheel, invertAffine, isPalmTouch, lightTile, lightingKey, mapPenPoint, mixPixels, mixerLoadForStroke, multiColorForDab, multiColorGradient, multiColorPalette, multiColorSliders, newPaintLayerId, nextPaperEffectVersion, normalizeBrushStroke, normalizeCanvas, normalizeLighting, normalizePaper, normalizePerspective, normalizeRotation, normalizeStencil, normalizeSymmetry, normalizeView, overPixels, padSampleRadius, paperEffectFromJSON, paperEffectToJSON, paperGrain, paperKey, paperNode, paperPreset, parseHexColor, patchBrushValue, patchPath, perspectiveDirections, perspectiveGuideLines, pointerToPenPoint, quickStencil, readPaintEffectSource, readPath, readSwatch, reliefInfo, renderBrushThumbnail, renderColorWheel, renderPaper, replayFrame, replayItems, replayPainting, rgbToHexColor, rgbToHsl, rgbToHsv, samplePressure, scaleStencil, screenToDocument, serializePaintDocument, serializePaintDocumentExternal, startWetClock, stencilMask, stencilOutline, strokeBounds, strokeDuration, strokeSchedule, sweepPath, symmetryAxisAngles, symmetryAxisSegments, symmetryCopies, thickFromJSON, thickToJSON, thumbnailStroke, timeLapseVideo, timeLapseZip, toggleStamp, variationAffine, varyStroke, viewCssTransform, viewMatrix, viewPenToDocument, wetEngineSummary, wetPaperInput, wetPigmentOf, wheelAngle, wheelPick, wheelPoint, wheelToHue };
@@ -1,14 +1,14 @@
1
- import { P as PaintBrush, a as PenPoint, S as StrokeCopy, b as PaperGrain, c as PaperSettings, W as WetMediumKind, d as Sticker, M as MultiColorSettings, e as PaintBrushInput, B as BrushLibraryFile, I as ImpastoTool, f as ParticleKind, g as ParticleRender, h as StampKind, i as WetTool } from '../brushes-DJmUbIgz.js';
2
- export { j as BRUSH_ID, k as BRUSH_ROTATIONS, l as BUILTIN_BRUSHES, m as BristleSettings, n as BristleStroke, o as BrushBehavior, p as BrushBehaviorInput, q as BrushDynamics, r as BrushRotation, C as CoverageStroke, D as DEFAULT_BEHAVIOR, s as DEFAULT_BRISTLE, t as DEFAULT_BRUSH_ID, u as DEFAULT_DYNAMICS, v as DEFAULT_IMPASTO, w as DEFAULT_MULTI_COLOR, x as DEFAULT_PAPER, y as DEFAULT_PARTICLE, z as DEFAULT_STICKER, A as DEFAULT_WET_BRUSH, E as DryStroke, F as DryStrokeOptions, G as GRAIN_PATTERNS, H as GRAIN_TILE, J as GrainPattern, K as GrainTuning, L as IDENTITY_COPY, N as IMPASTO_TOOLS, O as ImpastoSettings, Q as Linear2, R as MULTI_COLOR_MODES, T as MultiColorMode, U as PAINT_BRUSH_CATEGORIES, V as PAINT_BRUSH_ENGINES, X as PAPER_FAMILIES, Y as PAPER_LIBRARY, Z as PARTICLE_KINDS, _ as PARTICLE_RENDERS, $ as PaintBrushCategory, a0 as PaintBrushEngine, a1 as PaperFamily, a2 as PaperTiling, a3 as ParticleSettings, a4 as ParticleStroke, a5 as PenDab, a6 as PenDabWalker, a7 as PenSmoother, a8 as ProceduralStrokeOptions, a9 as STAMP_KINDS, aa as StickerSettings, ab as StickerSpray, ac as StickerSprayInit, ad as WET_MEDIA, ae as WET_TOOLS, af as WetBrushSettings, ag as brushTakesPaint, ah as brushToJSON, ai as clonePaper, aj as drawSticker, ak as grainCatch, al as grainHeights, am as hexToRgb8, an as isWetBrush, ao as isWetCapable, ap as mixerTip, aq as multiColorToPaint, ar as normalizeBehavior, as as normalizeBristle, at as normalizeDynamics, au as normalizeImpasto, av as normalizeMultiColor, aw as normalizePaintBrush, ax as normalizePaper, ay as normalizeParticle, az as normalizeStickerSettings, aA as normalizeStickerUpdate, aB as normalizeWetBrush, aC as paintToMultiColor, aD as paperPreset, aE as parseBrushLibrary, aF as penOrientation, aG as renderPaper, aH as renderStickers, aI as stampCoverage, aJ as stickerRect, aK as stickerSurface, aL as tiltToOrientation, aM as toStrokePoint, aN as usesPaintExchange } from '../brushes-DJmUbIgz.js';
1
+ import { W as WetWorld, c as WetTilt, d as WetParams, e as WetFlowSpec, f as WetWorldOptions, g as WetGpuProvider, h as WetBackendInfo, i as WetSnapshot, j as WetPaperInput } from '../rand-DJGxSq9d.js';
2
+ export { D as DEFAULT_FLOW, k as DEFAULT_WET_PARAMS, T as TileableNoise, l as WET_FLOW_KINDS, m as WET_PARAM_KEYS, n as WetFlowKind, o as WetSupport, p as hash2, q as mix32, r as normalizeFlow, s as normalizeWetParams, t as rand01, u as randSigned, v as seedFromString, w as wetSupport } from '../rand-DJGxSq9d.js';
3
+ import { G as GrainPattern, m as PaperTiling, n as GrainTuning, P as PaperGrain, h as MixerLoad, b as PaintGradientSource, R as RgbTriple, a as PaintTileTarget, c as MixingModel, f as PaintSource } from '../grain-COgYMMHv.js';
4
+ export { o as DEFAULT_PAINT_GRADIENT, p as DEFAULT_PAINT_GRADIENT_MAPPING, q as GRAIN_PATTERNS, r as GRAIN_TILE, s as MAX_BRUSH_SIZE, 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, L as PaintGradientKit, N as PaintGradientMapping, O as PaintGradientMappingKind, Q as PaintGradientRepeat, U as PaintGradientSample, V as PaintGradientSampler, W as PaintGradientSpace, X as PaintGradientStop, Y as PaintRgb, Z as PaintSourceError, _ as PaperGrainSettings, $ as addPaintGradientStop, a0 as grainCatch, a1 as grainHeights, a2 as hexToPaintRgb, a3 as isGradientPaint, a4 as normalizeHexColor, a5 as paintGradientMappingFor, a6 as paintSourceColor, a7 as paintSourceCss, a8 as parsePaintSource, a9 as readPaintSource, aa as removePaintGradientStop, ab as resolvePaintGradient, ac as reversePaintGradient, ad as scalePaintGradient, ae as solidPaint, af as updatePaintGradientStop } from '../grain-COgYMMHv.js';
3
5
  import { a1 as RasterLayer, a0 as RasterGroupLayer, a5 as RasterPixelLayer, C as CompositorLayer, a as RasterCompositor, R as RasterSources, U as LayerLocks } from '../deep-wwJa7aR6.js';
4
- import { g as MixerLoad, a as PaintGradientSource, R as RgbTriple, P as PaintTileTarget, b as MixingModel, e as PaintSource } from '../blending-NgF3qo3d.js';
5
- export { l as DEFAULT_PAINT_GRADIENT, m as DEFAULT_PAINT_GRADIENT_MAPPING, n as MAX_BRUSH_SIZE, 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, F as PaintGradientKit, G as PaintGradientMapping, H as PaintGradientMappingKind, I as PaintGradientRepeat, J as PaintGradientSample, K as PaintGradientSampler, L as PaintGradientSpace, N as PaintGradientStop, O as PaintRgb, Q as PaintSourceError, U as addPaintGradientStop, V as hexToPaintRgb, W as isGradientPaint, X as normalizeHexColor, Y as paintGradientMappingFor, Z as paintSourceColor, _ as paintSourceCss, $ as parsePaintSource, a0 as readPaintSource, a1 as removePaintGradientStop, a2 as resolvePaintGradient, a3 as reversePaintGradient, a4 as scalePaintGradient, a5 as solidPaint, a6 as updatePaintGradientStop } from '../blending-NgF3qo3d.js';
6
- import { W as WetWorld, c as WetTilt, d as WetParams, e as WetFlowSpec, f as WetWorldOptions, g as WetGpuProvider, h as WetBackendInfo, i as WetSnapshot, j as WetPaperInput } from '../rand-8xbUb6ur.js';
7
- export { D as DEFAULT_FLOW, k as DEFAULT_WET_PARAMS, l as WET_FLOW_KINDS, m as WET_PARAM_KEYS, n as WetFlowKind, o as WetSupport, p as hash2, q as mix32, r as normalizeFlow, s as normalizeWetParams, t as rand01, w as wetSupport } from '../rand-8xbUb6ur.js';
6
+ import { P as PaintBrush, a as PenPoint, S as StrokeCopy, W as WetMediumKind, b as Sticker, M as MultiColorSettings, c as PaintBrushInput, B as BrushLibraryFile, I as ImpastoTool, d as ParticleKind, e as ParticleRender, f as StampKind, g as WetTool } from '../brushes-B1ABdDAs.js';
7
+ export { h as BRUSH_ID, i as BRUSH_ROTATIONS, j as BUILTIN_BRUSHES, k as BristleSettings, l as BristleStroke, m as BrushBehavior, n as BrushBehaviorInput, o as BrushDynamics, p as BrushRotation, C as CoverageStroke, D as DEFAULT_BEHAVIOR, q as DEFAULT_BRISTLE, r as DEFAULT_BRUSH_ID, s as DEFAULT_DYNAMICS, t as DEFAULT_IMPASTO, u as DEFAULT_MULTI_COLOR, v as DEFAULT_PARTICLE, w as DEFAULT_STICKER, x as DEFAULT_WET_BRUSH, y as DryStroke, z as DryStrokeOptions, A as IDENTITY_COPY, E as IMPASTO_TOOLS, F as ImpastoSettings, L as Linear2, G as MULTI_COLOR_MODES, H as MultiColorMode, J as PAINT_BRUSH_CATEGORIES, K as PAINT_BRUSH_ENGINES, N as PARTICLE_KINDS, O as PARTICLE_RENDERS, Q as PaintBrushCategory, R as PaintBrushEngine, T as ParticleSettings, U as ParticleStroke, V as PenDab, X as PenDabWalker, Y as PenSmoother, Z as ProceduralStrokeOptions, _ as STAMP_KINDS, $ as StickerSettings, a0 as StickerSpray, a1 as StickerSprayInit, a2 as WET_MEDIA, a3 as WET_TOOLS, a4 as WetBrushSettings, a5 as brushTakesPaint, a6 as brushToJSON, a7 as drawSticker, a8 as isWetBrush, a9 as isWetCapable, aa as mixerTip, ab as multiColorToPaint, ac as normalizeBehavior, ad as normalizeBristle, ae as normalizeDynamics, af as normalizeImpasto, ag as normalizeMultiColor, ah as normalizePaintBrush, ai as normalizeParticle, aj as normalizeStickerSettings, ak as normalizeStickerUpdate, al as normalizeWetBrush, am as paintToMultiColor, an as parseBrushLibrary, ao as penOrientation, ap as renderStickers, aq as stampCoverage, ar as stickerRect, as as stickerSurface, at as tiltToOrientation, au as toStrokePoint, av as usesPaintExchange } from '../brushes-B1ABdDAs.js';
8
8
  import { R as RasterRect, T as TiledSurface, a as BlendMode, b as BlendModeInfo } from '../surface-1MRncXpF.js';
9
9
  export { B as BLEND_MODES, P as PAINTERLY_BLEND_MODES, i as Tile, v as isBlendMode, w as isPainterlyBlendMode, I as standardBlendMode } from '../surface-1MRncXpF.js';
10
10
  import { e as EffectValue, E as EffectProvider, f as EffectDescription, a as EffectRenderRequest, b as EffectPixels, v as EffectsSlot } from '../helpers-C-RgeyvH.js';
11
- import { I as ImageEditorAssetStore, S as SerializedLayer, P as PsdExportResult } from '../export-DwnZ_hvQ.js';
11
+ import { I as ImageEditorAssetStore, S as SerializedLayer, P as PsdExportResult } from '../export-BwFRiItd.js';
12
12
  import { V as VideoProject, D as VideoFfmpegExport } from '../export-41rL6Cne.js';
13
13
  import { g as PresenceStore, e as PresenceClock, d as PresenceActorInfo, c as PresenceActor, f as PresenceState } from '../presence-Cb6WhcrQ.js';
14
14
  import { a as AgentToolProvider, A as AgentTool } from '../registry-D-4fit9C.js';
@@ -20,33 +20,79 @@ import '../provenance-uh5r2TQ8.js';
20
20
  import '../sourcemap-DA1Evhrv.js';
21
21
  import '../tokens-D7yXvUU6.js';
22
22
  import '../builtin-CY97ppKM.js';
23
- import '../bezier-Dywv3Bw8.js';
24
- import '../brushTypes-C7N3EBK7.js';
25
- import '../warp-pd7hrH4T.js';
23
+ import '../bezier-DPmdGwgR.js';
24
+ import '../brushTypes-MX5UVs_m.js';
25
+ import '../warp-Doasjpyr.js';
26
26
 
27
27
  /**
28
- * Seeded, deterministic noise for paper grain and brush jitter (photocraft's counter-based
29
- * randomness and tileable value noise, on 32-bit integer hashes instead of 64-bit ones so it runs
30
- * fast in JavaScript). Every value is a pure function of its inputs, so a paper or a stroke
31
- * regenerates identically on every machine.
28
+ * Paper: a generated grain height map (0 = valley, 1 = peak) that tiles across the canvas, a paper
29
+ * colour, grain depth, and the three properties wet media will read later (absorption,
30
+ * permeability, roughness). Dry media catch the peaks: a light stroke only marks the high grain, a
31
+ * firm one fills the valleys too. Everything is generated from a pattern and a seed, so a paper is
32
+ * a few numbers in the document, never a bitmap, and no third-party texture is bundled.
32
33
  */
33
34
 
34
- /** Uniform in [-1, 1). */
35
- declare function randSigned(seed: number, index: number, stream: number): number;
36
- /** A seed from a string (FNV-1a, then mixed). */
37
- declare function seedFromString(text: string): number;
35
+ /** Paper families, as a library groups them. */
36
+ type PaperFamily = 'watercolor' | 'drawing' | 'pastel' | 'canvas' | 'panel' | 'smooth';
37
+ declare const PAPER_FAMILIES: readonly PaperFamily[];
38
+ interface PaperSettings {
39
+ /** The library preset this paper started from (`custom` when it matches none). */
40
+ preset: string;
41
+ name: string;
42
+ family: PaperFamily;
43
+ pattern: GrainPattern;
44
+ /** Grain seed: another seed gives another sheet of the same paper. */
45
+ seed: number;
46
+ /** Paper colour #rrggbb. */
47
+ color: string;
48
+ /** Grain scale: 1 is the pattern's natural size, 2 twice as coarse (0.25..8). */
49
+ scale: number;
50
+ /** How the grain tile repeats: `repeat` or `mirror` (alternate tiles flipped, so seams vanish). */
51
+ tiling: PaperTiling;
52
+ /** Grain depth 0..1: how much grain-responsive dry media skip the valleys (0: none). */
53
+ depth: number;
54
+ /** How much the grain shades the paper colour on screen and in exports, 0..1. */
55
+ shading: number;
56
+ /** The height map as dry media read it. */
57
+ dry: GrainTuning;
58
+ /** The height map as wet media will read it (stored now; wet media is a later phase). */
59
+ wet: GrainTuning;
60
+ /** Wet media: how fast the paper takes up water, 0..1. */
61
+ absorption: number;
62
+ /** Wet media: how far water spreads inside the paper, 0..1. */
63
+ permeability: number;
64
+ /** Wet media: how much the grain catches pigment, 0..1. */
65
+ roughness: number;
66
+ /** Metallic paper (gold or silver leaf, pearlescent card): the grain catches the light, 0..1 (default 0). */
67
+ metallic?: number;
68
+ }
69
+ type PaperPreset = PaperSettings;
70
+ /** The built-in paper library: generated papers in families. */
71
+ declare const PAPER_LIBRARY: readonly PaperPreset[];
72
+ declare const DEFAULT_PAPER: Readonly<PaperSettings>;
73
+ /** A paper from the library by id, or `undefined`. */
74
+ declare function paperPreset(id: string): PaperSettings | undefined;
75
+ declare function clonePaper(p: PaperSettings): PaperSettings;
38
76
  /**
39
- * Tileable fractal value noise in 0..1 over a `size`-pixel square: `cellsX × cellsY` lattice cells
40
- * at the base octave (unequal counts give fibres and streaks), doubling per octave, so the result
41
- * repeats exactly every `size` pixels.
77
+ * A paper with every field in range. Missing fields come from `base` (default: the library preset
78
+ * named by `raw.preset`, else cold pressed).
42
79
  */
43
- declare class TileableNoise {
44
- readonly size: number;
45
- private readonly octaves;
46
- constructor(size: number, cellsX: number, cellsY: number, octaves: number, salt: number);
47
- /** Fractal noise at pixel (x, y). */
48
- at(x: number, y: number): number;
49
- }
80
+ declare function normalizePaper(raw?: Partial<PaperSettings> | Record<string, unknown>, base?: PaperSettings): PaperSettings;
81
+ /** `#rrggbb` → [r, g, b] 0..255. */
82
+ declare function hexToRgb8(hex: string): [number, number, number];
83
+ /**
84
+ * The paper as opaque RGBA over `rect` (document pixels): its colour, darkened in the valleys by
85
+ * `shading`.
86
+ */
87
+ declare function renderPaper(paper: PaperSettings, rect: {
88
+ x: number;
89
+ y: number;
90
+ width: number;
91
+ height: number;
92
+ }, grain?: PaperGrain, light?: {
93
+ azimuth: number;
94
+ elevation: number;
95
+ }): Uint8ClampedArray;
50
96
 
51
97
  /**
52
98
  * Painting guides: mirror and kaleidoscope symmetry (every stroke paints its reflected or rotated
@@ -2998,4 +3044,4 @@ declare const PAPER_TARGET = "paper";
2998
3044
  /** The effect tools for a paint editor (see the module comment). */
2999
3045
  declare function createPaintEffectsToolProvider(controller: PaintEditorController, options?: PaintEffectsToolProviderOptions): AgentToolProvider;
3000
3046
 
3001
- export { type Affine, BLEND_MENU_GROUPS, BRUSH_SLIDERS, type BlendMenuGroup, BlendMode, BlendModeInfo, type BrushEngineControls, BrushLibraryFile, type BrushThumbnail, type ColorWheel, DEFAULT_DPI, DEFAULT_LIGHTING, DEFAULT_SWATCHES, DEFAULT_VIEW, type FillLayerOptions, GPU_LEAD, HARMONY_KINDS, type Hand, type HarmonyColor, type HarmonyKind, IDENTITY_AFFINE, IMPASTO_TOOL_LABELS, type ImageEncoder, type ImageFormat, type ImageNode, ImpastoTool, LIGHT_SLIDERS, type LayerUpdate, LitCache, type LoadedPaintDocument, MAX_CANVAS_SIDE, MAX_COORDINATE, MAX_IMAGE_SIDE, MAX_ZOOM, MIN_CANVAS_SIDE, MIN_ZOOM, MIXING_PAD_HEIGHT, MIXING_PAD_WIDTH, MixingPad, type MixingPadTool, MultiColorSettings, PAD_SAMPLE_SIZES, PAINT_EFFECT_PLACES, PAINT_FORMAT, PAINT_SCHEMA_VERSION, PAINT_TOOLS, PAPER_EFFECT_BLENDS, PAPER_EFFECT_NODE_ID, PAPER_NODE_ID, PAPER_SLIDERS, PAPER_TARGET, PARTICLE_KIND_LABELS, PARTICLE_RENDER_LABELS, type PadMixOptions, type PadMixPart, type Paint2DContext, type PaintAgentCommand, type PaintAssetStore, PaintBrush, PaintBrushInput, type PaintCanvas, PaintCanvasPresenter, PaintDabStroke, type PaintDabStrokeOptions, PaintDirector, type PaintDirectorOptions, PaintDocumentError, type PaintDocumentExtensions, type PaintDocumentState, PaintEditorController, PaintEditorError, type PaintEditorOptions, type PaintEditorState, type PaintEditorToolProviderOptions, type PaintEffectPlace, type PaintEffectSource, PaintEffectsRenderer, type PaintEffectsToolProviderOptions, type PaintEvent, PaintGesture, PaintGradientSource, type PaintGroupLayer, type PaintGuides, type PaintLayer, type PaintLayerInfo, type PaintLighting, type PaintPaperEffect, type PaintPerformanceResult, type PaintPixelLayer, type PaintPointerEvent, PaintPresence, type PaintPresenceActor, type PaintPresenceState, type PaintReplayOptions, PaintSource, type PaintStrokeInit, type PaintStrokeResult, PaintStrokeSession, type PaintTool, type PaintView, type PaintWetHost, PaintWetLayers, type PaintWetOptions, type PaintWetStateInfo, type PaperEffectBlend, PaperGrain, type PaperNode, PaperSettings, ParticleKind, ParticleRender, PenPoint, type PerspectiveGuide, PerspectiveSnapper, type PixelImage, type Point2, type PointerSample, type RecordedStroke, type ReferenceImage, type RenderOptions, type ReplayFrame, type ReplayOptions, type Rgb255, SNAP_DECIDE_DISTANCE, STAMP_LABELS, STENCIL_KINDS, STENCIL_SHAPES, STICKER_SLIDERS, SYMMETRY_MODES, type SavedMixingPadInfo, type SavedThickChannels, type SerializeOptions, type SerializedPaintDocument, type SliderControl, StampKind, type Stencil, type StencilInput, type StencilKind, type StencilShape, StencilSnapper, Sticker, StrokeCopy, type StrokeSessionHost, type StrokeSessionInit, type StrokeVariation, type Swatch, type SymmetryGuide, type SymmetryMode, TRACING_NODE_ID, type ThickChannels, ThickStrokeDriver, type ThickStrokeInit, TileableNoise, type TimeLapse, type TimeLapseOptions, type TracingImage, type ViewLayer, type ViewportBox, WET_GPU_MODES, WET_GPU_OPTIONS, WET_MEDIUM_LABELS, WET_MEDIUM_PARAMS, WET_PARAM_SCHEMA, WET_PARAM_SLIDERS, WET_SPEED_SLIDER, WET_TILT_SLIDERS, WET_TOOL_LABELS, WetBackendInfo, type WetEngineInfo, type WetEvent, WetFlowSpec, type WetGpuMode, type WetLayerInfo, type WetLayerSettings, WetMediumKind, WetParams, WetStrokeDriver, type WetStrokeInit, WetTilt, WetTool, affineCopy, applyAffine, brushEngineControls, brushLoadColor, brushLoadForStroke, buildTimeLapse, checkPaintEffectPlace, colorHarmony, composeAffine, contactSheet, createPaintCompositor, createPaintDocument, createPaintEditorToolProvider, createPaintEffectsToolProvider, createPaintLayer, createPaintReplayTools, createPaintStickerTools, createPaintThickTools, createPaintWetTools, decodeImageBlob, defaultGuides, defaultImageEncoder, deserializePaintDocument, deserializePaintDocumentAsync, documentExtensions, documentToScreen, downloadBytes, downsampleRgba, drawWaterOverlay, effectLayersToJSON, emptiedLayers, emptyThickChannels, fitZoom, guideOverlay, handlePaintShortcut, hslToRgb, hsvToRgb, hueToWheel, invertAffine, isPalmTouch, lightTile, lightingKey, mapPenPoint, mixPixels, mixerLoadForStroke, multiColorForDab, multiColorGradient, multiColorPalette, multiColorSliders, newPaintLayerId, nextPaperEffectVersion, normalizeBrushStroke, normalizeCanvas, normalizeLighting, normalizePerspective, normalizeRotation, normalizeStencil, normalizeSymmetry, normalizeView, overPixels, padSampleRadius, paperEffectFromJSON, paperEffectToJSON, paperGrain, paperKey, paperNode, parseHexColor, patchBrushValue, patchPath, perspectiveDirections, perspectiveGuideLines, pointerToPenPoint, quickStencil, randSigned, readPaintEffectSource, readPath, readSwatch, reliefInfo, renderBrushThumbnail, renderColorWheel, replayFrame, replayItems, replayPainting, rgbToHexColor, rgbToHsl, rgbToHsv, samplePressure, scaleStencil, screenToDocument, seedFromString, serializePaintDocument, serializePaintDocumentExternal, startWetClock, stencilMask, stencilOutline, strokeBounds, strokeDuration, strokeSchedule, sweepPath, symmetryAxisAngles, symmetryAxisSegments, symmetryCopies, thickFromJSON, thickToJSON, thumbnailStroke, timeLapseVideo, timeLapseZip, toggleStamp, variationAffine, varyStroke, viewCssTransform, viewMatrix, viewPenToDocument, wetEngineSummary, wetPaperInput, wetPigmentOf, wheelAngle, wheelPick, wheelPoint, wheelToHue };
3047
+ export { type Affine, BLEND_MENU_GROUPS, BRUSH_SLIDERS, type BlendMenuGroup, BlendMode, BlendModeInfo, type BrushEngineControls, BrushLibraryFile, type BrushThumbnail, type ColorWheel, DEFAULT_DPI, DEFAULT_LIGHTING, DEFAULT_PAPER, DEFAULT_SWATCHES, DEFAULT_VIEW, type FillLayerOptions, GPU_LEAD, GrainPattern, GrainTuning, HARMONY_KINDS, type Hand, type HarmonyColor, type HarmonyKind, IDENTITY_AFFINE, IMPASTO_TOOL_LABELS, type ImageEncoder, type ImageFormat, type ImageNode, ImpastoTool, LIGHT_SLIDERS, type LayerUpdate, LitCache, type LoadedPaintDocument, MAX_CANVAS_SIDE, MAX_COORDINATE, MAX_IMAGE_SIDE, MAX_ZOOM, MIN_CANVAS_SIDE, MIN_ZOOM, MIXING_PAD_HEIGHT, MIXING_PAD_WIDTH, MixingPad, type MixingPadTool, MultiColorSettings, PAD_SAMPLE_SIZES, PAINT_EFFECT_PLACES, PAINT_FORMAT, PAINT_SCHEMA_VERSION, PAINT_TOOLS, PAPER_EFFECT_BLENDS, PAPER_EFFECT_NODE_ID, PAPER_FAMILIES, PAPER_LIBRARY, PAPER_NODE_ID, PAPER_SLIDERS, PAPER_TARGET, PARTICLE_KIND_LABELS, PARTICLE_RENDER_LABELS, type PadMixOptions, type PadMixPart, type Paint2DContext, type PaintAgentCommand, type PaintAssetStore, PaintBrush, PaintBrushInput, type PaintCanvas, PaintCanvasPresenter, PaintDabStroke, type PaintDabStrokeOptions, PaintDirector, type PaintDirectorOptions, PaintDocumentError, type PaintDocumentExtensions, type PaintDocumentState, PaintEditorController, PaintEditorError, type PaintEditorOptions, type PaintEditorState, type PaintEditorToolProviderOptions, type PaintEffectPlace, type PaintEffectSource, PaintEffectsRenderer, type PaintEffectsToolProviderOptions, type PaintEvent, PaintGesture, PaintGradientSource, type PaintGroupLayer, type PaintGuides, type PaintLayer, type PaintLayerInfo, type PaintLighting, type PaintPaperEffect, type PaintPerformanceResult, type PaintPixelLayer, type PaintPointerEvent, PaintPresence, type PaintPresenceActor, type PaintPresenceState, type PaintReplayOptions, PaintSource, type PaintStrokeInit, type PaintStrokeResult, PaintStrokeSession, type PaintTool, type PaintView, type PaintWetHost, PaintWetLayers, type PaintWetOptions, type PaintWetStateInfo, type PaperEffectBlend, type PaperFamily, PaperGrain, type PaperNode, type PaperSettings, PaperTiling, ParticleKind, ParticleRender, PenPoint, type PerspectiveGuide, PerspectiveSnapper, type PixelImage, type Point2, type PointerSample, type RecordedStroke, type ReferenceImage, type RenderOptions, type ReplayFrame, type ReplayOptions, type Rgb255, SNAP_DECIDE_DISTANCE, STAMP_LABELS, STENCIL_KINDS, STENCIL_SHAPES, STICKER_SLIDERS, SYMMETRY_MODES, type SavedMixingPadInfo, type SavedThickChannels, type SerializeOptions, type SerializedPaintDocument, type SliderControl, StampKind, type Stencil, type StencilInput, type StencilKind, type StencilShape, StencilSnapper, Sticker, StrokeCopy, type StrokeSessionHost, type StrokeSessionInit, type StrokeVariation, type Swatch, type SymmetryGuide, type SymmetryMode, TRACING_NODE_ID, type ThickChannels, ThickStrokeDriver, type ThickStrokeInit, type TimeLapse, type TimeLapseOptions, type TracingImage, type ViewLayer, type ViewportBox, WET_GPU_MODES, WET_GPU_OPTIONS, WET_MEDIUM_LABELS, WET_MEDIUM_PARAMS, WET_PARAM_SCHEMA, WET_PARAM_SLIDERS, WET_SPEED_SLIDER, WET_TILT_SLIDERS, WET_TOOL_LABELS, WetBackendInfo, type WetEngineInfo, type WetEvent, WetFlowSpec, type WetGpuMode, type WetLayerInfo, type WetLayerSettings, WetMediumKind, WetParams, WetStrokeDriver, type WetStrokeInit, WetTilt, WetTool, affineCopy, applyAffine, brushEngineControls, brushLoadColor, brushLoadForStroke, buildTimeLapse, checkPaintEffectPlace, clonePaper, colorHarmony, composeAffine, contactSheet, createPaintCompositor, createPaintDocument, createPaintEditorToolProvider, createPaintEffectsToolProvider, createPaintLayer, createPaintReplayTools, createPaintStickerTools, createPaintThickTools, createPaintWetTools, decodeImageBlob, defaultGuides, defaultImageEncoder, deserializePaintDocument, deserializePaintDocumentAsync, documentExtensions, documentToScreen, downloadBytes, downsampleRgba, drawWaterOverlay, effectLayersToJSON, emptiedLayers, emptyThickChannels, fitZoom, guideOverlay, handlePaintShortcut, hexToRgb8, hslToRgb, hsvToRgb, hueToWheel, invertAffine, isPalmTouch, lightTile, lightingKey, mapPenPoint, mixPixels, mixerLoadForStroke, multiColorForDab, multiColorGradient, multiColorPalette, multiColorSliders, newPaintLayerId, nextPaperEffectVersion, normalizeBrushStroke, normalizeCanvas, normalizeLighting, normalizePaper, normalizePerspective, normalizeRotation, normalizeStencil, normalizeSymmetry, normalizeView, overPixels, padSampleRadius, paperEffectFromJSON, paperEffectToJSON, paperGrain, paperKey, paperNode, paperPreset, parseHexColor, patchBrushValue, patchPath, perspectiveDirections, perspectiveGuideLines, pointerToPenPoint, quickStencil, readPaintEffectSource, readPath, readSwatch, reliefInfo, renderBrushThumbnail, renderColorWheel, renderPaper, replayFrame, replayItems, replayPainting, rgbToHexColor, rgbToHsl, rgbToHsv, samplePressure, scaleStencil, screenToDocument, serializePaintDocument, serializePaintDocumentExternal, startWetClock, stencilMask, stencilOutline, strokeBounds, strokeDuration, strokeSchedule, sweepPath, symmetryAxisAngles, symmetryAxisSegments, symmetryCopies, thickFromJSON, thickToJSON, thumbnailStroke, timeLapseVideo, timeLapseZip, toggleStamp, variationAffine, varyStroke, viewCssTransform, viewMatrix, viewPenToDocument, wetEngineSummary, wetPaperInput, wetPigmentOf, wheelAngle, wheelPick, wheelPoint, wheelToHue };
@@ -7,7 +7,7 @@ import {
7
7
  resolveExternalAssets,
8
8
  serializeLayers,
9
9
  serializeLayersExternal
10
- } from "../chunk-SYT2TLQF.js";
10
+ } from "../chunk-QBARQGSG.js";
11
11
  import "../chunk-CTTF4KYV.js";
12
12
  import {
13
13
  EffectRendererPool
@@ -54,7 +54,7 @@ import {
54
54
  realPresenceClock,
55
55
  tweenPresenceCursor
56
56
  } from "../chunk-B6DSIEXA.js";
57
- import "../chunk-3D77LOBM.js";
57
+ import "../chunk-V45ZTW4R.js";
58
58
  import {
59
59
  BRUSH_ID,
60
60
  BRUSH_ROTATIONS,
@@ -71,8 +71,6 @@ import {
71
71
  DEFAULT_STICKER,
72
72
  DEFAULT_WET_BRUSH,
73
73
  DryStroke,
74
- GRAIN_PATTERNS,
75
- GRAIN_TILE,
76
74
  IDENTITY_COPY,
77
75
  IMPASTO_TOOLS,
78
76
  MULTI_COLOR_MODES,
@@ -82,21 +80,17 @@ import {
82
80
  PAPER_LIBRARY,
83
81
  PARTICLE_KINDS,
84
82
  PARTICLE_RENDERS,
85
- PaperGrain,
86
83
  ParticleStroke,
87
84
  PenDabWalker,
88
85
  PenSmoother,
89
86
  STAMP_KINDS,
90
87
  StickerSpray,
91
- TileableNoise,
92
88
  WET_MEDIA,
93
89
  WET_TOOLS,
94
90
  brushTakesPaint,
95
91
  brushToJSON,
96
92
  clonePaper,
97
93
  drawSticker,
98
- grainCatch,
99
- grainHeights,
100
94
  hexToRgb8,
101
95
  isWetBrush,
102
96
  isWetCapable,
@@ -117,17 +111,15 @@ import {
117
111
  paperPreset,
118
112
  parseBrushLibrary,
119
113
  penOrientation,
120
- randSigned,
121
114
  renderPaper,
122
115
  renderStickers,
123
- seedFromString,
124
116
  stampCoverage,
125
117
  stickerRect,
126
118
  stickerSurface,
127
119
  tiltToOrientation,
128
120
  toStrokePoint,
129
121
  usesPaintExchange
130
- } from "../chunk-HUO3TI4C.js";
122
+ } from "../chunk-CPSMARTX.js";
131
123
  import "../chunk-A3BVTI3G.js";
132
124
  import "../chunk-YGJIER2R.js";
133
125
  import "../chunk-KHNZ6MOU.js";
@@ -143,6 +135,8 @@ import {
143
135
  DEFAULT_PAINT_GRADIENT,
144
136
  DEFAULT_PAINT_GRADIENT_MAPPING,
145
137
  EMPTY_MIXER_LOAD,
138
+ GRAIN_PATTERNS,
139
+ GRAIN_TILE,
146
140
  MAX_BRUSH_SIZE,
147
141
  MIXING_MODELS,
148
142
  PAINT_COLOR_JSON_SCHEMA,
@@ -160,8 +154,10 @@ import {
160
154
  PaintExchange,
161
155
  PaintGradientSampler,
162
156
  PaintSourceError,
157
+ PaperGrain,
163
158
  SmudgeTip,
164
159
  TileMedium,
160
+ TileableNoise,
165
161
  addPaintGradientStop,
166
162
  applyStrokeToTile,
167
163
  blenderDab,
@@ -169,6 +165,8 @@ import {
169
165
  createBlenderScratch,
170
166
  dabRect,
171
167
  exchangeRates,
168
+ grainCatch,
169
+ grainHeights,
172
170
  hash2,
173
171
  hexToPaintRgb,
174
172
  isGradientPaint,
@@ -181,15 +179,17 @@ import {
181
179
  paintSourceCss,
182
180
  parsePaintSource,
183
181
  rand01,
182
+ randSigned,
184
183
  rasterizeDab,
185
184
  readPaintSource,
186
185
  removePaintGradientStop,
187
186
  resolvePaintGradient,
188
187
  reversePaintGradient,
189
188
  scalePaintGradient,
189
+ seedFromString,
190
190
  solidPaint,
191
191
  updatePaintGradientStop
192
- } from "../chunk-5FSRTP6E.js";
192
+ } from "../chunk-PQFVLOMR.js";
193
193
  import "../chunk-63AZAUSN.js";
194
194
  import {
195
195
  BLEND_MODES,
@@ -1,5 +1,5 @@
1
- import { P as Point } from './brushTypes-C7N3EBK7.cjs';
2
- import { B as BezierPath, P as PolygonBooleanOperation, a as BezierPathInput, b as PolygonFillRule, c as BezierSegment, d as BezierContour } from './bezier-CZ2AhjID.cjs';
1
+ import { P as Point } from './brushTypes-MX5UVs_m.cjs';
2
+ import { B as BezierPath, P as PolygonBooleanOperation, a as BezierPathInput, b as PolygonFillRule, c as BezierSegment, d as BezierContour } from './bezier-CUaH8hcK.cjs';
3
3
 
4
4
  /**
5
5
  * Curve-preserving boolean operations (union, intersection, difference, xor and divide) on
@@ -1,5 +1,5 @@
1
- import { P as Point } from './brushTypes-C7N3EBK7.js';
2
- import { B as BezierPath, P as PolygonBooleanOperation, a as BezierPathInput, b as PolygonFillRule, c as BezierSegment, d as BezierContour } from './bezier-Dywv3Bw8.js';
1
+ import { P as Point } from './brushTypes-MX5UVs_m.js';
2
+ import { B as BezierPath, P as PolygonBooleanOperation, a as BezierPathInput, b as PolygonFillRule, c as BezierSegment, d as BezierContour } from './bezier-DPmdGwgR.js';
3
3
 
4
4
  /**
5
5
  * Curve-preserving boolean operations (union, intersection, difference, xor and divide) on
@@ -1,5 +1,5 @@
1
1
  import { a as BlendMode, R as RasterRect, T as TiledSurface } from './surface-1MRncXpF.cjs';
2
- import { T as TileMedium, D as Dab, B as BrushSettings, P as PaintTileTarget, S as StrokePoint, f as PaintPixels, C as CoverageMap, d as SmudgeSettings } from './blending-D7jCmjO6.cjs';
2
+ import { T as TileMedium, D as Dab, B as BrushSettings, a as PaintTileTarget, S as StrokePoint, g as PaintPixels, C as CoverageMap, e as SmudgeSettings } from './grain-GCt_O2kv.cjs';
3
3
 
4
4
  /**
5
5
  * The retouching tools on the shared brush engine: Clone Stamp, Healing Brush, Spot Healing
@@ -1114,5 +1114,21 @@ declare function mix32(h: number): number;
1114
1114
  declare function hash2(x: number, y: number, salt: number): number;
1115
1115
  /** Uniform in [0, 1) from a seed, an index and a stream (one stream per random quantity). */
1116
1116
  declare function rand01(seed: number, index: number, stream: number): number;
1117
+ /** Uniform in [-1, 1). */
1118
+ declare function randSigned(seed: number, index: number, stream: number): number;
1119
+ /** A seed from a string (FNV-1a, then mixed). */
1120
+ declare function seedFromString(text: string): number;
1121
+ /**
1122
+ * Tileable fractal value noise in 0..1 over a `size`-pixel square: `cellsX × cellsY` lattice cells
1123
+ * at the base octave (unequal counts give fibres and streaks), doubling per octave, so the result
1124
+ * repeats exactly every `size` pixels.
1125
+ */
1126
+ declare class TileableNoise {
1127
+ readonly size: number;
1128
+ private readonly octaves;
1129
+ constructor(size: number, cellsX: number, cellsY: number, octaves: number, salt: number);
1130
+ /** Fractal noise at pixel (x, y). */
1131
+ at(x: number, y: number): number;
1132
+ }
1117
1133
 
1118
- export { P_FY as $, FLAG_LEFT as A, FLAG_RIGHT as B, type CloneTransform as C, DEFAULT_FLOW as D, EX as E, FLAG_ALIVE as F, FLAG_TOP as G, FLAG_WET as H, FLAT as I, FREE_INTERVAL as J, IDENTITY_CLONE_TRANSFORM as K, MAX_TILT_ACCEL as L, MAX_BATCH as M, MAX_WET_LANES as N, MAX_WET_SLOTS as O, OPP as P, PAPER_CAPACITY as Q, type RetouchSettings as R, PARAM as S, PARAM_FLOATS as T, PIGMENT_CHANNELS as U, PLANE as V, WetWorld as W, PLANE_BYTES as X, P_D0 as Y, P_EDGE as Z, P_FX as _, type RetouchApply as a, sponge as a$, P_H as a0, P_P0 as a1, P_RHO as a2, P_SW as a3, P_UX as a4, P_UY as a5, type PixelSource as a6, RETOUCH_SAMPLES as a7, RegionPixelSource as a8, type RetouchDabEffect as a9, WetWorldError as aA, applyRetouchToTile as aB, applyToneToDeepTile as aC, boxBlurPixels as aD, canShareMemory as aE, cloneSamplePoint as aF, createWetGpuEngine as aG, dodgeBurn as aH, dodgeBurnCurve as aI, dsincos as aJ, edgeBits as aK, findWebGpu as aL, flowField as aM, healPixels as aN, isIdentityCloneTransform as aO, latticeViscosity as aP, loadWetKernel as aQ, luma as aR, normalizeRetouch as aS, normalizeTilt as aT, packWetParams as aU, perDabStrength as aV, readSourceRegion as aW, retouchFilter as aX, rgbaViewOfGrey as aY, saturationOf as aZ, smudgeEffect as a_, RetouchDabStroke as aa, type RetouchSample as ab, SET_PLANES as ac, SLOT_BYTES as ad, SLOT_PLANES as ae, SLOT_SIDE as af, SPOT_HEAL_TYPES as ag, STRIP as ah, type SpotHealType as ai, TONE_RANGES as aj, TilePixelSource as ak, type ToneRange as al, TransformedPixelSource as am, U_MAX as an, W9 as ao, WET_TILE as ap, type WetFlowField as aq, WetGpuEngine as ar, type WetGpuJob as as, type WetGpuSupport as at, type WetKernelKind as au, type WetLaneOptions as av, type WetLaneStats as aw, type WetPaper as ax, type WetWorkerLayout as ay, WetWorkerPool as az, type RetouchPaint as b, spongeEffect as b0, spotHealPixels as b1, spotHealWindow as b2, toneOf as b3, wetGpuSupport as b4, wetSimdSupported as b5, type WetTilt as c, type WetParams as d, type WetFlowSpec as e, type WetWorldOptions as f, type WetGpuProvider as g, type WetBackendInfo as h, type WetSnapshot as i, type WetPaperInput as j, DEFAULT_WET_PARAMS as k, WET_FLOW_KINDS as l, WET_PARAM_KEYS as m, type WetFlowKind as n, type WetSupport as o, hash2 as p, mix32 as q, normalizeFlow as r, normalizeWetParams as s, rand01 as t, DEFAULT_RETOUCH as u, DEFAULT_WET_PAPER as v, wetSupport as w, DRY_EPS as x, EY as y, FLAG_BOTTOM as z };
1134
+ export { P_D0 as $, EY as A, FLAG_BOTTOM as B, type CloneTransform as C, DEFAULT_FLOW as D, EX as E, FLAG_ALIVE as F, FLAG_LEFT as G, FLAG_RIGHT as H, FLAG_TOP as I, FLAG_WET as J, FLAT as K, FREE_INTERVAL as L, IDENTITY_CLONE_TRANSFORM as M, MAX_BATCH as N, MAX_TILT_ACCEL as O, MAX_WET_LANES as P, MAX_WET_SLOTS as Q, type RetouchSettings as R, OPP as S, TileableNoise as T, PAPER_CAPACITY as U, PARAM as V, WetWorld as W, PARAM_FLOATS as X, PIGMENT_CHANNELS as Y, PLANE as Z, PLANE_BYTES as _, type RetouchApply as a, rgbaViewOfGrey as a$, P_EDGE as a0, P_FX as a1, P_FY as a2, P_H as a3, P_P0 as a4, P_RHO as a5, P_SW as a6, P_UX as a7, P_UY as a8, type PixelSource as a9, type WetPaper as aA, type WetWorkerLayout as aB, WetWorkerPool as aC, WetWorldError as aD, applyRetouchToTile as aE, applyToneToDeepTile as aF, boxBlurPixels as aG, canShareMemory as aH, cloneSamplePoint as aI, createWetGpuEngine as aJ, dodgeBurn as aK, dodgeBurnCurve as aL, dsincos as aM, edgeBits as aN, findWebGpu as aO, flowField as aP, healPixels as aQ, isIdentityCloneTransform as aR, latticeViscosity as aS, loadWetKernel as aT, luma as aU, normalizeRetouch as aV, normalizeTilt as aW, packWetParams as aX, perDabStrength as aY, readSourceRegion as aZ, retouchFilter as a_, RETOUCH_SAMPLES as aa, RegionPixelSource as ab, type RetouchDabEffect as ac, RetouchDabStroke as ad, type RetouchSample as ae, SET_PLANES as af, SLOT_BYTES as ag, SLOT_PLANES as ah, SLOT_SIDE as ai, SPOT_HEAL_TYPES as aj, STRIP as ak, type SpotHealType as al, TONE_RANGES as am, TilePixelSource as an, type ToneRange as ao, TransformedPixelSource as ap, U_MAX as aq, W9 as ar, WET_TILE as as, type WetFlowField as at, WetGpuEngine as au, type WetGpuJob as av, type WetGpuSupport as aw, type WetKernelKind as ax, type WetLaneOptions as ay, type WetLaneStats as az, type RetouchPaint as b, saturationOf as b0, smudgeEffect as b1, sponge as b2, spongeEffect as b3, spotHealPixels as b4, spotHealWindow as b5, toneOf as b6, wetGpuSupport as b7, wetSimdSupported as b8, type WetTilt as c, type WetParams as d, type WetFlowSpec as e, type WetWorldOptions as f, type WetGpuProvider as g, type WetBackendInfo as h, type WetSnapshot as i, type WetPaperInput as j, DEFAULT_WET_PARAMS as k, WET_FLOW_KINDS as l, WET_PARAM_KEYS as m, type WetFlowKind as n, type WetSupport as o, hash2 as p, mix32 as q, normalizeFlow as r, normalizeWetParams as s, rand01 as t, randSigned as u, seedFromString as v, wetSupport as w, DEFAULT_RETOUCH as x, DEFAULT_WET_PAPER as y, DRY_EPS as z };
@@ -1,5 +1,5 @@
1
1
  import { a as BlendMode, R as RasterRect, T as TiledSurface } from './surface-1MRncXpF.js';
2
- import { T as TileMedium, D as Dab, B as BrushSettings, P as PaintTileTarget, S as StrokePoint, f as PaintPixels, C as CoverageMap, d as SmudgeSettings } from './blending-NgF3qo3d.js';
2
+ import { T as TileMedium, D as Dab, B as BrushSettings, a as PaintTileTarget, S as StrokePoint, g as PaintPixels, C as CoverageMap, e as SmudgeSettings } from './grain-COgYMMHv.js';
3
3
 
4
4
  /**
5
5
  * The retouching tools on the shared brush engine: Clone Stamp, Healing Brush, Spot Healing
@@ -1114,5 +1114,21 @@ declare function mix32(h: number): number;
1114
1114
  declare function hash2(x: number, y: number, salt: number): number;
1115
1115
  /** Uniform in [0, 1) from a seed, an index and a stream (one stream per random quantity). */
1116
1116
  declare function rand01(seed: number, index: number, stream: number): number;
1117
+ /** Uniform in [-1, 1). */
1118
+ declare function randSigned(seed: number, index: number, stream: number): number;
1119
+ /** A seed from a string (FNV-1a, then mixed). */
1120
+ declare function seedFromString(text: string): number;
1121
+ /**
1122
+ * Tileable fractal value noise in 0..1 over a `size`-pixel square: `cellsX × cellsY` lattice cells
1123
+ * at the base octave (unequal counts give fibres and streaks), doubling per octave, so the result
1124
+ * repeats exactly every `size` pixels.
1125
+ */
1126
+ declare class TileableNoise {
1127
+ readonly size: number;
1128
+ private readonly octaves;
1129
+ constructor(size: number, cellsX: number, cellsY: number, octaves: number, salt: number);
1130
+ /** Fractal noise at pixel (x, y). */
1131
+ at(x: number, y: number): number;
1132
+ }
1117
1133
 
1118
- export { P_FY as $, FLAG_LEFT as A, FLAG_RIGHT as B, type CloneTransform as C, DEFAULT_FLOW as D, EX as E, FLAG_ALIVE as F, FLAG_TOP as G, FLAG_WET as H, FLAT as I, FREE_INTERVAL as J, IDENTITY_CLONE_TRANSFORM as K, MAX_TILT_ACCEL as L, MAX_BATCH as M, MAX_WET_LANES as N, MAX_WET_SLOTS as O, OPP as P, PAPER_CAPACITY as Q, type RetouchSettings as R, PARAM as S, PARAM_FLOATS as T, PIGMENT_CHANNELS as U, PLANE as V, WetWorld as W, PLANE_BYTES as X, P_D0 as Y, P_EDGE as Z, P_FX as _, type RetouchApply as a, sponge as a$, P_H as a0, P_P0 as a1, P_RHO as a2, P_SW as a3, P_UX as a4, P_UY as a5, type PixelSource as a6, RETOUCH_SAMPLES as a7, RegionPixelSource as a8, type RetouchDabEffect as a9, WetWorldError as aA, applyRetouchToTile as aB, applyToneToDeepTile as aC, boxBlurPixels as aD, canShareMemory as aE, cloneSamplePoint as aF, createWetGpuEngine as aG, dodgeBurn as aH, dodgeBurnCurve as aI, dsincos as aJ, edgeBits as aK, findWebGpu as aL, flowField as aM, healPixels as aN, isIdentityCloneTransform as aO, latticeViscosity as aP, loadWetKernel as aQ, luma as aR, normalizeRetouch as aS, normalizeTilt as aT, packWetParams as aU, perDabStrength as aV, readSourceRegion as aW, retouchFilter as aX, rgbaViewOfGrey as aY, saturationOf as aZ, smudgeEffect as a_, RetouchDabStroke as aa, type RetouchSample as ab, SET_PLANES as ac, SLOT_BYTES as ad, SLOT_PLANES as ae, SLOT_SIDE as af, SPOT_HEAL_TYPES as ag, STRIP as ah, type SpotHealType as ai, TONE_RANGES as aj, TilePixelSource as ak, type ToneRange as al, TransformedPixelSource as am, U_MAX as an, W9 as ao, WET_TILE as ap, type WetFlowField as aq, WetGpuEngine as ar, type WetGpuJob as as, type WetGpuSupport as at, type WetKernelKind as au, type WetLaneOptions as av, type WetLaneStats as aw, type WetPaper as ax, type WetWorkerLayout as ay, WetWorkerPool as az, type RetouchPaint as b, spongeEffect as b0, spotHealPixels as b1, spotHealWindow as b2, toneOf as b3, wetGpuSupport as b4, wetSimdSupported as b5, type WetTilt as c, type WetParams as d, type WetFlowSpec as e, type WetWorldOptions as f, type WetGpuProvider as g, type WetBackendInfo as h, type WetSnapshot as i, type WetPaperInput as j, DEFAULT_WET_PARAMS as k, WET_FLOW_KINDS as l, WET_PARAM_KEYS as m, type WetFlowKind as n, type WetSupport as o, hash2 as p, mix32 as q, normalizeFlow as r, normalizeWetParams as s, rand01 as t, DEFAULT_RETOUCH as u, DEFAULT_WET_PAPER as v, wetSupport as w, DRY_EPS as x, EY as y, FLAG_BOTTOM as z };
1134
+ export { P_D0 as $, EY as A, FLAG_BOTTOM as B, type CloneTransform as C, DEFAULT_FLOW as D, EX as E, FLAG_ALIVE as F, FLAG_LEFT as G, FLAG_RIGHT as H, FLAG_TOP as I, FLAG_WET as J, FLAT as K, FREE_INTERVAL as L, IDENTITY_CLONE_TRANSFORM as M, MAX_BATCH as N, MAX_TILT_ACCEL as O, MAX_WET_LANES as P, MAX_WET_SLOTS as Q, type RetouchSettings as R, OPP as S, TileableNoise as T, PAPER_CAPACITY as U, PARAM as V, WetWorld as W, PARAM_FLOATS as X, PIGMENT_CHANNELS as Y, PLANE as Z, PLANE_BYTES as _, type RetouchApply as a, rgbaViewOfGrey as a$, P_EDGE as a0, P_FX as a1, P_FY as a2, P_H as a3, P_P0 as a4, P_RHO as a5, P_SW as a6, P_UX as a7, P_UY as a8, type PixelSource as a9, type WetPaper as aA, type WetWorkerLayout as aB, WetWorkerPool as aC, WetWorldError as aD, applyRetouchToTile as aE, applyToneToDeepTile as aF, boxBlurPixels as aG, canShareMemory as aH, cloneSamplePoint as aI, createWetGpuEngine as aJ, dodgeBurn as aK, dodgeBurnCurve as aL, dsincos as aM, edgeBits as aN, findWebGpu as aO, flowField as aP, healPixels as aQ, isIdentityCloneTransform as aR, latticeViscosity as aS, loadWetKernel as aT, luma as aU, normalizeRetouch as aV, normalizeTilt as aW, packWetParams as aX, perDabStrength as aY, readSourceRegion as aZ, retouchFilter as a_, RETOUCH_SAMPLES as aa, RegionPixelSource as ab, type RetouchDabEffect as ac, RetouchDabStroke as ad, type RetouchSample as ae, SET_PLANES as af, SLOT_BYTES as ag, SLOT_PLANES as ah, SLOT_SIDE as ai, SPOT_HEAL_TYPES as aj, STRIP as ak, type SpotHealType as al, TONE_RANGES as am, TilePixelSource as an, type ToneRange as ao, TransformedPixelSource as ap, U_MAX as aq, W9 as ar, WET_TILE as as, type WetFlowField as at, WetGpuEngine as au, type WetGpuJob as av, type WetGpuSupport as aw, type WetKernelKind as ax, type WetLaneOptions as ay, type WetLaneStats as az, type RetouchPaint as b, saturationOf as b0, smudgeEffect as b1, sponge as b2, spongeEffect as b3, spotHealPixels as b4, spotHealWindow as b5, toneOf as b6, wetGpuSupport as b7, wetSimdSupported as b8, type WetTilt as c, type WetParams as d, type WetFlowSpec as e, type WetWorldOptions as f, type WetGpuProvider as g, type WetBackendInfo as h, type WetSnapshot as i, type WetPaperInput as j, DEFAULT_WET_PARAMS as k, WET_FLOW_KINDS as l, WET_PARAM_KEYS as m, type WetFlowKind as n, type WetSupport as o, hash2 as p, mix32 as q, normalizeFlow as r, normalizeWetParams as s, rand01 as t, randSigned as u, seedFromString as v, wetSupport as w, DEFAULT_RETOUCH as x, DEFAULT_WET_PAPER as y, DRY_EPS as z };
@@ -1,4 +1,4 @@
1
- import { B as BezierPath, A as AffineMatrix } from './bezier-Dywv3Bw8.js';
1
+ import { B as BezierPath, A as AffineMatrix } from './bezier-DPmdGwgR.js';
2
2
  import { V as VectorEffectType, H as VectorEffectParamsMap, I as VectorPathNode, J as VectorFillRule, K as VectorBooleanOperation, L as VectorNode, M as VectorEffect, N as VectorGroupNode, O as VectorBounds, P as VectorWarpMesh, Q as VectorInstanceNode, R as VectorFilterType, T as VectorFilterParamsMap, U as VectorFilter, W as VectorGradient, X as Vec2, Y as VectorGradientUnits, S as SvgGradientDef, Z as VectorGradientSpread, _ as VectorGradientType, $ as VectorPaint, a0 as VectorMatrix, a1 as VectorGradientStop, a2 as VectorStrokeAlign, a3 as VectorSubpath, a4 as VectorDocument, a5 as VectorWidthPoint } from './helpers-C-RgeyvH.js';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { B as BezierPath, A as AffineMatrix } from './bezier-CZ2AhjID.cjs';
1
+ import { B as BezierPath, A as AffineMatrix } from './bezier-CUaH8hcK.cjs';
2
2
  import { V as VectorEffectType, H as VectorEffectParamsMap, I as VectorPathNode, J as VectorFillRule, K as VectorBooleanOperation, L as VectorNode, M as VectorEffect, N as VectorGroupNode, O as VectorBounds, P as VectorWarpMesh, Q as VectorInstanceNode, R as VectorFilterType, T as VectorFilterParamsMap, U as VectorFilter, W as VectorGradient, X as Vec2, Y as VectorGradientUnits, S as SvgGradientDef, Z as VectorGradientSpread, _ as VectorGradientType, $ as VectorPaint, a0 as VectorMatrix, a1 as VectorGradientStop, a2 as VectorStrokeAlign, a3 as VectorSubpath, a4 as VectorDocument, a5 as VectorWidthPoint } from './helpers-v6GMazzg.cjs';
3
3
 
4
4
  /**