@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.
- package/dist/{chunk-QE7D7TZR.cjs → chunk-H65IBXFI.cjs} +74 -25
- package/dist/{chunk-X4LUGTQX.cjs → chunk-L52VMQZS.cjs} +21 -10
- package/dist/{chunk-DWYQPL2A.js → chunk-LQ5SALHK.js} +13 -2
- package/dist/chunk-MQDIP4CF.cjs +462 -0
- package/dist/{chunk-KFIOEOCQ.js → chunk-W3TOZTL7.js} +55 -6
- package/dist/chunk-XI2NV5U7.js +462 -0
- package/dist/{chunk-3EHPLDFQ.cjs → chunk-YF3YZZ6G.cjs} +16 -453
- package/dist/{chunk-USQCKRZG.js → chunk-ZGJGSCUW.js} +8 -445
- package/dist/image-editor/content-aware-fill-session.d.cts +109 -0
- package/dist/image-editor/content-aware-fill-session.d.ts +109 -0
- package/dist/image-editor/controller.d.cts +111 -1
- package/dist/image-editor/controller.d.ts +111 -1
- package/dist/image-editor/index.cjs +1879 -1052
- package/dist/image-editor/index.d.cts +2 -0
- package/dist/image-editor/index.d.ts +2 -0
- package/dist/image-editor/index.js +869 -42
- package/dist/image-editor/layers/serialize.d.cts +5 -8
- package/dist/image-editor/layers/serialize.d.ts +5 -8
- package/dist/image-editor/paths.d.cts +41 -0
- package/dist/image-editor/paths.d.ts +41 -0
- package/dist/image-editor/psd/export.d.cts +8 -1
- package/dist/image-editor/psd/export.d.ts +8 -1
- package/dist/image-editor/psd/import.d.cts +7 -0
- package/dist/image-editor/psd/import.d.ts +7 -0
- package/dist/image-editor/psd/paths.d.cts +11 -0
- package/dist/image-editor/psd/paths.d.ts +11 -0
- package/dist/image-editor/selection/gesture.d.cts +10 -2
- package/dist/image-editor/selection/gesture.d.ts +10 -2
- package/dist/image-editor/selection/select-and-mask.d.cts +5 -0
- package/dist/image-editor/selection/select-and-mask.d.ts +5 -0
- package/dist/image-editor/selection/worker.d.cts +10 -0
- package/dist/image-editor/selection/worker.d.ts +10 -0
- package/dist/image-editor/selection-worker.cjs +4 -3
- package/dist/image-editor/selection-worker.js +2 -1
- package/dist/image-editor/types.d.cts +12 -0
- package/dist/image-editor/types.d.ts +12 -0
- package/dist/paint/heal.d.cts +3 -1
- package/dist/paint/heal.d.ts +3 -1
- package/dist/paint/index.cjs +4 -2
- package/dist/paint/index.js +10 -8
- package/dist/paint-editor/index.cjs +6 -6
- package/dist/paint-editor/index.js +1 -1
- package/package.json +1 -1
- package/skills/pixerate-image-editor/SKILL.md +20 -22
- package/skills/pixerate-image-editor/references/layer-effects.md +24 -0
- 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;
|
|
31
|
-
*
|
|
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;
|
|
31
|
-
*
|
|
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
|
|
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
|
-
|
|
11
|
+
_chunkL52VMQZScjs.startSelectionWorker.call(void 0, self);
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
|
|
14
|
-
exports.startSelectionWorker =
|
|
15
|
+
exports.startSelectionWorker = _chunkL52VMQZScjs.startSelectionWorker;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
startSelectionWorker
|
|
3
|
-
} from "../chunk-
|
|
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
|
package/dist/paint/heal.d.cts
CHANGED
|
@@ -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;
|
package/dist/paint/heal.d.ts
CHANGED
|
@@ -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;
|
package/dist/paint/index.cjs
CHANGED
|
@@ -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
|
-
|
|
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;
|