@bensitu/image-editor 2.0.0 → 2.2.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/README.md +346 -90
- package/dist/cjs/index.cjs +4883 -1191
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/animation/animation-queue.js +16 -9
- package/dist/esm/animation/animation-queue.js.map +1 -1
- package/dist/esm/annotation/annotation-lock.js +7 -0
- package/dist/esm/annotation/annotation-lock.js.map +1 -0
- package/dist/esm/annotation/annotation-manager.js +217 -0
- package/dist/esm/annotation/annotation-manager.js.map +1 -0
- package/dist/esm/annotation/annotation-style.js +50 -0
- package/dist/esm/annotation/annotation-style.js.map +1 -0
- package/dist/esm/annotation/draw-controller.js +114 -0
- package/dist/esm/annotation/draw-controller.js.map +1 -0
- package/dist/esm/annotation/text-controller.js +234 -0
- package/dist/esm/annotation/text-controller.js.map +1 -0
- package/dist/esm/core/default-options.js +447 -11
- package/dist/esm/core/default-options.js.map +1 -1
- package/dist/esm/core/editor-object-kind.js +37 -0
- package/dist/esm/core/editor-object-kind.js.map +1 -0
- package/dist/esm/core/errors.js +19 -0
- package/dist/esm/core/errors.js.map +1 -1
- package/dist/esm/core/layer-order.js +100 -0
- package/dist/esm/core/layer-order.js.map +1 -0
- package/dist/esm/core/operation-guard.js +28 -0
- package/dist/esm/core/operation-guard.js.map +1 -1
- package/dist/esm/core/public-types.js +34 -1
- package/dist/esm/core/public-types.js.map +1 -1
- package/dist/esm/core/state-serializer.js +108 -27
- package/dist/esm/core/state-serializer.js.map +1 -1
- package/dist/esm/crop/crop-controller.js +6 -2
- package/dist/esm/crop/crop-controller.js.map +1 -1
- package/dist/esm/export/export-format.js.map +1 -1
- package/dist/esm/export/export-service.js +140 -141
- package/dist/esm/export/export-service.js.map +1 -1
- package/dist/esm/export/overlay-merge-service.js +75 -0
- package/dist/esm/export/overlay-merge-service.js.map +1 -0
- package/dist/esm/fabric/fabric-animation.js +56 -4
- package/dist/esm/fabric/fabric-animation.js.map +1 -1
- package/dist/esm/history/history-manager.js +2 -2
- package/dist/esm/history/history-manager.js.map +1 -1
- package/dist/esm/image/image-loader.js +27 -65
- package/dist/esm/image/image-loader.js.map +1 -1
- package/dist/esm/image/image-resampler.js +7 -2
- package/dist/esm/image/image-resampler.js.map +1 -1
- package/dist/esm/image/layout-manager.js +2 -20
- package/dist/esm/image/layout-manager.js.map +1 -1
- package/dist/esm/image/transform-controller.js.map +1 -1
- package/dist/esm/image-editor.js +1474 -135
- package/dist/esm/image-editor.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mask/mask-factory.js +92 -43
- package/dist/esm/mask/mask-factory.js.map +1 -1
- package/dist/esm/mask/mask-label-manager.js +2 -0
- package/dist/esm/mask/mask-label-manager.js.map +1 -1
- package/dist/esm/mask/mask-list.js +9 -3
- package/dist/esm/mask/mask-list.js.map +1 -1
- package/dist/esm/mask/mask-style.js.map +1 -1
- package/dist/esm/mosaic/mosaic-controller.js +666 -0
- package/dist/esm/mosaic/mosaic-controller.js.map +1 -0
- package/dist/esm/mosaic/mosaic-geometry.js +81 -0
- package/dist/esm/mosaic/mosaic-geometry.js.map +1 -0
- package/dist/esm/mosaic/mosaic-pixelate.js +71 -0
- package/dist/esm/mosaic/mosaic-pixelate.js.map +1 -0
- package/dist/esm/ui/dom-bindings.js +10 -3
- package/dist/esm/ui/dom-bindings.js.map +1 -1
- package/dist/esm/utils/image-element-loader.js +55 -0
- package/dist/esm/utils/image-element-loader.js.map +1 -0
- package/dist/esm/utils/number.js.map +1 -1
- package/dist/esm/utils/pointer.js +28 -0
- package/dist/esm/utils/pointer.js.map +1 -0
- package/dist/types/animation/animation-queue.d.ts.map +1 -1
- package/dist/types/annotation/annotation-lock.d.ts +12 -0
- package/dist/types/annotation/annotation-lock.d.ts.map +1 -0
- package/dist/types/annotation/annotation-manager.d.ts +33 -0
- package/dist/types/annotation/annotation-manager.d.ts.map +1 -0
- package/dist/types/annotation/annotation-style.d.ts +13 -0
- package/dist/types/annotation/annotation-style.d.ts.map +1 -0
- package/dist/types/annotation/draw-controller.d.ts +43 -0
- package/dist/types/annotation/draw-controller.d.ts.map +1 -0
- package/dist/types/annotation/text-controller.d.ts +47 -0
- package/dist/types/annotation/text-controller.d.ts.map +1 -0
- package/dist/types/core/default-options.d.ts +46 -6
- package/dist/types/core/default-options.d.ts.map +1 -1
- package/dist/types/core/editor-object-kind.d.ts +29 -0
- package/dist/types/core/editor-object-kind.d.ts.map +1 -0
- package/dist/types/core/errors.d.ts +12 -2
- package/dist/types/core/errors.d.ts.map +1 -1
- package/dist/types/core/layer-order.d.ts +21 -0
- package/dist/types/core/layer-order.d.ts.map +1 -0
- package/dist/types/core/operation-guard.d.ts +2 -0
- package/dist/types/core/operation-guard.d.ts.map +1 -1
- package/dist/types/core/public-types.d.ts +341 -33
- package/dist/types/core/public-types.d.ts.map +1 -1
- package/dist/types/core/state-serializer.d.ts +32 -5
- package/dist/types/core/state-serializer.d.ts.map +1 -1
- package/dist/types/crop/crop-controller.d.ts +6 -7
- package/dist/types/crop/crop-controller.d.ts.map +1 -1
- package/dist/types/export/export-format.d.ts +5 -33
- package/dist/types/export/export-format.d.ts.map +1 -1
- package/dist/types/export/export-service.d.ts +24 -15
- package/dist/types/export/export-service.d.ts.map +1 -1
- package/dist/types/export/overlay-merge-service.d.ts +38 -0
- package/dist/types/export/overlay-merge-service.d.ts.map +1 -0
- package/dist/types/fabric/fabric-animation.d.ts.map +1 -1
- package/dist/types/history/history-manager.d.ts +11 -14
- package/dist/types/history/history-manager.d.ts.map +1 -1
- package/dist/types/image/image-loader.d.ts +24 -21
- package/dist/types/image/image-loader.d.ts.map +1 -1
- package/dist/types/image/image-resampler.d.ts +2 -2
- package/dist/types/image/image-resampler.d.ts.map +1 -1
- package/dist/types/image/layout-manager.d.ts +5 -49
- package/dist/types/image/layout-manager.d.ts.map +1 -1
- package/dist/types/image/transform-controller.d.ts +6 -9
- package/dist/types/image/transform-controller.d.ts.map +1 -1
- package/dist/types/image-editor.d.ts +93 -14
- package/dist/types/image-editor.d.ts.map +1 -1
- package/dist/types/index.d.cts +3 -3
- package/dist/types/index.d.cts.map +1 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/mask/mask-factory.d.ts +24 -21
- package/dist/types/mask/mask-factory.d.ts.map +1 -1
- package/dist/types/mask/mask-label-manager.d.ts +10 -9
- package/dist/types/mask/mask-label-manager.d.ts.map +1 -1
- package/dist/types/mask/mask-list.d.ts +11 -12
- package/dist/types/mask/mask-list.d.ts.map +1 -1
- package/dist/types/mask/mask-style.d.ts +19 -20
- package/dist/types/mask/mask-style.d.ts.map +1 -1
- package/dist/types/mosaic/mosaic-controller.d.ts +82 -0
- package/dist/types/mosaic/mosaic-controller.d.ts.map +1 -0
- package/dist/types/mosaic/mosaic-geometry.d.ts +29 -0
- package/dist/types/mosaic/mosaic-geometry.d.ts.map +1 -0
- package/dist/types/mosaic/mosaic-pixelate.d.ts +23 -0
- package/dist/types/mosaic/mosaic-pixelate.d.ts.map +1 -0
- package/dist/types/ui/dom-bindings.d.ts +3 -1
- package/dist/types/ui/dom-bindings.d.ts.map +1 -1
- package/dist/types/ui/visibility-state.d.ts +2 -2
- package/dist/types/utils/image-element-loader.d.ts +19 -0
- package/dist/types/utils/image-element-loader.d.ts.map +1 -0
- package/dist/types/utils/number.d.ts +1 -2
- package/dist/types/utils/number.d.ts.map +1 -1
- package/dist/types/utils/pointer.d.ts +16 -0
- package/dist/types/utils/pointer.d.ts.map +1 -0
- package/dist/umd/image-editor.umd.js +1 -1
- package/dist/umd/image-editor.umd.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
* `image-loader` pipeline. The layout manager owns three concerns
|
|
4
4
|
* used by the image-load pipeline:
|
|
5
5
|
*
|
|
6
|
-
* 1. Selecting
|
|
7
|
-
* precedence `fit > cover > expand`.
|
|
6
|
+
* 1. Selecting the layout strategy from the current canonical layout mode.
|
|
8
7
|
* 2. Computing canvas dimensions and image scale for the selected
|
|
9
8
|
* strategy.
|
|
10
9
|
* 3. Measuring the visible container viewport with a hidden-tab cache
|
|
@@ -26,59 +25,16 @@
|
|
|
26
25
|
* @module
|
|
27
26
|
*/
|
|
28
27
|
import type * as FabricNS from 'fabric';
|
|
29
|
-
import type {
|
|
28
|
+
import type { LayoutMode } from '../core/public-types.js';
|
|
30
29
|
/**
|
|
31
30
|
* Discriminator for the active layout strategy. Exactly one value is
|
|
32
31
|
* returned by {@link selectLayoutStrategy} per `loadImage` call.
|
|
33
32
|
*/
|
|
34
|
-
export type LayoutStrategy =
|
|
33
|
+
export type LayoutStrategy = LayoutMode;
|
|
35
34
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* The accepted boolean flags in precedence order are
|
|
39
|
-
* `fitImageToCanvas`, `coverImageToCanvas`, and `expandCanvasToImage`.
|
|
35
|
+
* Choose the active layout strategy from the current layout mode.
|
|
40
36
|
*/
|
|
41
|
-
export
|
|
42
|
-
/**
|
|
43
|
-
* Choose the active layout strategy using the documented precedence
|
|
44
|
-
* `fit > cover > expand`.
|
|
45
|
-
*
|
|
46
|
-
* The selection is a pure function of the boolean flags — it is
|
|
47
|
-
* independent of the order in which the option keys were declared,
|
|
48
|
-
* of any prior load, and of any prior canvas state.
|
|
49
|
-
*
|
|
50
|
-
* When all three flags are `false` the function falls back to
|
|
51
|
-
* `'expand'`. This matches the default-options resolution which sets
|
|
52
|
-
* `expandCanvasToImage: true` by default, and gives a deterministic
|
|
53
|
-
* answer even if a consumer disables every layout flag.
|
|
54
|
-
*
|
|
55
|
-
*/
|
|
56
|
-
export declare function selectLayoutStrategy(options: LayoutFlags): LayoutStrategy;
|
|
57
|
-
/**
|
|
58
|
-
* Inspect the layout flags and report whether `fitImageToCanvas` and
|
|
59
|
-
* `coverImageToCanvas` are both enabled — the only pairing that is a
|
|
60
|
-
* real conflict because both rescale the image to the canvas viewport
|
|
61
|
-
* but with different aspect-ratio strategies. `expandCanvasToImage`
|
|
62
|
-
* defaults to `true`, so combining it with one of the other two is
|
|
63
|
-
* normal usage (the user providedOptions into a per-load override) and is not
|
|
64
|
-
* flagged.
|
|
65
|
-
*
|
|
66
|
-
* The selected strategy still follows the precedence in
|
|
67
|
-
* {@link selectLayoutStrategy}; this helper exists so the facade can
|
|
68
|
-
* emit a single warning through the documented reporting path when a
|
|
69
|
-
* real conflict is detected.
|
|
70
|
-
*
|
|
71
|
-
* `null` is returned when no conflict is present.
|
|
72
|
-
*/
|
|
73
|
-
export interface LayoutConflict {
|
|
74
|
-
/** Strategies the caller had enabled simultaneously. */
|
|
75
|
-
readonly enabled: readonly LayoutStrategy[];
|
|
76
|
-
/** The strategy actually selected by `selectLayoutStrategy`. */
|
|
77
|
-
readonly selected: LayoutStrategy;
|
|
78
|
-
/** Human-readable summary suitable for `onWarning` consumers. */
|
|
79
|
-
readonly message: string;
|
|
80
|
-
}
|
|
81
|
-
export declare function detectLayoutConflict(options: LayoutFlags): LayoutConflict | null;
|
|
37
|
+
export declare function selectLayoutStrategy(mode: LayoutMode): LayoutStrategy;
|
|
82
38
|
/**
|
|
83
39
|
* Two-axis viewport size in CSS pixels.
|
|
84
40
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-manager.d.ts","sourceRoot":"","sources":["../../../src/image/layout-manager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"layout-manager.d.ts","sourceRoot":"","sources":["../../../src/image/layout-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,14 +59,12 @@
|
|
|
59
59
|
*
|
|
60
60
|
* ## Why a class with a context bundle?
|
|
61
61
|
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* controller therefore reads and writes through the
|
|
62
|
+
* This module keeps transform state on the facade so `currentScale`,
|
|
63
|
+
* `currentRotation`, `baseImageScale`, and `shouldSuppressSaveState`
|
|
64
|
+
* remain on a single owner (these are part of the snapshot wire format).
|
|
65
|
+
* The controller therefore reads and writes through the
|
|
67
66
|
* {@link TransformContext} accessor pairs rather than duplicating the
|
|
68
|
-
* fields.
|
|
69
|
-
* `LoadImageContext`.
|
|
67
|
+
* fields. It mirrors the same pattern used by `LoadImageContext`.
|
|
70
68
|
*
|
|
71
69
|
* Owner module references (per the documented "Mapping Contracts to
|
|
72
70
|
* modules" table): this module is imported by `image-editor.ts`. It is
|
|
@@ -148,8 +146,7 @@ export interface TransformContext {
|
|
|
148
146
|
* AFTER the controller commits the final value with `set` /
|
|
149
147
|
* `setCoords` and BEFORE `saveCanvasState`. Used to:
|
|
150
148
|
*
|
|
151
|
-
* - resize the canvas to
|
|
152
|
-
* `options.expandCanvasToImage` is `true`,
|
|
149
|
+
* - resize the canvas according to the current layout mode,
|
|
153
150
|
* - re-align the image bounding box to the canvas top-left,
|
|
154
151
|
* - re-sync mask label positions for visible labels.
|
|
155
152
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform-controller.d.ts","sourceRoot":"","sources":["../../../src/image/transform-controller.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"transform-controller.d.ts","sourceRoot":"","sources":["../../../src/image/transform-controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEG;AAEH,OAAO,KAAK,KAAK,QAAQ,MAAM,QAAQ,CAAC;AAExC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAKjE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,gBAAgB;IAC7B,0DAA0D;IAC1D,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACxB,mEAAmE;IACnE,OAAO,EAAE,eAAe,CAAC;IACzB;;;;OAIG;IACH,KAAK,EAAE,cAAc,CAAC;IAEtB,sDAAsD;IACtD,gBAAgB,IAAI,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;IAEhD,4BAA4B;IAC5B,eAAe,IAAI,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC,0CAA0C;IAC1C,kBAAkB,IAAI,MAAM,CAAC;IAC7B,2CAA2C;IAC3C,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpC,kDAAkD;IAClD,iBAAiB,IAAI,MAAM,CAAC;IAE5B;;;;;;;OAOG;IACH,eAAe,IAAI,IAAI,CAAC;IAExB;;;;;;;OAOG;IACH,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAE9C;;;;;;;;;;;;;;OAcG;IACH,kBAAkB,CAAC,IAAI,IAAI,CAAC;CAC/B;AAID;;;;;;;;;;;;;GAaG;AACH,qBAAa,mBAAmB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAE3C;;OAEG;gBACS,OAAO,EAAE,gBAAgB;IAIrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6D/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0EjD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB7C"}
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
* @author Ben Situ
|
|
3
3
|
* @license MIT
|
|
4
4
|
* Lightweight canvas-based image editor built on Fabric.js v7.
|
|
5
|
-
* Provides
|
|
5
|
+
* Provides masks, annotations, animated transforms, crop, mosaic, undo/redo,
|
|
6
|
+
* serialization, and export.
|
|
6
7
|
*
|
|
7
8
|
* @module
|
|
8
9
|
*/
|
|
9
10
|
import { type CanvasJson } from './core/state-serializer.js';
|
|
10
|
-
import type { Base64ExportOptions, ElementIdMap, FabricModule, ImageEditorOptions, ImageFileExportOptions, LayoutMode, LoadImageOptions, MaskConfig, MaskObject, RemoveAllMasksOptions } from './core/public-types.js';
|
|
11
|
+
import type { AnnotationObject, AnnotationUpdateConfig, Base64ExportOptions, DownloadImageOptions, DrawConfig, ElementIdMap, FabricModule, ImageEditorOptions, ImageFileExportOptions, LayoutMode, LoadImageOptions, MaskConfig, MaskObject, MosaicConfig, RemoveAllAnnotationsOptions, RemoveAllMasksOptions, ResolvedDrawConfig, ResolvedMosaicConfig, ResolvedTextAnnotationConfig, TextAnnotationConfig, TextAnnotationObject } from './core/public-types.js';
|
|
11
12
|
/**
|
|
12
13
|
* Lightweight Fabric.js v7 image editor with masking, animated transforms,
|
|
13
14
|
* crop, undo/redo, and multi-format export.
|
|
@@ -32,6 +33,13 @@ export declare class ImageEditor {
|
|
|
32
33
|
private fabricModule;
|
|
33
34
|
private isFabricLoaded;
|
|
34
35
|
private readonly options;
|
|
36
|
+
private currentLayoutMode;
|
|
37
|
+
private readonly defaultMosaicConfig;
|
|
38
|
+
private currentMosaicConfig;
|
|
39
|
+
private readonly defaultTextConfig;
|
|
40
|
+
private currentTextConfig;
|
|
41
|
+
private readonly defaultDrawConfig;
|
|
42
|
+
private currentDrawConfig;
|
|
35
43
|
private canvas;
|
|
36
44
|
private canvasElement;
|
|
37
45
|
private containerElement;
|
|
@@ -48,6 +56,7 @@ export declare class ImageEditor {
|
|
|
48
56
|
private currentImageMimeType;
|
|
49
57
|
private maskCounter;
|
|
50
58
|
private lastMask;
|
|
59
|
+
private annotationCounter;
|
|
51
60
|
private lastSnapshot;
|
|
52
61
|
private readonly historyManager;
|
|
53
62
|
/**
|
|
@@ -87,6 +96,9 @@ export declare class ImageEditor {
|
|
|
87
96
|
* own and multiple editors on the same page do not share crop state.
|
|
88
97
|
*/
|
|
89
98
|
private cropSession;
|
|
99
|
+
private mosaicSession;
|
|
100
|
+
private textSession;
|
|
101
|
+
private drawSession;
|
|
90
102
|
/**
|
|
91
103
|
* Managed registry of DOM event listeners owned by this editor.
|
|
92
104
|
*
|
|
@@ -97,6 +109,8 @@ export declare class ImageEditor {
|
|
|
97
109
|
* `isDisposed === true`.
|
|
98
110
|
*/
|
|
99
111
|
private domBindings;
|
|
112
|
+
private keyboardDocument;
|
|
113
|
+
private keyboardHandler;
|
|
100
114
|
private isDisposed;
|
|
101
115
|
/**
|
|
102
116
|
* When `true`, {@link saveState} is a no-op. Used by
|
|
@@ -156,8 +170,14 @@ export declare class ImageEditor {
|
|
|
156
170
|
*/
|
|
157
171
|
init(idMap?: ElementIdMap): void;
|
|
158
172
|
private initCanvas;
|
|
173
|
+
private getLiveCanvasOrThrow;
|
|
159
174
|
private bindDomEvents;
|
|
160
175
|
private bindElementIfExists;
|
|
176
|
+
private bindKeyboardEvents;
|
|
177
|
+
private isNativeTextInputActive;
|
|
178
|
+
private isFabricTextEditingActive;
|
|
179
|
+
private handleKeyboardEvent;
|
|
180
|
+
private finalizeActiveTextEditingIfNeeded;
|
|
161
181
|
/**
|
|
162
182
|
* Read a `File` selected via the upload control as a base64 data URL
|
|
163
183
|
* and route it through the transactional `loadImage` pipeline.
|
|
@@ -202,12 +222,14 @@ export declare class ImageEditor {
|
|
|
202
222
|
* disposed states resolve without observable mutation.
|
|
203
223
|
*/
|
|
204
224
|
loadImage(base64: string, options?: LoadImageOptions): Promise<void>;
|
|
225
|
+
private loadImageInternal;
|
|
205
226
|
private getInternalOperationToken;
|
|
206
227
|
private canRunDuringAnimationQueue;
|
|
207
228
|
private withInternalOperationOptions;
|
|
208
229
|
private withAnimationQueueBypass;
|
|
209
230
|
private assertIdleForOperation;
|
|
210
231
|
private canRunIdleOperation;
|
|
232
|
+
private isExpectedIdleGuardError;
|
|
211
233
|
private assertCanQueueAnimation;
|
|
212
234
|
/**
|
|
213
235
|
* Returns `true` if a valid image is currently loaded on the canvas.
|
|
@@ -220,28 +242,27 @@ export declare class ImageEditor {
|
|
|
220
242
|
/**
|
|
221
243
|
* Selects the layout strategy used by subsequent image loads.
|
|
222
244
|
*
|
|
223
|
-
* The mode maps to the existing layout flags as a mutually exclusive
|
|
224
|
-
* choice:
|
|
225
|
-
*
|
|
226
|
-
* - `'fit'` enables `fitImageToCanvas`.
|
|
227
|
-
* - `'cover'` enables `coverImageToCanvas`.
|
|
228
|
-
* - `'expand'` enables `expandCanvasToImage`.
|
|
229
|
-
*
|
|
230
245
|
* The current canvas is not re-laid out immediately; call this before
|
|
231
246
|
* `loadImage()` to choose how the next image is placed.
|
|
232
247
|
*
|
|
233
248
|
* @param mode - Layout mode to use for future image loads.
|
|
234
249
|
*/
|
|
235
250
|
setLayoutMode(mode: LayoutMode): void;
|
|
251
|
+
private getRuntimeOptions;
|
|
236
252
|
private buildCallbackContext;
|
|
237
253
|
private getOperationContext;
|
|
238
254
|
private emitOptionCallback;
|
|
239
255
|
private getImageInfo;
|
|
240
256
|
private getMasks;
|
|
257
|
+
getAnnotations(): AnnotationObject[];
|
|
241
258
|
private getMaskCollectionSignature;
|
|
259
|
+
private getAnnotationCollectionSignature;
|
|
260
|
+
private getActiveToolMode;
|
|
261
|
+
private isToolModeActive;
|
|
242
262
|
private getEditorState;
|
|
243
263
|
private emitImageChanged;
|
|
244
264
|
private emitMasksChanged;
|
|
265
|
+
private emitAnnotationsChanged;
|
|
245
266
|
private emitBusyChangeIfChanged;
|
|
246
267
|
private buildSelection;
|
|
247
268
|
private withSelectionChangeContext;
|
|
@@ -264,6 +285,7 @@ export declare class ImageEditor {
|
|
|
264
285
|
*/
|
|
265
286
|
private alignObjectBoundingBoxToCanvasTopLeft;
|
|
266
287
|
private measureLayoutViewport;
|
|
288
|
+
private getScrollbarStableViewportCanvasSize;
|
|
267
289
|
/**
|
|
268
290
|
* Resize the canvas to fit the transformed image bounds. Used by the
|
|
269
291
|
* transform pipeline's `afterTransformSnap` hook so a post-rotation/scale
|
|
@@ -271,6 +293,7 @@ export declare class ImageEditor {
|
|
|
271
293
|
*/
|
|
272
294
|
private updateCanvasSizeToImageBounds;
|
|
273
295
|
private shouldNormalizeCanvasSizeAfterStateRestore;
|
|
296
|
+
private settleFitCoverScrollbarsAfterStateRestore;
|
|
274
297
|
private captureImageDisplayGeometry;
|
|
275
298
|
private restoreMergedImageDisplayGeometry;
|
|
276
299
|
/**
|
|
@@ -355,7 +378,7 @@ export declare class ImageEditor {
|
|
|
355
378
|
*/
|
|
356
379
|
saveState(): void;
|
|
357
380
|
private saveStateInternal;
|
|
358
|
-
private
|
|
381
|
+
private restoreActiveObjectAfterSnapshot;
|
|
359
382
|
/**
|
|
360
383
|
* Undoes the last recorded action.
|
|
361
384
|
*
|
|
@@ -450,10 +473,52 @@ export declare class ImageEditor {
|
|
|
450
473
|
private hideAllMaskLabels;
|
|
451
474
|
private syncMaskLabel;
|
|
452
475
|
private showLabelForMask;
|
|
476
|
+
private handleObjectMovingScalingRotating;
|
|
477
|
+
private handleObjectModified;
|
|
453
478
|
private handleSelectionChanged;
|
|
454
479
|
private buildMaskListContext;
|
|
455
480
|
private updateMaskList;
|
|
456
481
|
private updateMaskListSelection;
|
|
482
|
+
enterTextMode(): void;
|
|
483
|
+
exitTextMode(): void;
|
|
484
|
+
isTextMode(): boolean;
|
|
485
|
+
createTextAnnotation(config?: TextAnnotationConfig): TextAnnotationObject | null;
|
|
486
|
+
enterDrawMode(): void;
|
|
487
|
+
exitDrawMode(): void;
|
|
488
|
+
isDrawMode(): boolean;
|
|
489
|
+
getTextConfig(): Readonly<ResolvedTextAnnotationConfig>;
|
|
490
|
+
setTextConfig(config: TextAnnotationConfig): void;
|
|
491
|
+
resetTextConfig(): void;
|
|
492
|
+
setTextColor(color: string): void;
|
|
493
|
+
setTextFontSize(size: number): void;
|
|
494
|
+
getDrawConfig(): Readonly<ResolvedDrawConfig>;
|
|
495
|
+
setDrawConfig(config: DrawConfig): void;
|
|
496
|
+
resetDrawConfig(): void;
|
|
497
|
+
setDrawColor(color: string): void;
|
|
498
|
+
setDrawBrushSize(size: number): void;
|
|
499
|
+
removeSelectedAnnotation(): void;
|
|
500
|
+
removeAllAnnotations(options?: RemoveAllAnnotationsOptions): void;
|
|
501
|
+
updateAnnotation(annotationId: number, config: AnnotationUpdateConfig): void;
|
|
502
|
+
updateSelectedAnnotation(config: AnnotationUpdateConfig): void;
|
|
503
|
+
deleteSelectedObject(): void;
|
|
504
|
+
bringSelectedObjectForward(): void;
|
|
505
|
+
sendSelectedObjectBackward(): void;
|
|
506
|
+
bringSelectedObjectToFront(): void;
|
|
507
|
+
sendSelectedObjectToBack(): void;
|
|
508
|
+
private buildAnnotationManagerContext;
|
|
509
|
+
private buildAnnotationListContext;
|
|
510
|
+
private updateAnnotationList;
|
|
511
|
+
private updateAnnotationListSelection;
|
|
512
|
+
private buildTextControllerContext;
|
|
513
|
+
private buildDrawControllerContext;
|
|
514
|
+
private applyTextConfigPatch;
|
|
515
|
+
private applyDrawConfigPatch;
|
|
516
|
+
private applyTextColorInput;
|
|
517
|
+
private applyTextFontSizeInput;
|
|
518
|
+
private applyDrawColorInput;
|
|
519
|
+
private applyDrawBrushSizeInput;
|
|
520
|
+
private getSelectedCanvasObjects;
|
|
521
|
+
private moveSelectedEditableObject;
|
|
457
522
|
/**
|
|
458
523
|
* Bakes all current masks into the image:
|
|
459
524
|
* exports the masked image, removes the masks, and re-imports the result
|
|
@@ -484,10 +549,10 @@ export declare class ImageEditor {
|
|
|
484
549
|
* which builds the data URL through the same pipeline used by
|
|
485
550
|
* {@link exportImageBase64} and triggers the anchor-driven download.
|
|
486
551
|
*
|
|
487
|
-
* @param
|
|
488
|
-
*
|
|
552
|
+
* @param options - Filename string or download options. String input is
|
|
553
|
+
* treated as a filename for backwards compatibility.
|
|
489
554
|
*/
|
|
490
|
-
downloadImage(
|
|
555
|
+
downloadImage(options?: DownloadImageOptions | string): void;
|
|
491
556
|
/**
|
|
492
557
|
* Exports the canvas as a Base64-encoded data URL.
|
|
493
558
|
*
|
|
@@ -527,7 +592,7 @@ export declare class ImageEditor {
|
|
|
527
592
|
*
|
|
528
593
|
* @example
|
|
529
594
|
* ```ts
|
|
530
|
-
* const file = await editor.exportImageFile({ fileType: 'png',
|
|
595
|
+
* const file = await editor.exportImageFile({ fileType: 'png', mergeMasks: false});
|
|
531
596
|
* const formData = new FormData;
|
|
532
597
|
* formData.append('image', file);
|
|
533
598
|
* ```
|
|
@@ -547,6 +612,7 @@ export declare class ImageEditor {
|
|
|
547
612
|
* the merge needs.
|
|
548
613
|
*/
|
|
549
614
|
private buildMergeMasksContext;
|
|
615
|
+
private buildMergeAnnotationsContext;
|
|
550
616
|
/**
|
|
551
617
|
* Capture a snapshot string suitable for `loadFromState` without
|
|
552
618
|
* pushing it onto the history stack. Used by the merge and crop
|
|
@@ -559,6 +625,17 @@ export declare class ImageEditor {
|
|
|
559
625
|
*/
|
|
560
626
|
private captureSnapshotInternal;
|
|
561
627
|
private getActiveMaskForSnapshot;
|
|
628
|
+
private getActiveAnnotationForSnapshot;
|
|
629
|
+
enterMosaicMode(): void;
|
|
630
|
+
exitMosaicMode(): void;
|
|
631
|
+
isMosaicMode(): boolean;
|
|
632
|
+
getMosaicConfig(): Readonly<ResolvedMosaicConfig>;
|
|
633
|
+
setMosaicConfig(config: MosaicConfig): void;
|
|
634
|
+
resetMosaicConfig(): void;
|
|
635
|
+
setMosaicBrushSize(size: number): void;
|
|
636
|
+
setMosaicBlockSize(size: number): void;
|
|
637
|
+
private applyMosaicConfigPatch;
|
|
638
|
+
private buildMosaicControllerContext;
|
|
562
639
|
/**
|
|
563
640
|
* Enters crop mode: adds a resizable selection rect to the canvas.
|
|
564
641
|
* All other controls are disabled until {@link applyCrop} or
|
|
@@ -614,7 +691,9 @@ export declare class ImageEditor {
|
|
|
614
691
|
* accessors all bind back to `this`.
|
|
615
692
|
*/
|
|
616
693
|
private buildCropControllerContext;
|
|
694
|
+
private syncInputValue;
|
|
617
695
|
private updateInputs;
|
|
696
|
+
mergeAnnotations(): Promise<void>;
|
|
618
697
|
private updateUi;
|
|
619
698
|
private setControlEnabled;
|
|
620
699
|
private recordElementOriginalState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-editor.d.ts","sourceRoot":"","sources":["../../src/image-editor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"image-editor.d.ts","sourceRoot":"","sources":["../../src/image-editor.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.cts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The package surface consists of:
|
|
5
5
|
* - `ImageEditor` (default and named export) — the only public class.
|
|
6
|
-
* -
|
|
6
|
+
* - Editor object runtime type guards.
|
|
7
7
|
* - The documented public types listed below.
|
|
8
8
|
*
|
|
9
9
|
* Internal helpers (animation queue, command, history manager, controllers,
|
|
@@ -26,6 +26,6 @@
|
|
|
26
26
|
import { ImageEditor } from './image-editor.js';
|
|
27
27
|
export { ImageEditor };
|
|
28
28
|
export default ImageEditor;
|
|
29
|
-
export { isMaskObject } from './core/public-types.js';
|
|
30
|
-
export type { ImageEditorOptions, ResolvedOptions, LayoutMode, LabelConfig, CropConfig, CropExportFileType, LoadImageOptions, RemoveAllMasksOptions, MaskConfig, MaskObject, MaskNumericProp, ResolvedMaskConfig, ImageMimeType, ImageFileType, NormalizedImageFormat, ExportArea, Base64ExportOptions, ImageFileExportOptions, ImageInfo, ImageEditorState, ImageEditorSelection, ImageEditorCallbackContext, ImageEditorOperation, ElementIdMap, FabricModule, } from './core/public-types.js';
|
|
29
|
+
export { isAnnotationObject, isBaseImageObject, isDrawAnnotationObject, isEditableOverlayObject, isMaskObject, isSessionObject, isTextAnnotationObject, } from './core/public-types.js';
|
|
30
|
+
export type { ImageEditorOptions, ResolvedOptions, LayoutMode, EditorObjectKind, EditorToolMode, AnnotationType, SessionObjectType, EditorObjectMeta, LabelConfig, CropConfig, CropExportFileType, MosaicConfig, ResolvedMosaicConfig, MosaicOutputFileType, TextAnnotationConfig, ResolvedTextAnnotationConfig, DrawConfig, ResolvedDrawConfig, LoadImageOptions, RemoveAllMasksOptions, RemoveAllAnnotationsOptions, DefaultMaskConfig, MaskConfig, MaskObject, MaskNumericProp, ResolvedMaskConfig, BaseImageObject, SessionObject, AnnotationObject, TextAnnotationObject, DrawAnnotationObject, AnnotationUpdateConfig, ImageMimeType, ImageFileType, NormalizedImageFormat, ExportArea, Base64ExportOptions, ImageFileExportOptions, DownloadImageOptions, ImageInfo, ImageEditorState, ImageEditorSelection, ImageEditorCallbackContext, ImageEditorOperation, ElementIdMap, FabricModule, } from './core/public-types.js';
|
|
31
31
|
//# sourceMappingURL=index.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,eAAe,WAAW,CAAC;AAE3B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,eAAe,WAAW,CAAC;AAE3B,OAAO,EACH,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,YAAY,EACZ,eAAe,EACf,sBAAsB,GACzB,MAAM,wBAAwB,CAAC;AAIhC,YAAY,EAER,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAEhB,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAC5B,UAAU,EACV,kBAAkB,EAElB,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,EAE3B,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,eAAe,EACf,kBAAkB,EAElB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EAEtB,aAAa,EACb,aAAa,EACb,qBAAqB,EAErB,UAAU,EACV,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EAEpB,SAAS,EACT,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EAEpB,YAAY,EAEZ,YAAY,GACf,MAAM,wBAAwB,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The package surface consists of:
|
|
5
5
|
* - `ImageEditor` (default and named export) — the only public class.
|
|
6
|
-
* -
|
|
6
|
+
* - Editor object runtime type guards.
|
|
7
7
|
* - The documented public types listed below.
|
|
8
8
|
*
|
|
9
9
|
* Internal helpers (animation queue, command, history manager, controllers,
|
|
@@ -26,6 +26,6 @@
|
|
|
26
26
|
import { ImageEditor } from './image-editor.js';
|
|
27
27
|
export { ImageEditor };
|
|
28
28
|
export default ImageEditor;
|
|
29
|
-
export { isMaskObject } from './core/public-types.js';
|
|
30
|
-
export type { ImageEditorOptions, ResolvedOptions, LayoutMode, LabelConfig, CropConfig, CropExportFileType, LoadImageOptions, RemoveAllMasksOptions, MaskConfig, MaskObject, MaskNumericProp, ResolvedMaskConfig, ImageMimeType, ImageFileType, NormalizedImageFormat, ExportArea, Base64ExportOptions, ImageFileExportOptions, ImageInfo, ImageEditorState, ImageEditorSelection, ImageEditorCallbackContext, ImageEditorOperation, ElementIdMap, FabricModule, } from './core/public-types.js';
|
|
29
|
+
export { isAnnotationObject, isBaseImageObject, isDrawAnnotationObject, isEditableOverlayObject, isMaskObject, isSessionObject, isTextAnnotationObject, } from './core/public-types.js';
|
|
30
|
+
export type { ImageEditorOptions, ResolvedOptions, LayoutMode, EditorObjectKind, EditorToolMode, AnnotationType, SessionObjectType, EditorObjectMeta, LabelConfig, CropConfig, CropExportFileType, MosaicConfig, ResolvedMosaicConfig, MosaicOutputFileType, TextAnnotationConfig, ResolvedTextAnnotationConfig, DrawConfig, ResolvedDrawConfig, LoadImageOptions, RemoveAllMasksOptions, RemoveAllAnnotationsOptions, DefaultMaskConfig, MaskConfig, MaskObject, MaskNumericProp, ResolvedMaskConfig, BaseImageObject, SessionObject, AnnotationObject, TextAnnotationObject, DrawAnnotationObject, AnnotationUpdateConfig, ImageMimeType, ImageFileType, NormalizedImageFormat, ExportArea, Base64ExportOptions, ImageFileExportOptions, DownloadImageOptions, ImageInfo, ImageEditorState, ImageEditorSelection, ImageEditorCallbackContext, ImageEditorOperation, ElementIdMap, FabricModule, } from './core/public-types.js';
|
|
31
31
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,eAAe,WAAW,CAAC;AAE3B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,eAAe,WAAW,CAAC;AAE3B,OAAO,EACH,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,YAAY,EACZ,eAAe,EACf,sBAAsB,GACzB,MAAM,wBAAwB,CAAC;AAIhC,YAAY,EAER,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAEhB,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAC5B,UAAU,EACV,kBAAkB,EAElB,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,EAE3B,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,eAAe,EACf,kBAAkB,EAElB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EAEtB,aAAa,EACb,aAAa,EACb,qBAAqB,EAErB,UAAU,EACV,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EAEpB,SAAS,EACT,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EAEpB,YAAY,EAEZ,YAAY,GACf,MAAM,wBAAwB,CAAC"}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* - For `'rect' | 'circle' | 'ellipse' | 'polygon'`
|
|
17
17
|
* the corresponding Fabric shape is built with explicit
|
|
18
18
|
* `originX: 'left'`, `originY: 'top'`, plus the resolved color, opacity,
|
|
19
|
-
* angle, and the
|
|
19
|
+
* angle, and the merged `styles` block.
|
|
20
20
|
* - When `config.fabricGenerator` is supplied it is
|
|
21
21
|
* called with `(resolvedConfig, canvas, options)` and its return value is
|
|
22
22
|
* used verbatim as the mask object.
|
|
@@ -25,13 +25,14 @@
|
|
|
25
25
|
* `saveState` → `config.onCreate(mask, canvas)`.
|
|
26
26
|
* - `config.onCreate` is invoked exactly once,
|
|
27
27
|
* strictly after `saveState` has run.
|
|
28
|
-
* - Falsy values supplied via `
|
|
29
|
-
* `false`, `null`, `''`, `NaN`) are applied
|
|
30
|
-
* NOT use `??` to default stroke /
|
|
31
|
-
* key is explicitly present on
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
28
|
+
* - Falsy values supplied via `options.defaultMaskConfig.styles` or
|
|
29
|
+
* `config.styles` (`0`, `false`, `null`, `''`, `NaN`) are applied
|
|
30
|
+
* verbatim. The factory does NOT use `??` to default stroke /
|
|
31
|
+
* strokeWidth / strokeDashArray when the key is explicitly present on
|
|
32
|
+
* the merged `styles`.
|
|
33
|
+
* - `hasControls`, `selectable`, `evented`, `transparentCorners`,
|
|
34
|
+
* `strokeUniform` use the `'foo' in mergedConfig ? … : default` pattern
|
|
35
|
+
* so that an explicit `false` is preserved.
|
|
35
36
|
* - When a polygon mask is built, its visible
|
|
36
37
|
* bounding-box top-left SHALL equal the resolved `(left, top)`. Fabric
|
|
37
38
|
* v7's `Polygon` constructor positions the object so the polygon's
|
|
@@ -103,8 +104,8 @@ export interface CreateMaskContext {
|
|
|
103
104
|
/** Save canvas state to history. */
|
|
104
105
|
saveCanvasState(): void;
|
|
105
106
|
/**
|
|
106
|
-
* Optional canvas resize hook used when `options.
|
|
107
|
-
* `
|
|
107
|
+
* Optional canvas resize hook used when `options.layoutMode` is
|
|
108
|
+
* `'expand'` and the placed mask would extend past the current canvas size.
|
|
108
109
|
* If omitted, the factory calls `canvas.setDimensions` directly. The
|
|
109
110
|
* orchestrator typically passes `setCanvasSizePx` here so the scroll
|
|
110
111
|
* container reflows synchronously with the new canvas size.
|
|
@@ -117,19 +118,21 @@ export interface CreateMaskContext {
|
|
|
117
118
|
*
|
|
118
119
|
* Creation steps:
|
|
119
120
|
*
|
|
120
|
-
* 1. Resolve the config: apply defaults,
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
121
|
+
* 1. Resolve the config: apply built-in defaults, legacy mask size options,
|
|
122
|
+
* `options.defaultMaskConfig`, and per-call overrides, then resolve
|
|
123
|
+
* placement (`left`/`top`) and dimensions
|
|
124
|
+
* (`width`/`height`/`rx`/`ry`/`radius`) via {@link resolveNumeric} so
|
|
125
|
+
* percentages and factory functions collapse to pixel numbers before
|
|
126
|
+
* Fabric shape construction.
|
|
124
127
|
* 2. Optionally expand the canvas if the placement would overflow.
|
|
125
|
-
* 3. Build the Fabric shape — switch on `
|
|
126
|
-
* `config.fabricGenerator` if provided.
|
|
128
|
+
* 3. Build the Fabric shape — switch on the merged `shape`, or call the
|
|
129
|
+
* per-call `config.fabricGenerator` if provided.
|
|
127
130
|
* 4. Apply common mask properties. Falsy flags (`hasControls`,
|
|
128
|
-
* `selectable`, `transparentCorners`, `strokeUniform`) use
|
|
129
|
-
* `'foo' in
|
|
130
|
-
* preserved. Stroke / strokeWidth /
|
|
131
|
-
*
|
|
132
|
-
*
|
|
131
|
+
* `selectable`, `evented`, `transparentCorners`, `strokeUniform`) use
|
|
132
|
+
* the `'foo' in mergedConfig ? … : default` pattern so an explicit
|
|
133
|
+
* `false` is preserved. Stroke / strokeWidth / strokeDashArray pulled
|
|
134
|
+
* out of `styles` use the same `in` check so `null` and `0` are
|
|
135
|
+
* preserved verbatim.
|
|
133
136
|
* 5. Increment `maskCounter` and assign `maskId`, `maskName`,
|
|
134
137
|
* `originalAlpha`.
|
|
135
138
|
* 6. Post-create order: add to canvas → `updateMaskList` →
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mask-factory.d.ts","sourceRoot":"","sources":["../../../src/mask/mask-factory.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mask-factory.d.ts","sourceRoot":"","sources":["../../../src/mask/mask-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AAEH,OAAO,KAAK,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAER,YAAY,EACZ,UAAU,EACV,UAAU,EACV,qBAAqB,EAErB,eAAe,EAClB,MAAM,yBAAyB,CAAC;AAcjC;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAC9B,gEAAgE;IAChE,MAAM,EAAE,YAAY,CAAC;IACrB,mDAAmD;IACnD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACxB,+DAA+D;IAC/D,OAAO,EAAE,eAAe,CAAC;IACzB,sEAAsE;IACtE,WAAW,IAAI,UAAU,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;IAC3C,gDAAgD;IAChD,cAAc,IAAI,MAAM,CAAC;IACzB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,+EAA+E;IAC/E,cAAc,IAAI,IAAI,CAAC;IACvB,oCAAoC;IACpC,eAAe,IAAI,IAAI,CAAC;IACxB;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAClE;AAsID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,GAAE,UAAe,GAAG,UAAU,GAAG,IAAI,CAwSjG;AA6BD;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAC9B,2DAA2D;IAC3D,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACxB;;;OAGG;IACH,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3C,yEAAyE;IACzE,cAAc,IAAI,IAAI,CAAC;IACvB,yDAAyD;IACzD,eAAe,IAAI,IAAI,CAAC;IACxB;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;CAC9C;AAsBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAcnE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,cAAc,CAC1B,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,qBAA0B,GACpC,IAAI,CAqBN"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Per-mask label overlay creation, positioning, show/hide, and
|
|
3
|
-
* removal.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
3
|
+
* removal.
|
|
4
|
+
*
|
|
5
|
+
* The ImageEditor facade owns the canvas and resolved options; this module
|
|
6
|
+
* receives those dependencies through {@link MaskLabelManagerContext} so
|
|
7
|
+
* label behavior can be tested without the full facade.
|
|
8
8
|
*
|
|
9
9
|
* ## Owned contracts
|
|
10
10
|
*
|
|
11
11
|
* - Label text is computed via
|
|
12
12
|
* `options.label.getText(mask, mask.maskId - 1)`. The index argument is
|
|
13
13
|
* the stable creation index (`maskId - 1`), NOT the live canvas list
|
|
14
|
-
* position.
|
|
15
|
-
* masks were added or removed; the current
|
|
14
|
+
* position. Earlier implementations passed `this.maskCounter` here,
|
|
15
|
+
* which drifted whenever masks were added or removed; the current
|
|
16
|
+
* contract pins the index to the
|
|
16
17
|
* mask's own identity so labels stay consistent across
|
|
17
18
|
* `createMask` / `removeSelectedMask` / `removeAllMasks` / `undo`/`redo`.
|
|
18
19
|
*
|
|
@@ -23,7 +24,7 @@
|
|
|
23
24
|
* re-asserts them on every sync so an externally-mutated label still
|
|
24
25
|
* honors the contract.
|
|
25
26
|
*
|
|
26
|
-
* - **
|
|
27
|
+
* - **State serializer filter** — Every label object is
|
|
27
28
|
* tagged with `maskLabel = true` so `core/state-serializer.ts` can
|
|
28
29
|
* exclude it from history snapshots. Labels are session-only and never
|
|
29
30
|
* persisted.
|
|
@@ -60,7 +61,7 @@ import type { FabricModule, MaskObject, ResolvedOptions } from '../core/public-t
|
|
|
60
61
|
*
|
|
61
62
|
* The module does NOT own any of these slots — it only reads them so
|
|
62
63
|
* ownership of the canvas, Fabric module, and resolved options stays on the
|
|
63
|
-
* orchestrator
|
|
64
|
+
* orchestrator.
|
|
64
65
|
*/
|
|
65
66
|
export interface MaskLabelManagerContext {
|
|
66
67
|
/** Injected Fabric.js v7 module used to construct the label text. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mask-label-manager.d.ts","sourceRoot":"","sources":["../../../src/mask/mask-label-manager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mask-label-manager.d.ts","sourceRoot":"","sources":["../../../src/mask/mask-label-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAEH,OAAO,KAAK,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAKzF;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACpC,qEAAqE;IACrE,MAAM,EAAE,YAAY,CAAC;IACrB,4DAA4D;IAC5D,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACxB,+DAA+D;IAC/D,OAAO,EAAE,eAAe,CAAC;CAC5B;AAUD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAc3F;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAiE3F;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CA2BtF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CASzF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAuBxE"}
|