@pixerate/editor 0.209.0 → 0.211.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 (46) hide show
  1. package/dist/{chunk-QE7D7TZR.cjs → chunk-H65IBXFI.cjs} +74 -25
  2. package/dist/{chunk-X4LUGTQX.cjs → chunk-L52VMQZS.cjs} +21 -10
  3. package/dist/{chunk-DWYQPL2A.js → chunk-LQ5SALHK.js} +13 -2
  4. package/dist/chunk-MQDIP4CF.cjs +462 -0
  5. package/dist/{chunk-KFIOEOCQ.js → chunk-W3TOZTL7.js} +55 -6
  6. package/dist/chunk-XI2NV5U7.js +462 -0
  7. package/dist/{chunk-3EHPLDFQ.cjs → chunk-YF3YZZ6G.cjs} +16 -453
  8. package/dist/{chunk-USQCKRZG.js → chunk-ZGJGSCUW.js} +8 -445
  9. package/dist/image-editor/content-aware-fill-session.d.cts +109 -0
  10. package/dist/image-editor/content-aware-fill-session.d.ts +109 -0
  11. package/dist/image-editor/controller.d.cts +111 -1
  12. package/dist/image-editor/controller.d.ts +111 -1
  13. package/dist/image-editor/index.cjs +1879 -1052
  14. package/dist/image-editor/index.d.cts +2 -0
  15. package/dist/image-editor/index.d.ts +2 -0
  16. package/dist/image-editor/index.js +869 -42
  17. package/dist/image-editor/layers/serialize.d.cts +5 -8
  18. package/dist/image-editor/layers/serialize.d.ts +5 -8
  19. package/dist/image-editor/paths.d.cts +41 -0
  20. package/dist/image-editor/paths.d.ts +41 -0
  21. package/dist/image-editor/psd/export.d.cts +8 -1
  22. package/dist/image-editor/psd/export.d.ts +8 -1
  23. package/dist/image-editor/psd/import.d.cts +7 -0
  24. package/dist/image-editor/psd/import.d.ts +7 -0
  25. package/dist/image-editor/psd/paths.d.cts +11 -0
  26. package/dist/image-editor/psd/paths.d.ts +11 -0
  27. package/dist/image-editor/selection/gesture.d.cts +10 -2
  28. package/dist/image-editor/selection/gesture.d.ts +10 -2
  29. package/dist/image-editor/selection/select-and-mask.d.cts +5 -0
  30. package/dist/image-editor/selection/select-and-mask.d.ts +5 -0
  31. package/dist/image-editor/selection/worker.d.cts +10 -0
  32. package/dist/image-editor/selection/worker.d.ts +10 -0
  33. package/dist/image-editor/selection-worker.cjs +4 -3
  34. package/dist/image-editor/selection-worker.js +2 -1
  35. package/dist/image-editor/types.d.cts +12 -0
  36. package/dist/image-editor/types.d.ts +12 -0
  37. package/dist/paint/heal.d.cts +3 -1
  38. package/dist/paint/heal.d.ts +3 -1
  39. package/dist/paint/index.cjs +4 -2
  40. package/dist/paint/index.js +10 -8
  41. package/dist/paint-editor/index.cjs +6 -6
  42. package/dist/paint-editor/index.js +1 -1
  43. package/package.json +1 -1
  44. package/skills/pixerate-image-editor/SKILL.md +20 -22
  45. package/skills/pixerate-image-editor/references/layer-effects.md +24 -0
  46. package/skills/pixerate-image-selection-masking/SKILL.md +2 -1
@@ -1,11 +1,4 @@
1
- /**
2
- * Schema version 3 of the image editor document: the layer tree, with pixel layers and painted
3
- * masks stored as PNG assets (cropped to their content and placed by position), plus the
4
- * document-level crop, transform, output opacity, migrated blur and selection.
5
- *
6
- * Encoding is synchronous and exact (see `png.ts`). Each surface's encoding is memoised, so
7
- * saving an unchanged layer again costs nothing.
8
- */
1
+ import type { SerializedDocumentPath } from '../paths.cjs';
9
2
  import type { Annotation, CropBox, DepthMaskOptions, ImageTransform } from '../types.cjs';
10
3
  import type { SerializedSelection } from '../selection/mask.cjs';
11
4
  import type { SerializedAlphaChannel } from '../selection/channels.cjs';
