@bensitu/image-editor 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.md +118 -16
  2. package/dist/cjs/index.cjs +1800 -330
  3. package/dist/cjs/index.cjs.map +1 -1
  4. package/dist/esm/animation/animation-queue.js +16 -9
  5. package/dist/esm/animation/animation-queue.js.map +1 -1
  6. package/dist/esm/core/default-options.js +216 -9
  7. package/dist/esm/core/default-options.js.map +1 -1
  8. package/dist/esm/core/operation-guard.js +28 -0
  9. package/dist/esm/core/operation-guard.js.map +1 -1
  10. package/dist/esm/core/public-types.js.map +1 -1
  11. package/dist/esm/core/state-serializer.js +5 -4
  12. package/dist/esm/core/state-serializer.js.map +1 -1
  13. package/dist/esm/crop/crop-controller.js +4 -2
  14. package/dist/esm/crop/crop-controller.js.map +1 -1
  15. package/dist/esm/export/export-service.js +21 -10
  16. package/dist/esm/export/export-service.js.map +1 -1
  17. package/dist/esm/fabric/fabric-animation.js +56 -4
  18. package/dist/esm/fabric/fabric-animation.js.map +1 -1
  19. package/dist/esm/image/image-loader.js +9 -16
  20. package/dist/esm/image/image-loader.js.map +1 -1
  21. package/dist/esm/image/image-resampler.js +7 -2
  22. package/dist/esm/image/image-resampler.js.map +1 -1
  23. package/dist/esm/image/layout-manager.js +2 -20
  24. package/dist/esm/image/layout-manager.js.map +1 -1
  25. package/dist/esm/image/transform-controller.js.map +1 -1
  26. package/dist/esm/image-editor.js +383 -47
  27. package/dist/esm/image-editor.js.map +1 -1
  28. package/dist/esm/mask/mask-factory.js +53 -29
  29. package/dist/esm/mask/mask-factory.js.map +1 -1
  30. package/dist/esm/mask/mask-list.js +9 -3
  31. package/dist/esm/mask/mask-list.js.map +1 -1
  32. package/dist/esm/mosaic/mosaic-controller.js +670 -0
  33. package/dist/esm/mosaic/mosaic-controller.js.map +1 -0
  34. package/dist/esm/mosaic/mosaic-geometry.js +81 -0
  35. package/dist/esm/mosaic/mosaic-geometry.js.map +1 -0
  36. package/dist/esm/mosaic/mosaic-pixelate.js +71 -0
  37. package/dist/esm/mosaic/mosaic-pixelate.js.map +1 -0
  38. package/dist/esm/ui/dom-bindings.js +10 -3
  39. package/dist/esm/ui/dom-bindings.js.map +1 -1
  40. package/dist/esm/utils/number.js.map +1 -1
  41. package/dist/types/animation/animation-queue.d.ts.map +1 -1
  42. package/dist/types/core/default-options.d.ts +34 -6
  43. package/dist/types/core/default-options.d.ts.map +1 -1
  44. package/dist/types/core/errors.d.ts +1 -1
  45. package/dist/types/core/operation-guard.d.ts +2 -0
  46. package/dist/types/core/operation-guard.d.ts.map +1 -1
  47. package/dist/types/core/public-types.d.ts +123 -13
  48. package/dist/types/core/public-types.d.ts.map +1 -1
  49. package/dist/types/core/state-serializer.d.ts +3 -1
  50. package/dist/types/core/state-serializer.d.ts.map +1 -1
  51. package/dist/types/crop/crop-controller.d.ts.map +1 -1
  52. package/dist/types/export/export-service.d.ts.map +1 -1
  53. package/dist/types/fabric/fabric-animation.d.ts.map +1 -1
  54. package/dist/types/image/image-loader.d.ts +2 -4
  55. package/dist/types/image/image-loader.d.ts.map +1 -1
  56. package/dist/types/image/image-resampler.d.ts +1 -1
  57. package/dist/types/image/image-resampler.d.ts.map +1 -1
  58. package/dist/types/image/layout-manager.d.ts +5 -49
  59. package/dist/types/image/layout-manager.d.ts.map +1 -1
  60. package/dist/types/image/transform-controller.d.ts +1 -2
  61. package/dist/types/image/transform-controller.d.ts.map +1 -1
  62. package/dist/types/image-editor.d.ts +20 -9
  63. package/dist/types/image-editor.d.ts.map +1 -1
  64. package/dist/types/index.d.cts +1 -1
  65. package/dist/types/index.d.cts.map +1 -1
  66. package/dist/types/index.d.ts +1 -1
  67. package/dist/types/index.d.ts.map +1 -1
  68. package/dist/types/mask/mask-factory.d.ts +24 -21
  69. package/dist/types/mask/mask-factory.d.ts.map +1 -1
  70. package/dist/types/mask/mask-list.d.ts.map +1 -1
  71. package/dist/types/mosaic/mosaic-controller.d.ts +82 -0
  72. package/dist/types/mosaic/mosaic-controller.d.ts.map +1 -0
  73. package/dist/types/mosaic/mosaic-geometry.d.ts +29 -0
  74. package/dist/types/mosaic/mosaic-geometry.d.ts.map +1 -0
  75. package/dist/types/mosaic/mosaic-pixelate.d.ts +23 -0
  76. package/dist/types/mosaic/mosaic-pixelate.d.ts.map +1 -0
  77. package/dist/types/ui/dom-bindings.d.ts +3 -1
  78. package/dist/types/ui/dom-bindings.d.ts.map +1 -1
  79. package/dist/types/utils/number.d.ts +1 -2
  80. package/dist/types/utils/number.d.ts.map +1 -1
  81. package/dist/umd/image-editor.umd.js +1 -1
  82. package/dist/umd/image-editor.umd.js.map +1 -1
  83. package/package.json +1 -1
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Mosaic mode controller.
3
+ *
4
+ * Owns the Mosaic session lifecycle, preview objects, Fabric pointer handlers,
5
+ * and the base-image pixel replacement pipeline. The ImageEditor facade owns
6
+ * canonical editor state and passes it in through the context callbacks.
7
+ *
8
+ * @module
9
+ */
10
+ import type * as FabricNS from 'fabric';
11
+ import type { FabricModule, ImageEditorCallbackContext, ImageEditorOperation, ImageMimeType, ResolvedMosaicConfig, ResolvedOptions } from '../core/public-types.js';
12
+ import { type HistoryManager } from '../history/history-manager.js';
13
+ import { type MosaicImagePoint } from './mosaic-geometry.js';
14
+ interface MosaicPreviewCircle extends FabricNS.Circle {
15
+ isMosaicPreview?: boolean;
16
+ }
17
+ interface MosaicPreviewImage extends FabricNS.FabricImage {
18
+ isMosaicPreview?: boolean;
19
+ }
20
+ export interface MosaicSession {
21
+ previewCircle: MosaicPreviewCircle | null;
22
+ previewImage: MosaicPreviewImage | null;
23
+ prevSelection: boolean;
24
+ prevDefaultCursor: string | undefined;
25
+ prevObjectStates: Array<{
26
+ object: FabricNS.FabricObject;
27
+ evented: boolean;
28
+ selectable: boolean;
29
+ }>;
30
+ handlers: Array<{
31
+ eventName: string;
32
+ callback: (event: unknown) => void;
33
+ }>;
34
+ rasterCache: MosaicRasterCache | null;
35
+ pendingCanvasPoints: Array<{
36
+ x: number;
37
+ y: number;
38
+ }>;
39
+ isPointerDown: boolean;
40
+ isApplying: boolean;
41
+ commitRequested: boolean;
42
+ hasUncommittedChanges: boolean;
43
+ lastImagePoint: MosaicImagePoint | null;
44
+ }
45
+ export interface MosaicControllerContext {
46
+ readonly fabric: FabricModule;
47
+ readonly canvas: FabricNS.Canvas;
48
+ readonly options: ResolvedOptions;
49
+ readonly historyManager: HistoryManager;
50
+ getMosaicConfig(): ResolvedMosaicConfig;
51
+ isImageLoaded(): boolean;
52
+ getOriginalImage(): FabricNS.FabricImage | null;
53
+ setOriginalImage(image: FabricNS.FabricImage | null): void;
54
+ getCurrentImageMimeType(): ImageMimeType | null;
55
+ setCurrentImageMimeType(mimeType: ImageMimeType | null): void;
56
+ getLastSnapshot(): string | null;
57
+ setLastSnapshot(snapshot: string | null): void;
58
+ captureSnapshot(): string;
59
+ loadFromState(snapshot: string): Promise<void>;
60
+ updateUi(): void;
61
+ updateInputs(): void;
62
+ hideAllMaskLabels(): void;
63
+ emitImageChanged(context: ImageEditorCallbackContext): void;
64
+ emitBusyChangeIfChanged(context: ImageEditorCallbackContext): void;
65
+ buildCallbackContext(operation: ImageEditorOperation, isInternal?: boolean): ImageEditorCallbackContext;
66
+ getMosaicSession(): MosaicSession | null;
67
+ setMosaicSession(session: MosaicSession | null): void;
68
+ }
69
+ interface MosaicRasterCache {
70
+ offscreenCanvas: HTMLCanvasElement;
71
+ renderingContext: CanvasRenderingContext2D;
72
+ imageData: ImageData;
73
+ source: string;
74
+ width: number;
75
+ height: number;
76
+ }
77
+ export declare function enterMosaicMode(context: MosaicControllerContext): void;
78
+ export declare function exitMosaicMode(context: MosaicControllerContext): void;
79
+ export declare function updateMosaicPreview(context: MosaicControllerContext): void;
80
+ export declare function isMosaicPreviewObject(object: FabricNS.FabricObject): boolean;
81
+ export {};
82
+ //# sourceMappingURL=mosaic-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mosaic-controller.d.ts","sourceRoot":"","sources":["../../../src/mosaic/mosaic-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Canvas-to-source-image coordinate conversion for Mosaic mode.
3
+ *
4
+ * Fabric object bounding boxes are not sufficient for rotated images. These
5
+ * helpers invert the image transform matrix and convert the pointer into the
6
+ * image's natural pixel coordinate space.
7
+ *
8
+ * @module
9
+ */
10
+ import type * as FabricNS from 'fabric';
11
+ import type { FabricModule } from '../core/public-types.js';
12
+ export interface MosaicImagePoint {
13
+ sourceX: number;
14
+ sourceY: number;
15
+ sourceRadius: number;
16
+ }
17
+ /**
18
+ * Convert a Fabric canvas pointer into source-image pixels.
19
+ *
20
+ * For non-uniform image scale, `sourceRadius` uses the smaller canvas scale
21
+ * axis, which yields the larger source-space radius. This conservative
22
+ * deterministic strategy ensures the circular canvas brush covers the clicked
23
+ * image area after inverse transformation.
24
+ */
25
+ export declare function getMosaicImagePoint(fabric: FabricModule, image: FabricNS.FabricImage, canvasPoint: {
26
+ x: number;
27
+ y: number;
28
+ }, brushDiameterCanvasPx: number): MosaicImagePoint | null;
29
+ //# sourceMappingURL=mosaic-geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mosaic-geometry.d.ts","sourceRoot":"","sources":["../../../src/mosaic/mosaic-geometry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,KAAK,QAAQ,MAAM,QAAQ,CAAC;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACxB;AAwED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,QAAQ,CAAC,WAAW,EAC3B,WAAW,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EACrC,qBAAqB,EAAE,MAAM,GAC9B,gBAAgB,GAAG,IAAI,CAmCzB"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Pure pixelation helpers for Mosaic mode.
3
+ *
4
+ * The helpers mutate caller-supplied ImageData in place and do not touch DOM
5
+ * or Fabric state, which keeps the algorithm deterministic and directly
6
+ * testable.
7
+ *
8
+ * @module
9
+ */
10
+ export interface MosaicPixelateOptions {
11
+ imageData: ImageData;
12
+ centerX: number;
13
+ centerY: number;
14
+ radius: number;
15
+ blockSize: number;
16
+ }
17
+ /**
18
+ * Applies blocky pixelation inside a circular brush region.
19
+ *
20
+ * @returns `true` when at least one pixel was processed, otherwise `false`.
21
+ */
22
+ export declare function applyCircularMosaicToImageData(options: MosaicPixelateOptions): boolean;
23
+ //# sourceMappingURL=mosaic-pixelate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mosaic-pixelate.d.ts","sourceRoot":"","sources":["../../../src/mosaic/mosaic-pixelate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACrB;AAsBD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAiEtF"}
@@ -64,6 +64,7 @@ export declare class DomBindings {
64
64
  private registry;
65
65
  private readonly resolveElementId;
66
66
  private readonly isDisposed;
67
+ private readonly resolveDocument;
67
68
  /**
68
69
  * @param resolveElementId - Returns the resolved DOM element ID for a given logical key, or a
69
70
  * falsy value when the integrator omitted that key from the `idMap`.
@@ -71,8 +72,9 @@ export declare class DomBindings {
71
72
  * @param isDisposed - Returns the editor's current `isDisposed` flag. Bound handlers
72
73
  * consult this on every dispatch and exit early when it returns
73
74
  * `true`.
75
+ * @param resolveDocument - Returns the document that owns the bound controls.
74
76
  */
75
- constructor(resolveElementId: (key: ElementKey) => string | null | undefined, isDisposed: () => boolean);
77
+ constructor(resolveElementId: (key: ElementKey) => string | null | undefined, isDisposed: () => boolean, resolveDocument?: () => Document);
76
78
  /**
77
79
  * Look up the element registered under `key`. If it exists, attach
78
80
  * `handler` for `eventType` and record the binding so `removeAll` can
@@ -1 +1 @@
1
- {"version":3,"file":"dom-bindings.d.ts","sourceRoot":"","sources":["../../../src/ui/dom-bindings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC;AActD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiD;IAClF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAE3C;;;;;;;OAOG;gBAEC,gBAAgB,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,EAChE,UAAU,EAAE,MAAM,OAAO;IAM7B;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO;IAmBjF;;;;;;OAMG;IACH,SAAS,IAAI,IAAI;IAgBjB;;;OAGG;IACH,IAAI,IAAI,MAAM;CAGjB"}
1
+ {"version":3,"file":"dom-bindings.d.ts","sourceRoot":"","sources":["../../../src/ui/dom-bindings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC;AActD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiD;IAClF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IAEjD;;;;;;;;OAQG;gBAEC,gBAAgB,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,EAChE,UAAU,EAAE,MAAM,OAAO,EACzB,eAAe,GAAE,MAAM,QAAyB;IAOpD;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO;IAmBjF;;;;;;OAMG;IACH,SAAS,IAAI,IAAI;IAgBjB;;;OAGG;IACH,IAAI,IAAI,MAAM;CAGjB"}
@@ -35,8 +35,7 @@
35
35
  * deterministic across canvas resizes.
36
36
  * - The helper does NOT clamp the result against canvas bounds; callers
37
37
  * are responsible for any subsequent clamping (the mask factory may
38
- * expand the canvas to accommodate larger placements when
39
- * `expandCanvasToImage` is enabled).
38
+ * expand the canvas to accommodate larger placements in expand layout mode).
40
39
  *
41
40
  * ## Non-goals
42
41
  *
@@ -1 +1 @@
1
- {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../../src/utils/number.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,OAAO,KAAK,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE9F;;;;;;GAMG;AACH,MAAM,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,cAAc,CAC1B,GAAG,EAAE,eAAe,GAAG,SAAS,EAChC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,QAAQ,CAAC,MAAM,EACvB,OAAO,EAAE,eAAe,GACzB,MAAM,CAgBR;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,YAAY,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAKtE"}
1
+ {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../../src/utils/number.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO,KAAK,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE9F;;;;;;GAMG;AACH,MAAM,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,cAAc,CAC1B,GAAG,EAAE,eAAe,GAAG,SAAS,EAChC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,QAAQ,CAAC,MAAM,EACvB,OAAO,EAAE,eAAe,GACzB,MAAM,CAgBR;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,YAAY,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAKtE"}