@@ -238,6 +231,8 @@ export interface SerializedLayeredImageEditorState {
238
231
  selection?: SerializedSelection;
239
232
  /** Alpha channels (saved selections), run-length encoded. */
240
233
  channels?: SerializedAlphaChannel[];
234
+ /** Document paths (the Paths panel). */
235
+ paths?: SerializedDocumentPath[];
241
236
  /** Global light for layer effects (missing = 120°, 30°). */
242
237
  globalLight?: GlobalLight;
243
238
  /** The document's patterns for pattern effects, each an RGBA PNG data URL. */
@@ -279,6 +274,8 @@ export interface SerializeContext {
279
274
  export declare function serializeEffects(effects: LayerEffects): SerializedLayerEffects;
280
275
  /** Reads stored effects (leniently: broken effects are dropped), or `undefined`. */
281
276
  export declare function deserializeEffects(raw: unknown): LayerEffects | undefined;
277
+ /** Restores stored shape components (a vector mask's or a document path's); throws on damaged ones. */
278
+ export declare function readShapeComponents(stored: unknown): ShapeComponent[];
282
279
  export declare function serializeLayer(layer: ImageLayer, ctx: SerializeContext): SerializedLayer;
283
280
  /** Writes one contents entry (nested layers add their own assets and contents to `ctx`). */
284
281
  export declare function serializeContents(c: SmartContents, ctx: SerializeContext): SerializedSmartContents;
@@ -1,11 +1,4 @@
1
- /**
2
- * Schema version 3 of the image editor document: the layer tree, with pixel layers and painted
3
- * masks stored as PNG assets (cropped to their content and placed by position), plus the
4
- * document-level crop, transform, output opacity, migrated blur and selection.
5
- *
6
- * Encoding is synchronous and exact (see `png.ts`). Each surface's encoding is memoised, so
7
- * saving an unchanged layer again costs nothing.
8
- */
1
+ import type { SerializedDocumentPath } from '../paths.js';
9
2
  import type { Annotation, CropBox, DepthMaskOptions, ImageTransform } from '../types.js';
10
3
  import type { SerializedSelection } from '../selection/mask.js';
11
4
  import type { SerializedAlphaChannel } from '../selection/channels.js';
@@ -238,6 +231,8 @@ export interface SerializedLayeredImageEditorState {
238
231
  selection?: SerializedSelection;
239
232
  /** Alpha channels (saved selections), run-length encoded. */
240
233
  channels?: SerializedAlphaChannel[];
234
+ /** Document paths (the Paths panel). */
235
+ paths?: SerializedDocumentPath[];
241
236
  /** Global light for layer effects (missing = 120°, 30°). */
242
237
  globalLight?: GlobalLight;
243
238
  /** The document's patterns for pattern effects, each an RGBA PNG data URL. */
@@ -279,6 +274,8 @@ export interface SerializeContext {
279
274
  export declare function serializeEffects(effects: LayerEffects): SerializedLayerEffects;
280
275
  /** Reads stored effects (leniently: broken effects are dropped), or `undefined`. */
281
276
  export declare function deserializeEffects(raw: unknown): LayerEffects | undefined;
277
+ /** Restores stored shape components (a vector mask's or a document path's); throws on damaged ones. */
278
+ export declare function readShapeComponents(stored: unknown): ShapeComponent[];
282
279
  export declare function serializeLayer(layer: ImageLayer, ctx: SerializeContext): SerializedLayer;
283
280
  /** Writes one contents entry (nested layers add their own assets and contents to `ctx`). */
284
281
  export declare function serializeContents(c: SmartContents, ctx: SerializeContext): SerializedSmartContents;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Document paths (Photoshop's Paths panel): vector outlines kept with the document but on no
3
+ * layer. The Work Path is the scratch path Make Work Path replaces; saved paths stay until
4
+ * deleted. A path can become a selection, a vector mask, a fill or a stroke.
5
+ */
6
+ import type { CropBox } from './types.cjs';
7
+ import type { ShapeComponent, ShapeFillRule } from './layers/model.cjs';
8
+ export interface DocumentPath {
9
+ id: string;
10
+ name: string;
11
+ /** In document pixels, combined by their operations (as a shape layer's). */
12
+ components: ShapeComponent[];
13
+ /** How overlapping subpaths fill (default nonzero; a traced selection's holes need evenodd). */
14
+ fillRule?: ShapeFillRule;
15
+ /** The Work Path: replaced by the next Make Work Path until it is saved (renamed). */
16
+ work?: boolean;
17
+ }
18
+ /** A path as stored in a document (`toJSON().paths`). */
19
+ export interface SerializedDocumentPath {
20
+ id: string;
21
+ name: string;
22
+ /** Components as a vector mask stores them. */
23
+ components: unknown[];
24
+ fillRule?: 'evenodd';
25
+ work?: boolean;
26
+ }
27
+ export declare const WORK_PATH_NAME = "Work Path";
28
+ /** A new, unique path id. */
29
+ export declare function newPathId(): string;
30
+ /** The path's outline as SVG path data in document pixels (for a thumbnail or `d` attribute). */
31
+ export declare function pathSvgData(path: DocumentPath): string;
32
+ /** The path's bounds in document pixels (of the curve itself, not its handles), or null when empty. */
33
+ export declare function pathBounds(path: DocumentPath): CropBox | null;
34
+ /** How many anchors the path has. */
35
+ export declare function pathAnchorCount(path: DocumentPath): number;
36
+ export declare function serializePaths(paths: readonly DocumentPath[]): SerializedDocumentPath[];
37
+ /**
38
+ * Restores stored paths, skipping damaged ones (listed in `problems`). At most one stays the Work
39
+ * Path; ids are made unique.
40
+ */
41
+ export declare function readPaths(stored: unknown, problems?: string[]): DocumentPath[];
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Document paths (Photoshop's Paths panel): vector outlines kept with the document but on no
3
+ * layer. The Work Path is the scratch path Make Work Path replaces; saved paths stay until
4
+ * deleted. A path can become a selection, a vector mask, a fill or a stroke.
5
+ */
6
+ import type { CropBox } from './types.js';
7
+ import type { ShapeComponent, ShapeFillRule } from './layers/model.js';
8
+ export interface DocumentPath {
9
+ id: string;
10
+ name: string;
11
+ /** In document pixels, combined by their operations (as a shape layer's). */
12
+ components: ShapeComponent[];
13
+ /** How overlapping subpaths fill (default nonzero; a traced selection's holes need evenodd). */
14
+ fillRule?: ShapeFillRule;
15
+ /** The Work Path: replaced by the next Make Work Path until it is saved (renamed). */
16
+ work?: boolean;
17
+ }
18
+ /** A path as stored in a document (`toJSON().paths`). */
19
+ export interface SerializedDocumentPath {
20
+ id: string;
21
+ name: string;
22
+ /** Components as a vector mask stores them. */
23
+ components: unknown[];
24
+ fillRule?: 'evenodd';
25
+ work?: boolean;
26
+ }
27
+ export declare const WORK_PATH_NAME = "Work Path";
28
+ /** A new, unique path id. */
29
+ export declare function newPathId(): string;
30
+ /** The path's outline as SVG path data in document pixels (for a thumbnail or `d` attribute). */
31
+ export declare function pathSvgData(path: DocumentPath): string;
32
+ /** The path's bounds in document pixels (of the curve itself, not its handles), or null when empty. */
33
+ export declare function pathBounds(path: DocumentPath): CropBox | null;
34
+ /** How many anchors the path has. */
35
+ export declare function pathAnchorCount(path: DocumentPath): number;
36
+ export declare function serializePaths(paths: readonly DocumentPath[]): SerializedDocumentPath[];
37
+ /**
38
+ * Restores stored paths, skipping damaged ones (listed in `problems`). At most one stays the Work
39
+ * Path; ids are made unique.
40
+ */
41
+ export declare function readPaths(stored: unknown, problems?: string[]): DocumentPath[];
@@ -1,4 +1,4 @@
1
- import { type ImageLayer, type SmartContents } from '../layers/model.cjs';
1
+ import { type ImageLayer, type ShapeComponent, type SmartContents } from '../layers/model.cjs';
2
2
  import { type PsdAlphaChannel } from './channels.cjs';
3
3
  import { type GlobalLight } from '../../raster/effects/model.cjs';
4
4
  import { type EffectPattern } from '../../raster/effects/patterns.cjs';
@@ -11,6 +11,13 @@ export interface PsdExportInput {
11
11
  merged: ArrayLike<number>;
12
12
  /** Alpha channels, written as extra merged planes with their names and display info. */
13
13
  alphaChannels?: readonly PsdAlphaChannel[];
14
+ /** Document paths: saved paths as image resources 2000 on, the Work Path as 1025. */
15
+ paths?: readonly {
16
+ name: string;
17
+ components: readonly ShapeComponent[];
18
+ work?: boolean;
19
+ fillRule?: 'nonzero' | 'evenodd';
20
+ }[];
14
21
  /** Pixels per inch (default 72). */
15
22
  resolution?: number;
16
23
  /** The document's patterns; those the effects use are embedded (built-in ones too). */
@@ -1,4 +1,4 @@
1
- import { type ImageLayer, type SmartContents } from '../layers/model.js';
1
+ import { type ImageLayer, type ShapeComponent, type SmartContents } from '../layers/model.js';
2
2
  import { type PsdAlphaChannel } from './channels.js';
3
3
  import { type GlobalLight } from '../../raster/effects/model.js';
4
4
  import { type EffectPattern } from '../../raster/effects/patterns.js';
@@ -11,6 +11,13 @@ export interface PsdExportInput {
11
11
  merged: ArrayLike<number>;
12
12
  /** Alpha channels, written as extra merged planes with their names and display info. */
13
13
  alphaChannels?: readonly PsdAlphaChannel[];
14
+ /** Document paths: saved paths as image resources 2000 on, the Work Path as 1025. */
15
+ paths?: readonly {
16
+ name: string;
17
+ components: readonly ShapeComponent[];
18
+ work?: boolean;
19
+ fillRule?: 'nonzero' | 'evenodd';
20
+ }[];
14
21
  /** Pixels per inch (default 72). */
15
22
  resolution?: number;
16
23
  /** The document's patterns; those the effects use are embedded (built-in ones too). */
@@ -1,3 +1,4 @@
1
+ import type { ShapeComponent } from '../layers/model.cjs';
1
2
  import { type PsdAlphaChannel } from './channels.cjs';
2
3
  import type { ImageLayer, LayerBlendMode } from '../layers/model.cjs';
3
4
  import { type PsdFile } from './file.cjs';
@@ -57,6 +58,12 @@ export interface PsdImportResult {
57
58
  bitDepth: 8 | 16 | 32;
58
59
  /** The file's alpha channels (saved selections), as 8-bit planes. */
59
60
  alphaChannels?: PsdAlphaChannel[];
61
+ /** The file's document paths (image resources 2000–2997 and the Work Path, 1025), in file order. */
62
+ paths?: {
63
+ name: string;
64
+ components: ShapeComponent[];
65
+ work?: boolean;
66
+ }[];
60
67
  }
61
68
  export interface PsdImportOptions {
62
69
  /** Makes layer ids (defaults to `psd-<n>`). */
@@ -1,3 +1,4 @@
1
+ import type { ShapeComponent } from '../layers/model.js';
1
2
  import { type PsdAlphaChannel } from './channels.js';
2
3
  import type { ImageLayer, LayerBlendMode } from '../layers/model.js';
3
4
  import { type PsdFile } from './file.js';
@@ -57,6 +58,12 @@ export interface PsdImportResult {
57
58
  bitDepth: 8 | 16 | 32;
58
59
  /** The file's alpha channels (saved selections), as 8-bit planes. */
59
60
  alphaChannels?: PsdAlphaChannel[];
61
+ /** The file's document paths (image resources 2000–2997 and the Work Path, 1025), in file order. */
62
+ paths?: {
63
+ name: string;
64
+ components: ShapeComponent[];
65
+ work?: boolean;
66
+ }[];
60
67
  }
61
68
  export interface PsdImportOptions {
62
69
  /** Makes layer ids (defaults to `psd-<n>`). */
@@ -54,3 +54,14 @@ export declare function componentsFromVectorBlock(data: Uint8Array, width: numbe
54
54
  } | null;
55
55
  /** A layer vector block for shape components (live corners cut; `inverted` as the invert flag). */
56
56
  export declare function vectorBlockForComponents(components: readonly ShapeComponent[], inverted: boolean, width: number, height: number, flags?: number): Uint8Array;
57
+ /** Image resource ids of document paths: the Work Path, and the range saved paths use. */
58
+ export declare const RESOURCE_WORK_PATH = 1025;
59
+ export declare const RESOURCE_PATH_FIRST = 2000;
60
+ export declare const RESOURCE_PATH_LAST = 2997;
61
+ /** Shape components from a path resource (the path records of a saved path or the Work Path). */
62
+ export declare function componentsFromPathResource(data: Uint8Array, width: number, height: number): {
63
+ components: ShapeComponent[];
64
+ inverted: boolean;
65
+ } | null;
66
+ /** A path resource's data for shape components. */
67
+ export declare function pathResourceForComponents(components: readonly ShapeComponent[], width: number, height: number): Uint8Array;
@@ -54,3 +54,14 @@ export declare function componentsFromVectorBlock(data: Uint8Array, width: numbe
54
54
  } | null;
55
55
  /** A layer vector block for shape components (live corners cut; `inverted` as the invert flag). */
56
56
  export declare function vectorBlockForComponents(components: readonly ShapeComponent[], inverted: boolean, width: number, height: number, flags?: number): Uint8Array;
57
+ /** Image resource ids of document paths: the Work Path, and the range saved paths use. */
58
+ export declare const RESOURCE_WORK_PATH = 1025;
59
+ export declare const RESOURCE_PATH_FIRST = 2000;
60
+ export declare const RESOURCE_PATH_LAST = 2997;
61
+ /** Shape components from a path resource (the path records of a saved path or the Work Path). */
62
+ export declare function componentsFromPathResource(data: Uint8Array, width: number, height: number): {
63
+ components: ShapeComponent[];
64
+ inverted: boolean;
65
+ } | null;
66
+ /** A path resource's data for shape components. */
67
+ export declare function pathResourceForComponents(components: readonly ShapeComponent[], width: number, height: number): Uint8Array;
@@ -27,8 +27,9 @@ export declare function snapTo45(from: ImagePoint, point: ImagePoint): ImagePoin
27
27
  * last anchor to the pointer (snapped to the strongest edge within the width) and places
28
28
  * anchors as it goes (frequency); a click adds one, and closing and the keys are as the
29
29
  * polygonal lasso's. The first click reads the pixels (async).
30
- * - Quick Selection: drag (or click) a brush stroke; on `end` it grows into the region painted on,
31
- * out to its edges (async: await {@link settled}). With the New mode and a selection already
30
+ * - Quick Selection: drag (or click) a brush stroke; the selection grows into the region painted
31
+ * on as the brush moves (shown with `setSelectionPreview`), and on `end` the stroke is applied
32
+ * as one undo step (async: await {@link settled}). With the New mode and a selection already
32
33
  * there, strokes add, as in Photoshop; Alt subtracts.
33
34
  * - Object Selection: drag a box around an object, or click on it; on `end` the object is
34
35
  * selected (async: await {@link settled}).
@@ -54,10 +55,17 @@ export declare class SelectionGesture {
54
55
  /** The last error (e.g. pixels unavailable for the wand), for the UI to show. */
55
56
  error: string | null;
56
57
  private pending;
58
+ /** Quick Selection while dragging: the selection before the stroke, how the stroke combines, the pixels. */
59
+ private quick;
60
+ private livePreviews;
57
61
  constructor(controller: ImageEditorController, getOptions: () => SelectionToolOptions);
58
62
  get active(): boolean;
59
63
  /** Resolves once a Quick Selection stroke or an Object Selection has been applied. */
60
64
  get settled(): Promise<void>;
65
+ /** Resolves once no live Quick Selection preview is being computed. */
66
+ get previewed(): Promise<void>;
67
+ /** Grows the Quick Selection preview to the stroke so far: one at a time, the newest points following. */
68
+ private growPreview;
61
69
  /** The anchors of a Magnetic Lasso being drawn (empty otherwise). */
62
70
  get magneticAnchors(): ImagePoint[];
63
71
  /** The outline of the shape being drawn, or `null`. */
@@ -27,8 +27,9 @@ export declare function snapTo45(from: ImagePoint, point: ImagePoint): ImagePoin
27
27
  * last anchor to the pointer (snapped to the strongest edge within the width) and places
28
28
  * anchors as it goes (frequency); a click adds one, and closing and the keys are as the
29
29
  * polygonal lasso's. The first click reads the pixels (async).
30
- * - Quick Selection: drag (or click) a brush stroke; on `end` it grows into the region painted on,
31
- * out to its edges (async: await {@link settled}). With the New mode and a selection already
30
+ * - Quick Selection: drag (or click) a brush stroke; the selection grows into the region painted
31
+ * on as the brush moves (shown with `setSelectionPreview`), and on `end` the stroke is applied
32
+ * as one undo step (async: await {@link settled}). With the New mode and a selection already
32
33
  * there, strokes add, as in Photoshop; Alt subtracts.
33
34
  * - Object Selection: drag a box around an object, or click on it; on `end` the object is
34
35
  * selected (async: await {@link settled}).
@@ -54,10 +55,17 @@ export declare class SelectionGesture {
54
55
  /** The last error (e.g. pixels unavailable for the wand), for the UI to show. */
55
56
  error: string | null;
56
57
  private pending;
58
+ /** Quick Selection while dragging: the selection before the stroke, how the stroke combines, the pixels. */
59
+ private quick;
60
+ private livePreviews;
57
61
  constructor(controller: ImageEditorController, getOptions: () => SelectionToolOptions);
58
62
  get active(): boolean;
59
63
  /** Resolves once a Quick Selection stroke or an Object Selection has been applied. */
60
64
  get settled(): Promise<void>;
65
+ /** Resolves once no live Quick Selection preview is being computed. */
66
+ get previewed(): Promise<void>;
67
+ /** Grows the Quick Selection preview to the stroke so far: one at a time, the newest points following. */
68
+ private growPreview;
61
69
  /** The anchors of a Magnetic Lasso being drawn (empty otherwise). */
62
70
  get magneticAnchors(): ImagePoint[];
63
71
  /** The outline of the shape being drawn, or `null`. */
@@ -63,6 +63,9 @@ export declare class SelectAndMaskSession {
63
63
  private dragStart;
64
64
  private pixels;
65
65
  private previewPixels;
66
+ /** The layers below the active one, composited (On Layers shows them where nothing is selected). */
67
+ private below;
68
+ private belowPreview;
66
69
  private base;
67
70
  private previewMask;
68
71
  private baseMask;
@@ -81,6 +84,8 @@ export declare class SelectAndMaskSession {
81
84
  get edits(): readonly RefineEdit[];
82
85
  /** Reads the image and makes the first preview. Resolves to false when the pixels are unavailable. */
83
86
  open(): Promise<boolean>;
87
+ /** The visible layers under the active one, composited at full size, or null when there are none. */
88
+ private layersBelow;
84
89
  subscribe(listener: () => void): () => void;
85
90
  private emit;
86
91
  /** Preview size and the scale from natural pixels to it. */
@@ -63,6 +63,9 @@ export declare class SelectAndMaskSession {
63
63
  private dragStart;
64
64
  private pixels;
65
65
  private previewPixels;
66
+ /** The layers below the active one, composited (On Layers shows them where nothing is selected). */
67
+ private below;
68
+ private belowPreview;
66
69
  private base;
67
70
  private previewMask;
68
71
  private baseMask;
@@ -81,6 +84,8 @@ export declare class SelectAndMaskSession {
81
84
  get edits(): readonly RefineEdit[];
82
85
  /** Reads the image and makes the first preview. Resolves to false when the pixels are unavailable. */
83
86
  open(): Promise<boolean>;
87
+ /** The visible layers under the active one, composited at full size, or null when there are none. */
88
+ private layersBelow;
84
89
  subscribe(listener: () => void): () => void;
85
90
  private emit;
86
91
  /** Preview size and the scale from natural pixels to it. */
@@ -52,6 +52,13 @@ export type SelectionJob = {
52
52
  base: SerializedMask | null;
53
53
  edits: RefineEdit[];
54
54
  params: RefineEdgeParams;
55
+ }
56
+ /** Content-Aware Fill's synthesis on a window (the pixels): `hole` to fill, `exclude` not to copy from. */
57
+ | {
58
+ op: 'fill';
59
+ hole: Uint8Array;
60
+ exclude: Uint8Array | null;
61
+ seed: number;
55
62
  };
56
63
  /** What a job found: a selection of the whole image, and the job's notes. */
57
64
  export interface SelectionJobResult {
@@ -60,6 +67,8 @@ export interface SelectionJobResult {
60
67
  reason?: string;
61
68
  /** Focus Area: the noise level it measured. */
62
69
  noiseLevel?: number;
70
+ /** Content-Aware Fill: the window's pixels with the hole filled (RGBA). */
71
+ pixels?: Uint8ClampedArray;
63
72
  }
64
73
  /** Runs `job` on `pixels` here and now. */
65
74
  export declare function runSelectionJob(job: SelectionJob, pixels: PixelBuffer, onProgress?: SelectionProgress): SelectionJobResult;
@@ -86,6 +95,7 @@ export type SelectionWorkerResponse = {
86
95
  mask: SerializedMask;
87
96
  reason?: string;
88
97
  noiseLevel?: number;
98
+ pixels?: Uint8ClampedArray;
89
99
  } | {
90
100
  type: 'error';
91
101
  id: number;
@@ -52,6 +52,13 @@ export type SelectionJob = {
52
52
  base: SerializedMask | null;
53
53
  edits: RefineEdit[];
54
54
  params: RefineEdgeParams;
55
+ }
56
+ /** Content-Aware Fill's synthesis on a window (the pixels): `hole` to fill, `exclude` not to copy from. */
57
+ | {
58
+ op: 'fill';
59
+ hole: Uint8Array;
60
+ exclude: Uint8Array | null;
61
+ seed: number;
55
62
  };
56
63
  /** What a job found: a selection of the whole image, and the job's notes. */
57
64
  export interface SelectionJobResult {
@@ -60,6 +67,8 @@ export interface SelectionJobResult {
60
67
  reason?: string;
61
68
  /** Focus Area: the noise level it measured. */
62
69
  noiseLevel?: number;
70
+ /** Content-Aware Fill: the window's pixels with the hole filled (RGBA). */
71
+ pixels?: Uint8ClampedArray;
63
72
  }
64
73
  /** Runs `job` on `pixels` here and now. */
65
74
  export declare function runSelectionJob(job: SelectionJob, pixels: PixelBuffer, onProgress?: SelectionProgress): SelectionJobResult;
@@ -86,6 +95,7 @@ export type SelectionWorkerResponse = {
86
95
  mask: SerializedMask;
87
96
  reason?: string;
88
97
  noiseLevel?: number;
98
+ pixels?: Uint8ClampedArray;
89
99
  } | {
90
100
  type: 'error';
91
101
  id: number;
@@ -1,14 +1,15 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkX4LUGTQXcjs = require('../chunk-X4LUGTQX.cjs');
3
+ var _chunkL52VMQZScjs = require('../chunk-L52VMQZS.cjs');
4
4
  require('../chunk-QYLWG22N.cjs');
5
5
  require('../chunk-K6PXS6DO.cjs');
6
+ require('../chunk-MQDIP4CF.cjs');
6
7
  require('../chunk-474IQG74.cjs');
7
8
 
8
9
  // src/image-editor/selection-worker.ts
9
10
  if (typeof self !== "undefined" && typeof window === "undefined" && typeof self.postMessage === "function") {
10
- _chunkX4LUGTQXcjs.startSelectionWorker.call(void 0, self);
11
+ _chunkL52VMQZScjs.startSelectionWorker.call(void 0, self);
11
12
  }
12
13
 
13
14
 
14
- exports.startSelectionWorker = _chunkX4LUGTQXcjs.startSelectionWorker;
15
+ exports.startSelectionWorker = _chunkL52VMQZScjs.startSelectionWorker;
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  startSelectionWorker
3
- } from "../chunk-DWYQPL2A.js";
3
+ } from "../chunk-LQ5SALHK.js";
4
4
  import "../chunk-L3G23N5Y.js";
5
5
  import "../chunk-ZIF4UJJ6.js";
6
+ import "../chunk-XI2NV5U7.js";
6
7
  import "../chunk-HVVR5PZW.js";
7
8
 
8
9
  // src/image-editor/selection-worker.ts
@@ -1,3 +1,4 @@
1
+ import type { DocumentPath, SerializedDocumentPath } from './paths.cjs';
1
2
  import type { SelectionWorkerFactory } from './selection/worker.cjs';
2
3
  import type { GlobalLight } from '../raster/effects/model.cjs';
3
4
  import type { EffectPattern } from '../raster/effects/patterns.cjs';
@@ -311,6 +312,11 @@ export interface ImageEditorState {
311
312
  * selected. Recorded in undo history and saved as `selection` in `toJSON()`.
312
313
  */
313
314
  selection?: SelectionMask | null;
315
+ /**
316
+ * A selection shown in place of `selection` while a gesture is in progress (Quick Selection
317
+ * growing as the brush moves). View state: not an edit, not in history, not saved.
318
+ */
319
+ selectionPreview?: SelectionMask | null;
314
320
  /** Quick Mask view: tint the unselected area instead of drawing marching ants (view state). */
315
321
  quickMask?: boolean;
316
322
  /** How the canvas shows the selection (view state; `quickMask` mirrors `'quickMask'`). */
@@ -330,6 +336,10 @@ export interface ImageEditorState {
330
336
  quickMaskEditing?: boolean;
331
337
  /** Alpha channels: saved selections kept with the document, recorded in undo history. */
332
338
  channels?: AlphaChannel[];
339
+ /** Document paths (the Paths panel): the Work Path and saved paths. Recorded in undo history and saved. */
340
+ paths?: DocumentPath[];
341
+ /** The path selected in the Paths panel (view state). */
342
+ activePathId?: string | null;
333
343
  /**
334
344
  * The layer stack, bottom to top. Opening an image gives one pixel layer, "Background", whose
335
345
  * pixels are the source image. Layers are immutable: compare them by identity.
@@ -399,6 +409,8 @@ export interface LegacySerializedImageEditorState {
399
409
  selection?: SerializedSelection;
400
410
  /** Alpha channels (saved selections), run-length encoded. */
401
411
  channels?: SerializedAlphaChannel[];
412
+ /** Document paths (the Paths panel). */
413
+ paths?: SerializedDocumentPath[];
402
414
  }
403
415
  /**
404
416
  * A stored editor state: the document-level schema (v1 / v2) or the layered schema (v3, see
@@ -1,3 +1,4 @@
1
+ import type { DocumentPath, SerializedDocumentPath } from './paths.js';
1
2
  import type { SelectionWorkerFactory } from './selection/worker.js';
2
3
  import type { GlobalLight } from '../raster/effects/model.js';
3
4
  import type { EffectPattern } from '../raster/effects/patterns.js';
@@ -311,6 +312,11 @@ export interface ImageEditorState {
311
312
  * selected. Recorded in undo history and saved as `selection` in `toJSON()`.
312
313
  */
313
314
  selection?: SelectionMask | null;
315
+ /**
316
+ * A selection shown in place of `selection` while a gesture is in progress (Quick Selection
317
+ * growing as the brush moves). View state: not an edit, not in history, not saved.
318
+ */
319
+ selectionPreview?: SelectionMask | null;
314
320
  /** Quick Mask view: tint the unselected area instead of drawing marching ants (view state). */
315
321
  quickMask?: boolean;
316
322
  /** How the canvas shows the selection (view state; `quickMask` mirrors `'quickMask'`). */
@@ -330,6 +336,10 @@ export interface ImageEditorState {
330
336
  quickMaskEditing?: boolean;
331
337
  /** Alpha channels: saved selections kept with the document, recorded in undo history. */
332
338
  channels?: AlphaChannel[];
339
+ /** Document paths (the Paths panel): the Work Path and saved paths. Recorded in undo history and saved. */
340
+ paths?: DocumentPath[];
341
+ /** The path selected in the Paths panel (view state). */
342
+ activePathId?: string | null;
333
343
  /**
334
344
  * The layer stack, bottom to top. Opening an image gives one pixel layer, "Background", whose
335
345
  * pixels are the source image. Layers are immutable: compare them by identity.
@@ -399,6 +409,8 @@ export interface LegacySerializedImageEditorState {
399
409
  selection?: SerializedSelection;
400
410
  /** Alpha channels (saved selections), run-length encoded. */
401
411
  channels?: SerializedAlphaChannel[];
412
+ /** Document paths (the Paths panel). */
413
+ paths?: SerializedDocumentPath[];
402
414
  }
403
415
  /**
404
416
  * A stored editor state: the document-level schema (v1 / v2) or the layered schema (v3, see
@@ -29,9 +29,11 @@ export declare function bestOffset(w: number, h: number, ch: number, img: ArrayL
29
29
  * continue across it: PatchMatch nearest-neighbour fields over 7 × 7 patches with patch voting
30
30
  * (Wexler et al. / Barnes et al.), run coarse to fine from a smooth fill. Deterministic for the
31
31
  * same input. Returns the filled image; pixels outside `hole` are unchanged. Falls back to a
32
- * smooth fill when there is no whole patch to copy from.
32
+ * smooth fill when there is no whole patch to copy from. `exclude` marks pixels no source patch
33
+ * may include (Content-Aware Fill's sampling area is everything else).
33
34
  */
34
35
  export declare function contentAwareFill(w: number, h: number, ch: number, img: ArrayLike<number>, hole: ArrayLike<boolean | number>, options?: {
35
36
  iterations?: number;
36
37
  seed?: number;
38
+ exclude?: ArrayLike<boolean | number> | null;
37
39
  }): Float32Array;
@@ -29,9 +29,11 @@ export declare function bestOffset(w: number, h: number, ch: number, img: ArrayL
29
29
  * continue across it: PatchMatch nearest-neighbour fields over 7 × 7 patches with patch voting
30
30
  * (Wexler et al. / Barnes et al.), run coarse to fine from a smooth fill. Deterministic for the
31
31
  * same input. Returns the filled image; pixels outside `hole` are unchanged. Falls back to a
32
- * smooth fill when there is no whole patch to copy from.
32
+ * smooth fill when there is no whole patch to copy from. `exclude` marks pixels no source patch
33
+ * may include (Content-Aware Fill's sampling area is everything else).
33
34
  */
34
35
  export declare function contentAwareFill(w: number, h: number, ch: number, img: ArrayLike<number>, hole: ArrayLike<boolean | number>, options?: {
35
36
  iterations?: number;
36
37
  seed?: number;
38
+ exclude?: ArrayLike<boolean | number> | null;
37
39
  }): Float32Array;
@@ -29,6 +29,7 @@
29
29
 
30
30
 
31
31
 
32
+ var _chunkYF3YZZ6Gcjs = require('../chunk-YF3YZZ6G.cjs');
32
33
 
33
34
 
34
35
 
@@ -36,7 +37,8 @@
36
37
 
37
38
 
38
39
 
39
- var _chunk3EHPLDFQcjs = require('../chunk-3EHPLDFQ.cjs');
40
+
41
+ var _chunkMQDIP4CFcjs = require('../chunk-MQDIP4CF.cjs');
40
42
 
41
43
 
42
44
 
@@ -481,4 +483,4 @@ require('../chunk-XFM3OCHU.cjs');
481
483
 
482
484
 
483
485
 
484
- exports.BODY_SCATTER = _chunkKWNMBMKGcjs.BODY_SCATTER; exports.BRUSHSTROKE_MAX_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MAX_SCALE; exports.BRUSHSTROKE_MIN_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MIN_SCALE; exports.BrushstrokeCache = _chunkPQ3H2AANcjs.BrushstrokeCache; exports.CoverageMap = _chunkPQ3H2AANcjs.CoverageMap; exports.DEFAULT_BLENDER = _chunkPQ3H2AANcjs.DEFAULT_BLENDER; exports.DEFAULT_BRUSH = _chunkPQ3H2AANcjs.DEFAULT_BRUSH; exports.DEFAULT_FLOW = _chunkKWNMBMKGcjs.DEFAULT_FLOW; exports.DEFAULT_MIXER = _chunkPQ3H2AANcjs.DEFAULT_MIXER; exports.DEFAULT_PAINT_GRADIENT = _chunkPQ3H2AANcjs.DEFAULT_PAINT_GRADIENT; exports.DEFAULT_PAINT_GRADIENT_MAPPING = _chunkPQ3H2AANcjs.DEFAULT_PAINT_GRADIENT_MAPPING; exports.DEFAULT_RETOUCH = _chunk3EHPLDFQcjs.DEFAULT_RETOUCH; exports.DEFAULT_SMUDGE = _chunkPQ3H2AANcjs.DEFAULT_SMUDGE; exports.DEFAULT_WET_PAPER = _chunkKWNMBMKGcjs.DEFAULT_WET_PAPER; exports.DEFAULT_WET_PARAMS = _chunkKWNMBMKGcjs.DEFAULT_WET_PARAMS; exports.DRY_EPS = _chunkKWNMBMKGcjs.DRY_EPS; exports.DabWalker = _chunkPQ3H2AANcjs.DabWalker; exports.EMPTY_MIXER_LOAD = _chunkPQ3H2AANcjs.EMPTY_MIXER_LOAD; exports.EX = _chunkKWNMBMKGcjs.EX; exports.EY = _chunkKWNMBMKGcjs.EY; exports.FLAG_ALIVE = _chunkKWNMBMKGcjs.FLAG_ALIVE; exports.FLAG_BOTTOM = _chunkKWNMBMKGcjs.FLAG_BOTTOM; exports.FLAG_LEFT = _chunkKWNMBMKGcjs.FLAG_LEFT; exports.FLAG_RIGHT = _chunkKWNMBMKGcjs.FLAG_RIGHT; exports.FLAG_TOP = _chunkKWNMBMKGcjs.FLAG_TOP; exports.FLAG_WET = _chunkKWNMBMKGcjs.FLAG_WET; exports.FLAT = _chunkKWNMBMKGcjs.FLAT; exports.FREE_INTERVAL = _chunkKWNMBMKGcjs.FREE_INTERVAL; exports.GRAIN_PATTERNS = _chunkPQ3H2AANcjs.GRAIN_PATTERNS; exports.GRAIN_TILE = _chunkPQ3H2AANcjs.GRAIN_TILE; exports.HIDE = _chunkKWNMBMKGcjs.HIDE; exports.IDENTITY_CLONE_TRANSFORM = _chunk3EHPLDFQcjs.IDENTITY_CLONE_TRANSFORM; exports.MAX_BATCH = _chunkKWNMBMKGcjs.MAX_BATCH; exports.MAX_BRUSH_SIZE = _chunkPQ3H2AANcjs.MAX_BRUSH_SIZE; exports.MAX_TILT_ACCEL = _chunkKWNMBMKGcjs.MAX_TILT_ACCEL; exports.MAX_WET_LANES = _chunkKWNMBMKGcjs.MAX_WET_LANES; exports.MAX_WET_SLOTS = _chunkKWNMBMKGcjs.MAX_WET_SLOTS; exports.MIXER_DRAIN = _chunkPQ3H2AANcjs.MIXER_DRAIN; exports.MIXER_PICKUP_RATE = _chunkPQ3H2AANcjs.MIXER_PICKUP_RATE; exports.MIXING_MODELS = _chunkPQ3H2AANcjs.MIXING_MODELS; exports.MixerStroke = _chunkPQ3H2AANcjs.MixerStroke; exports.OPP = _chunkKWNMBMKGcjs.OPP; exports.PAINT_COLOR_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_COLOR_JSON_SCHEMA; exports.PAINT_GRADIENT_FULL_SPEED = _chunkPQ3H2AANcjs.PAINT_GRADIENT_FULL_SPEED; exports.PAINT_GRADIENT_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_GRADIENT_JSON_SCHEMA; exports.PAINT_GRADIENT_KIT = _chunkPQ3H2AANcjs.PAINT_GRADIENT_KIT; exports.PAINT_GRADIENT_MAPPINGS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_MAPPINGS; exports.PAINT_GRADIENT_MAPPING_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_MAPPING_LABELS; exports.PAINT_GRADIENT_PRESETS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_PRESETS; exports.PAINT_GRADIENT_REPEATS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_REPEATS; exports.PAINT_GRADIENT_REPEAT_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_REPEAT_LABELS; exports.PAINT_GRADIENT_SPACES = _chunkPQ3H2AANcjs.PAINT_GRADIENT_SPACES; exports.PAINT_GRADIENT_SPACE_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_SPACE_LABELS; exports.PAINT_SOURCE_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_SOURCE_JSON_SCHEMA; exports.PAPER_CAPACITY = _chunkKWNMBMKGcjs.PAPER_CAPACITY; exports.PARAM = _chunkKWNMBMKGcjs.PARAM; exports.PARAM_FLOATS = _chunkKWNMBMKGcjs.PARAM_FLOATS; exports.PIGMENT_BANDS = _chunkOLNIPTB3cjs.PIGMENT_BANDS; exports.PIGMENT_CHANNELS = _chunkKWNMBMKGcjs.PIGMENT_CHANNELS; exports.PIGMENT_LAMBDA_MIN = _chunkOLNIPTB3cjs.PIGMENT_LAMBDA_MIN; exports.PIGMENT_LAMBDA_STEP = _chunkOLNIPTB3cjs.PIGMENT_LAMBDA_STEP; exports.PIGMENT_UNIT = _chunkKWNMBMKGcjs.PIGMENT_UNIT; exports.PIGMENT_WAVELENGTHS = _chunkOLNIPTB3cjs.PIGMENT_WAVELENGTHS; exports.PLANE = _chunkKWNMBMKGcjs.PLANE; exports.PLANE_BYTES = _chunkKWNMBMKGcjs.PLANE_BYTES; exports.P_D0 = _chunkKWNMBMKGcjs.P_D0; exports.P_EDGE = _chunkKWNMBMKGcjs.P_EDGE; exports.P_FX = _chunkKWNMBMKGcjs.P_FX; exports.P_FY = _chunkKWNMBMKGcjs.P_FY; exports.P_H = _chunkKWNMBMKGcjs.P_H; exports.P_P0 = _chunkKWNMBMKGcjs.P_P0; exports.P_RHO = _chunkKWNMBMKGcjs.P_RHO; exports.P_SW = _chunkKWNMBMKGcjs.P_SW; exports.P_UX = _chunkKWNMBMKGcjs.P_UX; exports.P_UY = _chunkKWNMBMKGcjs.P_UY; exports.PaintExchange = _chunkPQ3H2AANcjs.PaintExchange; exports.PaintGradientSampler = _chunkPQ3H2AANcjs.PaintGradientSampler; exports.PaintSourceError = _chunkPQ3H2AANcjs.PaintSourceError; exports.PaperGrain = _chunkPQ3H2AANcjs.PaperGrain; exports.RETOUCH_SAMPLES = _chunk3EHPLDFQcjs.RETOUCH_SAMPLES; exports.RegionPixelSource = _chunk3EHPLDFQcjs.RegionPixelSource; exports.RetouchDabStroke = _chunk3EHPLDFQcjs.RetouchDabStroke; exports.SET_PLANES = _chunkKWNMBMKGcjs.SET_PLANES; exports.SLOT_BYTES = _chunkKWNMBMKGcjs.SLOT_BYTES; exports.SLOT_PLANES = _chunkKWNMBMKGcjs.SLOT_PLANES; exports.SLOT_SIDE = _chunkKWNMBMKGcjs.SLOT_SIDE; exports.SPOT_HEAL_TYPES = _chunk3EHPLDFQcjs.SPOT_HEAL_TYPES; exports.SRGB_TO_LINEAR = _chunkKWNMBMKGcjs.SRGB_TO_LINEAR; exports.STRIP = _chunkKWNMBMKGcjs.STRIP; exports.SmudgeTip = _chunkPQ3H2AANcjs.SmudgeTip; exports.StrokeCoverage = _chunkPQ3H2AANcjs.StrokeCoverage; exports.TIP_GRADIENT_STEPS = _chunkPQ3H2AANcjs.TIP_GRADIENT_STEPS; exports.TONE_RANGES = _chunk3EHPLDFQcjs.TONE_RANGES; exports.TileMedium = _chunkPQ3H2AANcjs.TileMedium; exports.TilePixelSource = _chunk3EHPLDFQcjs.TilePixelSource; exports.TileableNoise = _chunkPQ3H2AANcjs.TileableNoise; exports.TransformedPixelSource = _chunk3EHPLDFQcjs.TransformedPixelSource; exports.U_MAX = _chunkKWNMBMKGcjs.U_MAX; exports.W9 = _chunkKWNMBMKGcjs.W9; exports.WET_FLOW_KINDS = _chunkKWNMBMKGcjs.WET_FLOW_KINDS; exports.WET_PARAM_KEYS = _chunkKWNMBMKGcjs.WET_PARAM_KEYS; exports.WET_TILE = _chunkKWNMBMKGcjs.WET_TILE; exports.WGSL_HALO = _chunkKWNMBMKGcjs.WGSL_HALO; exports.WGSL_SHADE = _chunkKWNMBMKGcjs.WGSL_SHADE; exports.WGSL_STEP = _chunkKWNMBMKGcjs.WGSL_STEP; exports.WetGpuEngine = _chunkKWNMBMKGcjs.WetGpuEngine; exports.WetMedium = _chunkKWNMBMKGcjs.WetMedium; exports.WetWorkerPool = _chunkKWNMBMKGcjs.WetWorkerPool; exports.WetWorld = _chunkKWNMBMKGcjs.WetWorld; exports.WetWorldError = _chunkKWNMBMKGcjs.WetWorldError; exports.addPaintGradientStop = _chunkPQ3H2AANcjs.addPaintGradientStop; exports.applyRetouchToTile = _chunk3EHPLDFQcjs.applyRetouchToTile; exports.applyStrokeToDeepTile = _chunkPQ3H2AANcjs.applyStrokeToDeepTile; exports.applyStrokeToTile = _chunkPQ3H2AANcjs.applyStrokeToTile; exports.applyToneToDeepTile = _chunk3EHPLDFQcjs.applyToneToDeepTile; exports.bestOffset = _chunk3EHPLDFQcjs.bestOffset; exports.blendRadius = _chunkPQ3H2AANcjs.blendRadius; exports.blenderDab = _chunkPQ3H2AANcjs.blenderDab; exports.boxBlurPixels = _chunk3EHPLDFQcjs.boxBlurPixels; exports.brushstrokeDataUrl = _chunkPQ3H2AANcjs.brushstrokeDataUrl; exports.brushstrokeKey = _chunkPQ3H2AANcjs.brushstrokeKey; exports.brushstrokeSamples = _chunkPQ3H2AANcjs.brushstrokeSamples; exports.brushstrokeScaleBucket = _chunkYQGCPL5Xcjs.brushstrokeScaleBucket; exports.brushstrokeStrokeOptions = _chunkPQ3H2AANcjs.brushstrokeStrokeOptions; exports.brushstrokeToCanvas = _chunkPQ3H2AANcjs.brushstrokeToCanvas; exports.canShareMemory = _chunkKWNMBMKGcjs.canShareMemory; exports.cleanMixer = _chunkPQ3H2AANcjs.cleanMixer; exports.cloneSamplePoint = _chunk3EHPLDFQcjs.cloneSamplePoint; exports.contentAwareFill = _chunk3EHPLDFQcjs.contentAwareFill; exports.coverageTileCoord = _chunkPQ3H2AANcjs.coverageTileCoord; exports.createBlenderScratch = _chunkPQ3H2AANcjs.createBlenderScratch; exports.createPigment = _chunkOLNIPTB3cjs.createPigment; exports.createPigmentTools = _chunkKWNMBMKGcjs.createPigmentTools; exports.createWetGpuEngine = _chunkKWNMBMKGcjs.createWetGpuEngine; exports.dabCoverage = _chunkPQ3H2AANcjs.dabCoverage; exports.dabRect = _chunkPQ3H2AANcjs.dabRect; exports.dexp = _chunkKWNMBMKGcjs.dexp; exports.dilateMask = _chunk3EHPLDFQcjs.dilateMask; exports.dlog = _chunkKWNMBMKGcjs.dlog; exports.dodgeBurn = _chunk3EHPLDFQcjs.dodgeBurn; exports.dodgeBurnCurve = _chunk3EHPLDFQcjs.dodgeBurnCurve; exports.dpow = _chunkKWNMBMKGcjs.dpow; exports.dsincos = _chunkKWNMBMKGcjs.dsincos; exports.edgeBits = _chunkKWNMBMKGcjs.edgeBits; exports.exchangeRates = _chunkPQ3H2AANcjs.exchangeRates; exports.expNeg = _chunkKWNMBMKGcjs.expNeg; exports.filmPixel = _chunkKWNMBMKGcjs.filmPixel; exports.filmReflectance = _chunkKWNMBMKGcjs.filmReflectance; exports.findWebGpu = _chunkKWNMBMKGcjs.findWebGpu; exports.flowField = _chunkKWNMBMKGcjs.flowField; exports.gradientDabColor = _chunkPQ3H2AANcjs.gradientDabColor; exports.grainCatch = _chunkPQ3H2AANcjs.grainCatch; exports.grainHeights = _chunkPQ3H2AANcjs.grainHeights; exports.hash2 = _chunkPQ3H2AANcjs.hash2; exports.healPixels = _chunk3EHPLDFQcjs.healPixels; exports.hexToPaintRgb = _chunkPQ3H2AANcjs.hexToPaintRgb; exports.isBrushstrokeBrush = _chunkPQ3H2AANcjs.isBrushstrokeBrush; exports.isGradientPaint = _chunkPQ3H2AANcjs.isGradientPaint; exports.isIdentityCloneTransform = _chunk3EHPLDFQcjs.isIdentityCloneTransform; exports.latticeViscosity = _chunkKWNMBMKGcjs.latticeViscosity; exports.lerpPigment = _chunkOLNIPTB3cjs.lerpPigment; exports.lerpPigmentInto = _chunkOLNIPTB3cjs.lerpPigmentInto; exports.linearToSrgb8 = _chunkKWNMBMKGcjs.linearToSrgb8; exports.loadMixer = _chunkPQ3H2AANcjs.loadMixer; exports.loadWetKernel = _chunkKWNMBMKGcjs.loadWetKernel; exports.luma = _chunk3EHPLDFQcjs.luma; exports.maskBounds = _chunk3EHPLDFQcjs.maskBounds; exports.membraneFill = _chunk3EHPLDFQcjs.membraneFill; exports.mix32 = _chunkPQ3H2AANcjs.mix32; exports.mixPigments = _chunkOLNIPTB3cjs.mixPigments; exports.mixerRates = _chunkPQ3H2AANcjs.mixerRates; exports.normalizeBlender = _chunkPQ3H2AANcjs.normalizeBlender; exports.normalizeBrush = _chunkPQ3H2AANcjs.normalizeBrush; exports.normalizeFlow = _chunkKWNMBMKGcjs.normalizeFlow; exports.normalizeHexColor = _chunkPQ3H2AANcjs.normalizeHexColor; exports.normalizeMixer = _chunkPQ3H2AANcjs.normalizeMixer; exports.normalizeRetouch = _chunk3EHPLDFQcjs.normalizeRetouch; exports.normalizeSmudge = _chunkPQ3H2AANcjs.normalizeSmudge; exports.normalizeTilt = _chunkKWNMBMKGcjs.normalizeTilt; exports.normalizeWetParams = _chunkKWNMBMKGcjs.normalizeWetParams; exports.packWetParams = _chunkKWNMBMKGcjs.packWetParams; exports.paintGradientMappingFor = _chunkPQ3H2AANcjs.paintGradientMappingFor; exports.paintPathStroke = _chunkPQ3H2AANcjs.paintPathStroke; exports.paintSourceColor = _chunkPQ3H2AANcjs.paintSourceColor; exports.paintSourceCss = _chunkPQ3H2AANcjs.paintSourceCss; exports.parsePaintSource = _chunkPQ3H2AANcjs.parsePaintSource; exports.pathStrokeCoverage = _chunkPQ3H2AANcjs.pathStrokeCoverage; exports.pathStrokeDabs = _chunkPQ3H2AANcjs.pathStrokeDabs; exports.perDabStrength = _chunk3EHPLDFQcjs.perDabStrength; exports.pigmentColor = _chunkKWNMBMKGcjs.pigmentColor; exports.pigmentOf = _chunkKWNMBMKGcjs.pigmentOf; exports.pixelPigment = _chunkKWNMBMKGcjs.pixelPigment; exports.pointerPressure = _chunkKWNMBMKGcjs.pointerPressure; exports.pointerStrokeSample = _chunkKWNMBMKGcjs.pointerStrokeSample; exports.pointerStrokeSamples = _chunkKWNMBMKGcjs.pointerStrokeSamples; exports.put255 = _chunkPQ3H2AANcjs.put255; exports.rand01 = _chunkPQ3H2AANcjs.rand01; exports.randSigned = _chunkPQ3H2AANcjs.randSigned; exports.rasterizeDab = _chunkPQ3H2AANcjs.rasterizeDab; exports.readPaintSource = _chunkPQ3H2AANcjs.readPaintSource; exports.readSourceRegion = _chunk3EHPLDFQcjs.readSourceRegion; exports.reflectanceToRgb = _chunkOLNIPTB3cjs.reflectanceToRgb; exports.removePaintGradientStop = _chunkPQ3H2AANcjs.removePaintGradientStop; exports.renderBrushstroke = _chunkPQ3H2AANcjs.renderBrushstroke; exports.resolvePaintGradient = _chunkPQ3H2AANcjs.resolvePaintGradient; exports.retouchFilter = _chunk3EHPLDFQcjs.retouchFilter; exports.reversePaintGradient = _chunkPQ3H2AANcjs.reversePaintGradient; exports.rgbToReflectance = _chunkOLNIPTB3cjs.rgbToReflectance; exports.rgbaViewOfGrey = _chunk3EHPLDFQcjs.rgbaViewOfGrey; exports.saturationOf = _chunk3EHPLDFQcjs.saturationOf; exports.scalePaintGradient = _chunkPQ3H2AANcjs.scalePaintGradient; exports.seamlessClone = _chunk3EHPLDFQcjs.seamlessClone; exports.seedFromString = _chunkPQ3H2AANcjs.seedFromString; exports.setPigmentColor = _chunkOLNIPTB3cjs.setPigmentColor; exports.shadeTile = _chunkKWNMBMKGcjs.shadeTile; exports.smoothPoints = _chunkPQ3H2AANcjs.smoothPoints; exports.smudgeEffect = _chunk3EHPLDFQcjs.smudgeEffect; exports.solidPaint = _chunkPQ3H2AANcjs.solidPaint; exports.solveMembrane = _chunk3EHPLDFQcjs.solveMembrane; exports.sponge = _chunk3EHPLDFQcjs.sponge; exports.spongeEffect = _chunk3EHPLDFQcjs.spongeEffect; exports.spotHealPixels = _chunk3EHPLDFQcjs.spotHealPixels; exports.spotHealWindow = _chunk3EHPLDFQcjs.spotHealWindow; exports.srgbByteToLinear = _chunkKWNMBMKGcjs.srgbByteToLinear; exports.stepSlotTs = _chunkKWNMBMKGcjs.stepSlotTs; exports.strokeGrainCatch = _chunkPQ3H2AANcjs.strokeGrainCatch; exports.tipFalloff = _chunkPQ3H2AANcjs.tipFalloff; exports.tipReach = _chunkPQ3H2AANcjs.tipReach; exports.tipShape = _chunkPQ3H2AANcjs.tipShape; exports.toneOf = _chunk3EHPLDFQcjs.toneOf; exports.updatePaintGradientStop = _chunkPQ3H2AANcjs.updatePaintGradientStop; exports.walkDabs = _chunkPQ3H2AANcjs.walkDabs; exports.wetGpuSupport = _chunkKWNMBMKGcjs.wetGpuSupport; exports.wetSimdSupported = _chunkKWNMBMKGcjs.wetSimdSupported; exports.wetSupport = _chunkKWNMBMKGcjs.wetSupport;
486
+ exports.BODY_SCATTER = _chunkKWNMBMKGcjs.BODY_SCATTER; exports.BRUSHSTROKE_MAX_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MAX_SCALE; exports.BRUSHSTROKE_MIN_SCALE = _chunkYQGCPL5Xcjs.BRUSHSTROKE_MIN_SCALE; exports.BrushstrokeCache = _chunkPQ3H2AANcjs.BrushstrokeCache; exports.CoverageMap = _chunkPQ3H2AANcjs.CoverageMap; exports.DEFAULT_BLENDER = _chunkPQ3H2AANcjs.DEFAULT_BLENDER; exports.DEFAULT_BRUSH = _chunkPQ3H2AANcjs.DEFAULT_BRUSH; exports.DEFAULT_FLOW = _chunkKWNMBMKGcjs.DEFAULT_FLOW; exports.DEFAULT_MIXER = _chunkPQ3H2AANcjs.DEFAULT_MIXER; exports.DEFAULT_PAINT_GRADIENT = _chunkPQ3H2AANcjs.DEFAULT_PAINT_GRADIENT; exports.DEFAULT_PAINT_GRADIENT_MAPPING = _chunkPQ3H2AANcjs.DEFAULT_PAINT_GRADIENT_MAPPING; exports.DEFAULT_RETOUCH = _chunkYF3YZZ6Gcjs.DEFAULT_RETOUCH; exports.DEFAULT_SMUDGE = _chunkPQ3H2AANcjs.DEFAULT_SMUDGE; exports.DEFAULT_WET_PAPER = _chunkKWNMBMKGcjs.DEFAULT_WET_PAPER; exports.DEFAULT_WET_PARAMS = _chunkKWNMBMKGcjs.DEFAULT_WET_PARAMS; exports.DRY_EPS = _chunkKWNMBMKGcjs.DRY_EPS; exports.DabWalker = _chunkPQ3H2AANcjs.DabWalker; exports.EMPTY_MIXER_LOAD = _chunkPQ3H2AANcjs.EMPTY_MIXER_LOAD; exports.EX = _chunkKWNMBMKGcjs.EX; exports.EY = _chunkKWNMBMKGcjs.EY; exports.FLAG_ALIVE = _chunkKWNMBMKGcjs.FLAG_ALIVE; exports.FLAG_BOTTOM = _chunkKWNMBMKGcjs.FLAG_BOTTOM; exports.FLAG_LEFT = _chunkKWNMBMKGcjs.FLAG_LEFT; exports.FLAG_RIGHT = _chunkKWNMBMKGcjs.FLAG_RIGHT; exports.FLAG_TOP = _chunkKWNMBMKGcjs.FLAG_TOP; exports.FLAG_WET = _chunkKWNMBMKGcjs.FLAG_WET; exports.FLAT = _chunkKWNMBMKGcjs.FLAT; exports.FREE_INTERVAL = _chunkKWNMBMKGcjs.FREE_INTERVAL; exports.GRAIN_PATTERNS = _chunkPQ3H2AANcjs.GRAIN_PATTERNS; exports.GRAIN_TILE = _chunkPQ3H2AANcjs.GRAIN_TILE; exports.HIDE = _chunkKWNMBMKGcjs.HIDE; exports.IDENTITY_CLONE_TRANSFORM = _chunkYF3YZZ6Gcjs.IDENTITY_CLONE_TRANSFORM; exports.MAX_BATCH = _chunkKWNMBMKGcjs.MAX_BATCH; exports.MAX_BRUSH_SIZE = _chunkPQ3H2AANcjs.MAX_BRUSH_SIZE; exports.MAX_TILT_ACCEL = _chunkKWNMBMKGcjs.MAX_TILT_ACCEL; exports.MAX_WET_LANES = _chunkKWNMBMKGcjs.MAX_WET_LANES; exports.MAX_WET_SLOTS = _chunkKWNMBMKGcjs.MAX_WET_SLOTS; exports.MIXER_DRAIN = _chunkPQ3H2AANcjs.MIXER_DRAIN; exports.MIXER_PICKUP_RATE = _chunkPQ3H2AANcjs.MIXER_PICKUP_RATE; exports.MIXING_MODELS = _chunkPQ3H2AANcjs.MIXING_MODELS; exports.MixerStroke = _chunkPQ3H2AANcjs.MixerStroke; exports.OPP = _chunkKWNMBMKGcjs.OPP; exports.PAINT_COLOR_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_COLOR_JSON_SCHEMA; exports.PAINT_GRADIENT_FULL_SPEED = _chunkPQ3H2AANcjs.PAINT_GRADIENT_FULL_SPEED; exports.PAINT_GRADIENT_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_GRADIENT_JSON_SCHEMA; exports.PAINT_GRADIENT_KIT = _chunkPQ3H2AANcjs.PAINT_GRADIENT_KIT; exports.PAINT_GRADIENT_MAPPINGS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_MAPPINGS; exports.PAINT_GRADIENT_MAPPING_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_MAPPING_LABELS; exports.PAINT_GRADIENT_PRESETS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_PRESETS; exports.PAINT_GRADIENT_REPEATS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_REPEATS; exports.PAINT_GRADIENT_REPEAT_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_REPEAT_LABELS; exports.PAINT_GRADIENT_SPACES = _chunkPQ3H2AANcjs.PAINT_GRADIENT_SPACES; exports.PAINT_GRADIENT_SPACE_LABELS = _chunkPQ3H2AANcjs.PAINT_GRADIENT_SPACE_LABELS; exports.PAINT_SOURCE_JSON_SCHEMA = _chunkPQ3H2AANcjs.PAINT_SOURCE_JSON_SCHEMA; exports.PAPER_CAPACITY = _chunkKWNMBMKGcjs.PAPER_CAPACITY; exports.PARAM = _chunkKWNMBMKGcjs.PARAM; exports.PARAM_FLOATS = _chunkKWNMBMKGcjs.PARAM_FLOATS; exports.PIGMENT_BANDS = _chunkOLNIPTB3cjs.PIGMENT_BANDS; exports.PIGMENT_CHANNELS = _chunkKWNMBMKGcjs.PIGMENT_CHANNELS; exports.PIGMENT_LAMBDA_MIN = _chunkOLNIPTB3cjs.PIGMENT_LAMBDA_MIN; exports.PIGMENT_LAMBDA_STEP = _chunkOLNIPTB3cjs.PIGMENT_LAMBDA_STEP; exports.PIGMENT_UNIT = _chunkKWNMBMKGcjs.PIGMENT_UNIT; exports.PIGMENT_WAVELENGTHS = _chunkOLNIPTB3cjs.PIGMENT_WAVELENGTHS; exports.PLANE = _chunkKWNMBMKGcjs.PLANE; exports.PLANE_BYTES = _chunkKWNMBMKGcjs.PLANE_BYTES; exports.P_D0 = _chunkKWNMBMKGcjs.P_D0; exports.P_EDGE = _chunkKWNMBMKGcjs.P_EDGE; exports.P_FX = _chunkKWNMBMKGcjs.P_FX; exports.P_FY = _chunkKWNMBMKGcjs.P_FY; exports.P_H = _chunkKWNMBMKGcjs.P_H; exports.P_P0 = _chunkKWNMBMKGcjs.P_P0; exports.P_RHO = _chunkKWNMBMKGcjs.P_RHO; exports.P_SW = _chunkKWNMBMKGcjs.P_SW; exports.P_UX = _chunkKWNMBMKGcjs.P_UX; exports.P_UY = _chunkKWNMBMKGcjs.P_UY; exports.PaintExchange = _chunkPQ3H2AANcjs.PaintExchange; exports.PaintGradientSampler = _chunkPQ3H2AANcjs.PaintGradientSampler; exports.PaintSourceError = _chunkPQ3H2AANcjs.PaintSourceError; exports.PaperGrain = _chunkPQ3H2AANcjs.PaperGrain; exports.RETOUCH_SAMPLES = _chunkYF3YZZ6Gcjs.RETOUCH_SAMPLES; exports.RegionPixelSource = _chunkYF3YZZ6Gcjs.RegionPixelSource; exports.RetouchDabStroke = _chunkYF3YZZ6Gcjs.RetouchDabStroke; exports.SET_PLANES = _chunkKWNMBMKGcjs.SET_PLANES; exports.SLOT_BYTES = _chunkKWNMBMKGcjs.SLOT_BYTES; exports.SLOT_PLANES = _chunkKWNMBMKGcjs.SLOT_PLANES; exports.SLOT_SIDE = _chunkKWNMBMKGcjs.SLOT_SIDE; exports.SPOT_HEAL_TYPES = _chunkYF3YZZ6Gcjs.SPOT_HEAL_TYPES; exports.SRGB_TO_LINEAR = _chunkKWNMBMKGcjs.SRGB_TO_LINEAR; exports.STRIP = _chunkKWNMBMKGcjs.STRIP; exports.SmudgeTip = _chunkPQ3H2AANcjs.SmudgeTip; exports.StrokeCoverage = _chunkPQ3H2AANcjs.StrokeCoverage; exports.TIP_GRADIENT_STEPS = _chunkPQ3H2AANcjs.TIP_GRADIENT_STEPS; exports.TONE_RANGES = _chunkYF3YZZ6Gcjs.TONE_RANGES; exports.TileMedium = _chunkPQ3H2AANcjs.TileMedium; exports.TilePixelSource = _chunkYF3YZZ6Gcjs.TilePixelSource; exports.TileableNoise = _chunkPQ3H2AANcjs.TileableNoise; exports.TransformedPixelSource = _chunkYF3YZZ6Gcjs.TransformedPixelSource; exports.U_MAX = _chunkKWNMBMKGcjs.U_MAX; exports.W9 = _chunkKWNMBMKGcjs.W9; exports.WET_FLOW_KINDS = _chunkKWNMBMKGcjs.WET_FLOW_KINDS; exports.WET_PARAM_KEYS = _chunkKWNMBMKGcjs.WET_PARAM_KEYS; exports.WET_TILE = _chunkKWNMBMKGcjs.WET_TILE; exports.WGSL_HALO = _chunkKWNMBMKGcjs.WGSL_HALO; exports.WGSL_SHADE = _chunkKWNMBMKGcjs.WGSL_SHADE; exports.WGSL_STEP = _chunkKWNMBMKGcjs.WGSL_STEP; exports.WetGpuEngine = _chunkKWNMBMKGcjs.WetGpuEngine; exports.WetMedium = _chunkKWNMBMKGcjs.WetMedium; exports.WetWorkerPool = _chunkKWNMBMKGcjs.WetWorkerPool; exports.WetWorld = _chunkKWNMBMKGcjs.WetWorld; exports.WetWorldError = _chunkKWNMBMKGcjs.WetWorldError; exports.addPaintGradientStop = _chunkPQ3H2AANcjs.addPaintGradientStop; exports.applyRetouchToTile = _chunkYF3YZZ6Gcjs.applyRetouchToTile; exports.applyStrokeToDeepTile = _chunkPQ3H2AANcjs.applyStrokeToDeepTile; exports.applyStrokeToTile = _chunkPQ3H2AANcjs.applyStrokeToTile; exports.applyToneToDeepTile = _chunkYF3YZZ6Gcjs.applyToneToDeepTile; exports.bestOffset = _chunkMQDIP4CFcjs.bestOffset; exports.blendRadius = _chunkPQ3H2AANcjs.blendRadius; exports.blenderDab = _chunkPQ3H2AANcjs.blenderDab; exports.boxBlurPixels = _chunkYF3YZZ6Gcjs.boxBlurPixels; exports.brushstrokeDataUrl = _chunkPQ3H2AANcjs.brushstrokeDataUrl; exports.brushstrokeKey = _chunkPQ3H2AANcjs.brushstrokeKey; exports.brushstrokeSamples = _chunkPQ3H2AANcjs.brushstrokeSamples; exports.brushstrokeScaleBucket = _chunkYQGCPL5Xcjs.brushstrokeScaleBucket; exports.brushstrokeStrokeOptions = _chunkPQ3H2AANcjs.brushstrokeStrokeOptions; exports.brushstrokeToCanvas = _chunkPQ3H2AANcjs.brushstrokeToCanvas; exports.canShareMemory = _chunkKWNMBMKGcjs.canShareMemory; exports.cleanMixer = _chunkPQ3H2AANcjs.cleanMixer; exports.cloneSamplePoint = _chunkYF3YZZ6Gcjs.cloneSamplePoint; exports.contentAwareFill = _chunkMQDIP4CFcjs.contentAwareFill; exports.coverageTileCoord = _chunkPQ3H2AANcjs.coverageTileCoord; exports.createBlenderScratch = _chunkPQ3H2AANcjs.createBlenderScratch; exports.createPigment = _chunkOLNIPTB3cjs.createPigment; exports.createPigmentTools = _chunkKWNMBMKGcjs.createPigmentTools; exports.createWetGpuEngine = _chunkKWNMBMKGcjs.createWetGpuEngine; exports.dabCoverage = _chunkPQ3H2AANcjs.dabCoverage; exports.dabRect = _chunkPQ3H2AANcjs.dabRect; exports.dexp = _chunkKWNMBMKGcjs.dexp; exports.dilateMask = _chunkMQDIP4CFcjs.dilateMask; exports.dlog = _chunkKWNMBMKGcjs.dlog; exports.dodgeBurn = _chunkYF3YZZ6Gcjs.dodgeBurn; exports.dodgeBurnCurve = _chunkYF3YZZ6Gcjs.dodgeBurnCurve; exports.dpow = _chunkKWNMBMKGcjs.dpow; exports.dsincos = _chunkKWNMBMKGcjs.dsincos; exports.edgeBits = _chunkKWNMBMKGcjs.edgeBits; exports.exchangeRates = _chunkPQ3H2AANcjs.exchangeRates; exports.expNeg = _chunkKWNMBMKGcjs.expNeg; exports.filmPixel = _chunkKWNMBMKGcjs.filmPixel; exports.filmReflectance = _chunkKWNMBMKGcjs.filmReflectance; exports.findWebGpu = _chunkKWNMBMKGcjs.findWebGpu; exports.flowField = _chunkKWNMBMKGcjs.flowField; exports.gradientDabColor = _chunkPQ3H2AANcjs.gradientDabColor; exports.grainCatch = _chunkPQ3H2AANcjs.grainCatch; exports.grainHeights = _chunkPQ3H2AANcjs.grainHeights; exports.hash2 = _chunkPQ3H2AANcjs.hash2; exports.healPixels = _chunkYF3YZZ6Gcjs.healPixels; exports.hexToPaintRgb = _chunkPQ3H2AANcjs.hexToPaintRgb; exports.isBrushstrokeBrush = _chunkPQ3H2AANcjs.isBrushstrokeBrush; exports.isGradientPaint = _chunkPQ3H2AANcjs.isGradientPaint; exports.isIdentityCloneTransform = _chunkYF3YZZ6Gcjs.isIdentityCloneTransform; exports.latticeViscosity = _chunkKWNMBMKGcjs.latticeViscosity; exports.lerpPigment = _chunkOLNIPTB3cjs.lerpPigment; exports.lerpPigmentInto = _chunkOLNIPTB3cjs.lerpPigmentInto; exports.linearToSrgb8 = _chunkKWNMBMKGcjs.linearToSrgb8; exports.loadMixer = _chunkPQ3H2AANcjs.loadMixer; exports.loadWetKernel = _chunkKWNMBMKGcjs.loadWetKernel; exports.luma = _chunkYF3YZZ6Gcjs.luma; exports.maskBounds = _chunkMQDIP4CFcjs.maskBounds; exports.membraneFill = _chunkMQDIP4CFcjs.membraneFill; exports.mix32 = _chunkPQ3H2AANcjs.mix32; exports.mixPigments = _chunkOLNIPTB3cjs.mixPigments; exports.mixerRates = _chunkPQ3H2AANcjs.mixerRates; exports.normalizeBlender = _chunkPQ3H2AANcjs.normalizeBlender; exports.normalizeBrush = _chunkPQ3H2AANcjs.normalizeBrush; exports.normalizeFlow = _chunkKWNMBMKGcjs.normalizeFlow; exports.normalizeHexColor = _chunkPQ3H2AANcjs.normalizeHexColor; exports.normalizeMixer = _chunkPQ3H2AANcjs.normalizeMixer; exports.normalizeRetouch = _chunkYF3YZZ6Gcjs.normalizeRetouch; exports.normalizeSmudge = _chunkPQ3H2AANcjs.normalizeSmudge; exports.normalizeTilt = _chunkKWNMBMKGcjs.normalizeTilt; exports.normalizeWetParams = _chunkKWNMBMKGcjs.normalizeWetParams; exports.packWetParams = _chunkKWNMBMKGcjs.packWetParams; exports.paintGradientMappingFor = _chunkPQ3H2AANcjs.paintGradientMappingFor; exports.paintPathStroke = _chunkPQ3H2AANcjs.paintPathStroke; exports.paintSourceColor = _chunkPQ3H2AANcjs.paintSourceColor; exports.paintSourceCss = _chunkPQ3H2AANcjs.paintSourceCss; exports.parsePaintSource = _chunkPQ3H2AANcjs.parsePaintSource; exports.pathStrokeCoverage = _chunkPQ3H2AANcjs.pathStrokeCoverage; exports.pathStrokeDabs = _chunkPQ3H2AANcjs.pathStrokeDabs; exports.perDabStrength = _chunkYF3YZZ6Gcjs.perDabStrength; exports.pigmentColor = _chunkKWNMBMKGcjs.pigmentColor; exports.pigmentOf = _chunkKWNMBMKGcjs.pigmentOf; exports.pixelPigment = _chunkKWNMBMKGcjs.pixelPigment; exports.pointerPressure = _chunkKWNMBMKGcjs.pointerPressure; exports.pointerStrokeSample = _chunkKWNMBMKGcjs.pointerStrokeSample; exports.pointerStrokeSamples = _chunkKWNMBMKGcjs.pointerStrokeSamples; exports.put255 = _chunkPQ3H2AANcjs.put255; exports.rand01 = _chunkPQ3H2AANcjs.rand01; exports.randSigned = _chunkPQ3H2AANcjs.randSigned; exports.rasterizeDab = _chunkPQ3H2AANcjs.rasterizeDab; exports.readPaintSource = _chunkPQ3H2AANcjs.readPaintSource; exports.readSourceRegion = _chunkYF3YZZ6Gcjs.readSourceRegion; exports.reflectanceToRgb = _chunkOLNIPTB3cjs.reflectanceToRgb; exports.removePaintGradientStop = _chunkPQ3H2AANcjs.removePaintGradientStop; exports.renderBrushstroke = _chunkPQ3H2AANcjs.renderBrushstroke; exports.resolvePaintGradient = _chunkPQ3H2AANcjs.resolvePaintGradient; exports.retouchFilter = _chunkYF3YZZ6Gcjs.retouchFilter; exports.reversePaintGradient = _chunkPQ3H2AANcjs.reversePaintGradient; exports.rgbToReflectance = _chunkOLNIPTB3cjs.rgbToReflectance; exports.rgbaViewOfGrey = _chunkYF3YZZ6Gcjs.rgbaViewOfGrey; exports.saturationOf = _chunkYF3YZZ6Gcjs.saturationOf; exports.scalePaintGradient = _chunkPQ3H2AANcjs.scalePaintGradient; exports.seamlessClone = _chunkMQDIP4CFcjs.seamlessClone; exports.seedFromString = _chunkPQ3H2AANcjs.seedFromString; exports.setPigmentColor = _chunkOLNIPTB3cjs.setPigmentColor; exports.shadeTile = _chunkKWNMBMKGcjs.shadeTile; exports.smoothPoints = _chunkPQ3H2AANcjs.smoothPoints; exports.smudgeEffect = _chunkYF3YZZ6Gcjs.smudgeEffect; exports.solidPaint = _chunkPQ3H2AANcjs.solidPaint; exports.solveMembrane = _chunkMQDIP4CFcjs.solveMembrane; exports.sponge = _chunkYF3YZZ6Gcjs.sponge; exports.spongeEffect = _chunkYF3YZZ6Gcjs.spongeEffect; exports.spotHealPixels = _chunkYF3YZZ6Gcjs.spotHealPixels; exports.spotHealWindow = _chunkYF3YZZ6Gcjs.spotHealWindow; exports.srgbByteToLinear = _chunkKWNMBMKGcjs.srgbByteToLinear; exports.stepSlotTs = _chunkKWNMBMKGcjs.stepSlotTs; exports.strokeGrainCatch = _chunkPQ3H2AANcjs.strokeGrainCatch; exports.tipFalloff = _chunkPQ3H2AANcjs.tipFalloff; exports.tipReach = _chunkPQ3H2AANcjs.tipReach; exports.tipShape = _chunkPQ3H2AANcjs.tipShape; exports.toneOf = _chunkYF3YZZ6Gcjs.toneOf; exports.updatePaintGradientStop = _chunkPQ3H2AANcjs.updatePaintGradientStop; exports.walkDabs = _chunkPQ3H2AANcjs.walkDabs; exports.wetGpuSupport = _chunkKWNMBMKGcjs.wetGpuSupport; exports.wetSimdSupported = _chunkKWNMBMKGcjs.wetSimdSupported; exports.wetSupport = _chunkKWNMBMKGcjs.wetSupport;