@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.
Files changed (147) hide show
  1. package/README.md +346 -90
  2. package/dist/cjs/index.cjs +4883 -1191
  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/annotation/annotation-lock.js +7 -0
  7. package/dist/esm/annotation/annotation-lock.js.map +1 -0
  8. package/dist/esm/annotation/annotation-manager.js +217 -0
  9. package/dist/esm/annotation/annotation-manager.js.map +1 -0
  10. package/dist/esm/annotation/annotation-style.js +50 -0
  11. package/dist/esm/annotation/annotation-style.js.map +1 -0
  12. package/dist/esm/annotation/draw-controller.js +114 -0
  13. package/dist/esm/annotation/draw-controller.js.map +1 -0
  14. package/dist/esm/annotation/text-controller.js +234 -0
  15. package/dist/esm/annotation/text-controller.js.map +1 -0
  16. package/dist/esm/core/default-options.js +447 -11
  17. package/dist/esm/core/default-options.js.map +1 -1
  18. package/dist/esm/core/editor-object-kind.js +37 -0
  19. package/dist/esm/core/editor-object-kind.js.map +1 -0
  20. package/dist/esm/core/errors.js +19 -0
  21. package/dist/esm/core/errors.js.map +1 -1
  22. package/dist/esm/core/layer-order.js +100 -0
  23. package/dist/esm/core/layer-order.js.map +1 -0
  24. package/dist/esm/core/operation-guard.js +28 -0
  25. package/dist/esm/core/operation-guard.js.map +1 -1
  26. package/dist/esm/core/public-types.js +34 -1
  27. package/dist/esm/core/public-types.js.map +1 -1
  28. package/dist/esm/core/state-serializer.js +108 -27
  29. package/dist/esm/core/state-serializer.js.map +1 -1
  30. package/dist/esm/crop/crop-controller.js +6 -2
  31. package/dist/esm/crop/crop-controller.js.map +1 -1
  32. package/dist/esm/export/export-format.js.map +1 -1
  33. package/dist/esm/export/export-service.js +140 -141
  34. package/dist/esm/export/export-service.js.map +1 -1
  35. package/dist/esm/export/overlay-merge-service.js +75 -0
  36. package/dist/esm/export/overlay-merge-service.js.map +1 -0
  37. package/dist/esm/fabric/fabric-animation.js +56 -4
  38. package/dist/esm/fabric/fabric-animation.js.map +1 -1
  39. package/dist/esm/history/history-manager.js +2 -2
  40. package/dist/esm/history/history-manager.js.map +1 -1
  41. package/dist/esm/image/image-loader.js +27 -65
  42. package/dist/esm/image/image-loader.js.map +1 -1
  43. package/dist/esm/image/image-resampler.js +7 -2
  44. package/dist/esm/image/image-resampler.js.map +1 -1
  45. package/dist/esm/image/layout-manager.js +2 -20
  46. package/dist/esm/image/layout-manager.js.map +1 -1
  47. package/dist/esm/image/transform-controller.js.map +1 -1
  48. package/dist/esm/image-editor.js +1474 -135
  49. package/dist/esm/image-editor.js.map +1 -1
  50. package/dist/esm/index.js +1 -1
  51. package/dist/esm/index.js.map +1 -1
  52. package/dist/esm/mask/mask-factory.js +92 -43
  53. package/dist/esm/mask/mask-factory.js.map +1 -1
  54. package/dist/esm/mask/mask-label-manager.js +2 -0
  55. package/dist/esm/mask/mask-label-manager.js.map +1 -1
  56. package/dist/esm/mask/mask-list.js +9 -3
  57. package/dist/esm/mask/mask-list.js.map +1 -1
  58. package/dist/esm/mask/mask-style.js.map +1 -1
  59. package/dist/esm/mosaic/mosaic-controller.js +666 -0
  60. package/dist/esm/mosaic/mosaic-controller.js.map +1 -0
  61. package/dist/esm/mosaic/mosaic-geometry.js +81 -0
  62. package/dist/esm/mosaic/mosaic-geometry.js.map +1 -0
  63. package/dist/esm/mosaic/mosaic-pixelate.js +71 -0
  64. package/dist/esm/mosaic/mosaic-pixelate.js.map +1 -0
  65. package/dist/esm/ui/dom-bindings.js +10 -3
  66. package/dist/esm/ui/dom-bindings.js.map +1 -1
  67. package/dist/esm/utils/image-element-loader.js +55 -0
  68. package/dist/esm/utils/image-element-loader.js.map +1 -0
  69. package/dist/esm/utils/number.js.map +1 -1
  70. package/dist/esm/utils/pointer.js +28 -0
  71. package/dist/esm/utils/pointer.js.map +1 -0
  72. package/dist/types/animation/animation-queue.d.ts.map +1 -1
  73. package/dist/types/annotation/annotation-lock.d.ts +12 -0
  74. package/dist/types/annotation/annotation-lock.d.ts.map +1 -0
  75. package/dist/types/annotation/annotation-manager.d.ts +33 -0
  76. package/dist/types/annotation/annotation-manager.d.ts.map +1 -0
  77. package/dist/types/annotation/annotation-style.d.ts +13 -0
  78. package/dist/types/annotation/annotation-style.d.ts.map +1 -0
  79. package/dist/types/annotation/draw-controller.d.ts +43 -0
  80. package/dist/types/annotation/draw-controller.d.ts.map +1 -0
  81. package/dist/types/annotation/text-controller.d.ts +47 -0
  82. package/dist/types/annotation/text-controller.d.ts.map +1 -0
  83. package/dist/types/core/default-options.d.ts +46 -6
  84. package/dist/types/core/default-options.d.ts.map +1 -1
  85. package/dist/types/core/editor-object-kind.d.ts +29 -0
  86. package/dist/types/core/editor-object-kind.d.ts.map +1 -0
  87. package/dist/types/core/errors.d.ts +12 -2
  88. package/dist/types/core/errors.d.ts.map +1 -1
  89. package/dist/types/core/layer-order.d.ts +21 -0
  90. package/dist/types/core/layer-order.d.ts.map +1 -0
  91. package/dist/types/core/operation-guard.d.ts +2 -0
  92. package/dist/types/core/operation-guard.d.ts.map +1 -1
  93. package/dist/types/core/public-types.d.ts +341 -33
  94. package/dist/types/core/public-types.d.ts.map +1 -1
  95. package/dist/types/core/state-serializer.d.ts +32 -5
  96. package/dist/types/core/state-serializer.d.ts.map +1 -1
  97. package/dist/types/crop/crop-controller.d.ts +6 -7
  98. package/dist/types/crop/crop-controller.d.ts.map +1 -1
  99. package/dist/types/export/export-format.d.ts +5 -33
  100. package/dist/types/export/export-format.d.ts.map +1 -1
  101. package/dist/types/export/export-service.d.ts +24 -15
  102. package/dist/types/export/export-service.d.ts.map +1 -1
  103. package/dist/types/export/overlay-merge-service.d.ts +38 -0
  104. package/dist/types/export/overlay-merge-service.d.ts.map +1 -0
  105. package/dist/types/fabric/fabric-animation.d.ts.map +1 -1
  106. package/dist/types/history/history-manager.d.ts +11 -14
  107. package/dist/types/history/history-manager.d.ts.map +1 -1
  108. package/dist/types/image/image-loader.d.ts +24 -21
  109. package/dist/types/image/image-loader.d.ts.map +1 -1
  110. package/dist/types/image/image-resampler.d.ts +2 -2
  111. package/dist/types/image/image-resampler.d.ts.map +1 -1
  112. package/dist/types/image/layout-manager.d.ts +5 -49
  113. package/dist/types/image/layout-manager.d.ts.map +1 -1
  114. package/dist/types/image/transform-controller.d.ts +6 -9
  115. package/dist/types/image/transform-controller.d.ts.map +1 -1
  116. package/dist/types/image-editor.d.ts +93 -14
  117. package/dist/types/image-editor.d.ts.map +1 -1
  118. package/dist/types/index.d.cts +3 -3
  119. package/dist/types/index.d.cts.map +1 -1
  120. package/dist/types/index.d.ts +3 -3
  121. package/dist/types/index.d.ts.map +1 -1
  122. package/dist/types/mask/mask-factory.d.ts +24 -21
  123. package/dist/types/mask/mask-factory.d.ts.map +1 -1
  124. package/dist/types/mask/mask-label-manager.d.ts +10 -9
  125. package/dist/types/mask/mask-label-manager.d.ts.map +1 -1
  126. package/dist/types/mask/mask-list.d.ts +11 -12
  127. package/dist/types/mask/mask-list.d.ts.map +1 -1
  128. package/dist/types/mask/mask-style.d.ts +19 -20
  129. package/dist/types/mask/mask-style.d.ts.map +1 -1
  130. package/dist/types/mosaic/mosaic-controller.d.ts +82 -0
  131. package/dist/types/mosaic/mosaic-controller.d.ts.map +1 -0
  132. package/dist/types/mosaic/mosaic-geometry.d.ts +29 -0
  133. package/dist/types/mosaic/mosaic-geometry.d.ts.map +1 -0
  134. package/dist/types/mosaic/mosaic-pixelate.d.ts +23 -0
  135. package/dist/types/mosaic/mosaic-pixelate.d.ts.map +1 -0
  136. package/dist/types/ui/dom-bindings.d.ts +3 -1
  137. package/dist/types/ui/dom-bindings.d.ts.map +1 -1
  138. package/dist/types/ui/visibility-state.d.ts +2 -2
  139. package/dist/types/utils/image-element-loader.d.ts +19 -0
  140. package/dist/types/utils/image-element-loader.d.ts.map +1 -0
  141. package/dist/types/utils/number.d.ts +1 -2
  142. package/dist/types/utils/number.d.ts.map +1 -1
  143. package/dist/types/utils/pointer.d.ts +16 -0
  144. package/dist/types/utils/pointer.d.ts.map +1 -0
  145. package/dist/umd/image-editor.umd.js +1 -1
  146. package/dist/umd/image-editor.umd.js.map +1 -1
  147. package/package.json +1 -1
@@ -7,11 +7,12 @@
7
7
  * `crop` values merge with their defaults, callback values normalize to a
8
8
  * function or `null`, unknown top-level keys are ignored, top-level scalar
9
9
  * values remain internally mutable for controlled updates such as
10
- * `setLayoutMode()`, and returned nested config objects are frozen.
10
+ * `setLayoutMode()` stores its runtime mode separately, and returned
11
+ * option objects are frozen.
11
12
  *
12
13
  * @module
13
14
  */
14
- import type { ImageEditorOptions, LabelConfig, ResolvedCropConfig, ResolvedOptions } from './public-types.js';
15
+ import type { DrawConfig, ImageEditorOptions, LabelConfig, LayoutMode, MosaicConfig, ResolvedCropConfig, ResolvedDrawConfig, ResolvedMosaicConfig, ResolvedOptions, ResolvedTextAnnotationConfig, TextAnnotationConfig } from './public-types.js';
15
16
  /**
16
17
  * Documented defaults for every top-level option except the nested
17
18
  * {@link LabelConfig} and {@link CropConfig} configs, which are owned by
@@ -21,7 +22,7 @@ import type { ImageEditorOptions, LabelConfig, ResolvedCropConfig, ResolvedOptio
21
22
  * Nested label and crop defaults are carried by {@link DEFAULT_LABEL} and
22
23
  * {@link DEFAULT_CROP}.
23
24
  */
24
- export declare const DEFAULT_OPTIONS: Omit<ResolvedOptions, 'label' | 'crop'>;
25
+ export declare const DEFAULT_OPTIONS: Omit<ResolvedOptions, 'label' | 'crop' | 'defaultMosaicConfig' | 'defaultTextConfig' | 'defaultDrawConfig'>;
25
26
  /**
26
27
  * Default {@link LabelConfig}. Consumers can override `getText`, supply a
27
28
  * `create` factory, or provide partial `textOptions` — unspecified keys fall
@@ -32,6 +33,45 @@ export declare const DEFAULT_LABEL: LabelConfig;
32
33
  * Default {@link CropConfig}.
33
34
  */
34
35
  export declare const DEFAULT_CROP: ResolvedCropConfig;
36
+ /**
37
+ * Default Mosaic configuration used to seed each editor's current runtime
38
+ * Mosaic tool config.
39
+ */
40
+ export declare const DEFAULT_MOSAIC_CONFIG: ResolvedMosaicConfig;
41
+ export declare const DEFAULT_TEXT_ANNOTATION_CONFIG: ResolvedTextAnnotationConfig;
42
+ export declare const DEFAULT_DRAW_CONFIG: ResolvedDrawConfig;
43
+ export declare function isLayoutMode(value: unknown): value is LayoutMode;
44
+ /**
45
+ * Return a mutable defensive copy of a resolved Mosaic config.
46
+ */
47
+ export declare function cloneResolvedMosaicConfig(config: ResolvedMosaicConfig): ResolvedMosaicConfig;
48
+ /**
49
+ * Normalize a constructor-level Mosaic config against a resolved fallback.
50
+ */
51
+ export declare function normalizeMosaicConfig(input: unknown, fallback: ResolvedMosaicConfig): ResolvedMosaicConfig;
52
+ /**
53
+ * Merge a runtime Mosaic config patch into the current resolved config.
54
+ * Omitted fields remain unchanged; invalid fields fall back to `current`.
55
+ */
56
+ export declare function mergeMosaicConfigPatch(current: ResolvedMosaicConfig, patch: MosaicConfig, fallback?: ResolvedMosaicConfig): ResolvedMosaicConfig;
57
+ /**
58
+ * Returns invalid Mosaic config field names for warning/reporting paths.
59
+ */
60
+ export declare function getInvalidMosaicConfigFields(input: MosaicConfig): string[];
61
+ /**
62
+ * Strict value equality for resolved Mosaic configs.
63
+ */
64
+ export declare function areResolvedMosaicConfigsEqual(left: ResolvedMosaicConfig, right: ResolvedMosaicConfig): boolean;
65
+ export declare function cloneResolvedTextAnnotationConfig(config: ResolvedTextAnnotationConfig): ResolvedTextAnnotationConfig;
66
+ export declare function cloneResolvedDrawConfig(config: ResolvedDrawConfig): ResolvedDrawConfig;
67
+ export declare function mergeTextAnnotationConfigPatch(current: ResolvedTextAnnotationConfig, patch: TextAnnotationConfig, fallback?: ResolvedTextAnnotationConfig): ResolvedTextAnnotationConfig;
68
+ export declare function normalizeTextAnnotationConfig(input: unknown, fallback: ResolvedTextAnnotationConfig): ResolvedTextAnnotationConfig;
69
+ export declare function mergeDrawConfigPatch(current: ResolvedDrawConfig, patch: DrawConfig, fallback?: ResolvedDrawConfig): ResolvedDrawConfig;
70
+ export declare function normalizeDrawConfig(input: unknown, fallback: ResolvedDrawConfig): ResolvedDrawConfig;
71
+ export declare function areResolvedTextAnnotationConfigsEqual(left: ResolvedTextAnnotationConfig, right: ResolvedTextAnnotationConfig): boolean;
72
+ export declare function areResolvedDrawConfigsEqual(left: ResolvedDrawConfig, right: ResolvedDrawConfig): boolean;
73
+ export declare function getInvalidTextAnnotationConfigFields(input: TextAnnotationConfig): string[];
74
+ export declare function getInvalidDrawConfigFields(input: DrawConfig): string[];
35
75
  /**
36
76
  * Resolves a partial {@link ImageEditorOptions} into a fully populated
37
77
  * {@link ResolvedOptions} object.
@@ -46,9 +86,9 @@ export declare const DEFAULT_CROP: ResolvedCropConfig;
46
86
  * - Callback values are normalized: function values are kept, anything
47
87
  * else becomes `null`.
48
88
  * - Unknown top-level keys are silently dropped.
49
- * - The returned `label` and `crop` references are frozen so that mutating
50
- * `input.label`, `input.label.textOptions`, or `input.crop` after the call
51
- * cannot affect the live editor.
89
+ * - The returned options object plus its `label` and `crop` references
90
+ * are frozen so mutating `input` after the call cannot affect the
91
+ * live editor.
52
92
  *
53
93
  * @param input - Optional partial options object. Defaults to `{}`.
54
94
  */
@@ -1 +1 @@
1
- {"version":3,"file":"default-options.d.ts","sourceRoot":"","sources":["../../../src/core/default-options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAGR,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,eAAe,EAClB,MAAM,mBAAmB,CAAC;AAI3B;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,MAAM,CAgEnE,CAAC;AAmBF;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,WAG3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,kBAS1B,CAAC;AAwHF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,eAAe,CAqNjF"}
1
+ {"version":3,"file":"default-options.d.ts","sourceRoot":"","sources":["../../../src/core/default-options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAGR,UAAU,EAEV,kBAAkB,EAClB,WAAW,EACX,UAAU,EACV,YAAY,EAEZ,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,4BAA4B,EAC5B,oBAAoB,EACvB,MAAM,mBAAmB,CAAC;AAQ3B;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,EAAE,IAAI,CAC9B,eAAe,EACf,OAAO,GAAG,MAAM,GAAG,qBAAqB,GAAG,mBAAmB,GAAG,mBAAmB,CAqEvF,CAAC;AAmBF;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,WAG3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,kBAS1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,oBASlC,CAAC;AAEH,eAAO,MAAM,8BAA8B,EAAE,4BAmB3C,CAAC;AAEH,eAAO,MAAM,mBAAmB,EAAE,kBAUhC,CAAC;AAwEH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAEhE;AA+ID;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,oBAAoB,GAAG,oBAAoB,CAO5F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACjC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,oBAAoB,GAC/B,oBAAoB,CAGtB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAClC,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,YAAY,EACnB,QAAQ,GAAE,oBAA8B,GACzC,oBAAoB,CA4CtB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,CA0D1E;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CACzC,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,oBAAoB,GAC5B,OAAO,CAoBT;AAED,wBAAgB,iCAAiC,CAC7C,MAAM,EAAE,4BAA4B,GACrC,4BAA4B,CAK9B;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG,kBAAkB,CAEtF;AAgCD,wBAAgB,8BAA8B,CAC1C,OAAO,EAAE,4BAA4B,EACrC,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,GAAE,4BAAsC,GACjD,4BAA4B,CAgD9B;AAED,wBAAgB,6BAA6B,CACzC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,4BAA4B,GACvC,4BAA4B,CAG9B;AAeD,wBAAgB,oBAAoB,CAChC,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,UAAU,EACjB,QAAQ,GAAE,kBAA4B,GACvC,kBAAkB,CAsBpB;AAED,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,kBAAkB,GAC7B,kBAAkB,CAGpB;AAED,wBAAgB,qCAAqC,CACjD,IAAI,EAAE,4BAA4B,EAClC,KAAK,EAAE,4BAA4B,GACpC,OAAO,CAET;AAED,wBAAgB,2BAA2B,CACvC,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,kBAAkB,GAC1B,OAAO,CAYT;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAW1F;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CAOtE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,eAAe,CAoQjF"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Metadata markers for objects owned by the editor runtime.
3
+ *
4
+ * All base images, masks, annotations, and session-only objects should be
5
+ * marked through these helpers so public type guards can reject legacy
6
+ * duck-typed objects reliably.
7
+ *
8
+ * @module
9
+ */
10
+ import type * as FabricNS from 'fabric';
11
+ import type { AnnotationObject, AnnotationType, BaseImageObject, MaskObject, SessionObject, SessionObjectType } from './public-types.js';
12
+ export declare function markBaseImageObject(image: FabricNS.FabricImage): BaseImageObject;
13
+ export declare function markMaskObject(object: FabricNS.FabricObject, meta: {
14
+ maskId: number;
15
+ maskUid: string;
16
+ maskName: string;
17
+ originalAlpha: number;
18
+ originalStroke?: FabricNS.TFiller | string | null;
19
+ originalStrokeWidth?: number;
20
+ }): MaskObject;
21
+ export declare function markAnnotationObject(object: FabricNS.FabricObject, meta: {
22
+ annotationId: number;
23
+ annotationType: AnnotationType;
24
+ annotationName: string;
25
+ annotationHidden?: boolean;
26
+ annotationLocked?: boolean;
27
+ }): AnnotationObject;
28
+ export declare function markSessionObject<T extends FabricNS.FabricObject>(object: T, sessionObjectType: SessionObjectType): T & SessionObject;
29
+ //# sourceMappingURL=editor-object-kind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-object-kind.d.ts","sourceRoot":"","sources":["../../../src/core/editor-object-kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,KAAK,QAAQ,MAAM,QAAQ,CAAC;AAExC,OAAO,KAAK,EACR,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,UAAU,EACV,aAAa,EACb,iBAAiB,EACpB,MAAM,mBAAmB,CAAC;AAE3B,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,GAAG,eAAe,CAIhF;AAED,wBAAgB,cAAc,CAC1B,MAAM,EAAE,QAAQ,CAAC,YAAY,EAC7B,IAAI,EAAE;IACF,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,QAAQ,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;IAClD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAChC,GACF,UAAU,CAYZ;AAED,wBAAgB,oBAAoB,CAChC,MAAM,EAAE,QAAQ,CAAC,YAAY,EAC7B,IAAI,EAAE;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B,GACF,gBAAgB,CASlB;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,QAAQ,CAAC,YAAY,EAC7D,MAAM,EAAE,CAAC,EACT,iBAAiB,EAAE,iBAAiB,GACrC,CAAC,GAAG,aAAa,CAKnB"}
@@ -6,7 +6,7 @@
6
6
  * callers can discriminate via `instanceof` or `error.name` checks. The
7
7
  * hierarchy is intentionally flat — there is no shared `ImageEditorError`
8
8
  * base class — to keep `name`/message contracts independent per pipeline
9
- * and to keep name/message contracts independent per pipeline.
9
+ * and avoid coupling unrelated error contracts.
10
10
  *
11
11
  * These classes are internal to the package and are NOT re-exported from
12
12
  * `src/index.ts`. Consumers see them via promise rejections from public
@@ -70,7 +70,7 @@ export declare class ImageLoadTimeoutError extends Error {
70
70
  * returns `null`).
71
71
  *
72
72
  * Surfaces to consumer as: rejection of the `loadImage` promise. The
73
- * Transactional_Load rollback runs before the rejection.
73
+ * image-loader rollback runs before the rejection.
74
74
  *
75
75
  */
76
76
  export declare class DownsampleError extends Error {
@@ -93,6 +93,16 @@ export declare class MergeMasksError extends Error {
93
93
  readonly originalError: unknown;
94
94
  constructor(message?: string, originalError?: unknown);
95
95
  }
96
+ /**
97
+ * Raised when flattening annotations into the base image fails. The
98
+ * pre-merge snapshot is restored before the rejection.
99
+ */
100
+ export declare class MergeAnnotationsError extends Error {
101
+ readonly name = "MergeAnnotationsError";
102
+ /** Original error thrown during the merge pipeline. */
103
+ readonly originalError: unknown;
104
+ constructor(message?: string, originalError?: unknown);
105
+ }
96
106
  /**
97
107
  * Raised by `crop/crop-controller.ts.applyCrop` on any failure during the
98
108
  * crop pipeline (crop computation, cropped-image load via the loader, or
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAkBH;;;;;;;;;GASG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAC7C,SAAyB,IAAI,4BAA4B;gBAGrD,OAAO,SAA6H;CAK3I;AAED;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACvC,SAAyB,IAAI,sBAAsB;IAEnD,uEAAuE;IACvE,SAAgB,aAAa,EAAE,OAAO,CAAC;gBAE3B,OAAO,SAAqC,EAAE,aAAa,GAAE,OAAc;CAK1F;AAED;;;;;;;;;;GAUG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC5C,SAAyB,IAAI,2BAA2B;IAExD,oEAAoE;IACpE,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,wDAAwD;IACxD,SAAgB,SAAS,EAAE,MAAM,CAAC;gBAEtB,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAM/C;AAED;;;;;;;;;GASG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACtC,SAAyB,IAAI,qBAAqB;IAElD,8CAA8C;IAC9C,SAAgB,aAAa,EAAE,OAAO,CAAC;gBAGnC,OAAO,SAAoD,EAC3D,aAAa,GAAE,OAAc;CAMpC;AAED;;;;;;;GAOG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACtC,SAAyB,IAAI,qBAAqB;IAElD,uDAAuD;IACvD,SAAgB,aAAa,EAAE,OAAO,CAAC;gBAE3B,OAAO,SAA0C,EAAE,aAAa,GAAE,OAAc;CAK/F;AAED;;;;;;;;;GASG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACrC,SAAyB,IAAI,oBAAoB;IAEjD,sDAAsD;IACtD,SAAgB,aAAa,EAAE,OAAO,CAAC;gBAE3B,OAAO,SAAuC,EAAE,aAAa,GAAE,OAAc;CAK5F;AAED;;;;;;;;;;GAUG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC1C,SAAyB,IAAI,yBAAyB;IAEtD,uDAAuD;IACvD,SAAgB,SAAS,EAAE,MAAM,CAAC;gBAEtB,SAAS,SAAoB;CAK5C;AAED;;;;;;GAMG;AACH,qBAAa,WAAY,SAAQ,KAAK;IAClC,SAAyB,IAAI,iBAAiB;IAE9C,wDAAwD;IACxD,SAAgB,aAAa,EAAE,OAAO,CAAC;gBAE3B,OAAO,SAA4B,EAAE,aAAa,GAAE,OAAc;CAKjF"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAkBH;;;;;;;;;GASG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAC7C,SAAyB,IAAI,4BAA4B;gBAGrD,OAAO,SAA6H;CAK3I;AAED;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACvC,SAAyB,IAAI,sBAAsB;IAEnD,uEAAuE;IACvE,SAAgB,aAAa,EAAE,OAAO,CAAC;gBAE3B,OAAO,SAAqC,EAAE,aAAa,GAAE,OAAc;CAK1F;AAED;;;;;;;;;;GAUG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC5C,SAAyB,IAAI,2BAA2B;IAExD,oEAAoE;IACpE,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,wDAAwD;IACxD,SAAgB,SAAS,EAAE,MAAM,CAAC;gBAEtB,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAM/C;AAED;;;;;;;;;GASG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACtC,SAAyB,IAAI,qBAAqB;IAElD,8CAA8C;IAC9C,SAAgB,aAAa,EAAE,OAAO,CAAC;gBAGnC,OAAO,SAAoD,EAC3D,aAAa,GAAE,OAAc;CAMpC;AAED;;;;;;;GAOG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACtC,SAAyB,IAAI,qBAAqB;IAElD,uDAAuD;IACvD,SAAgB,aAAa,EAAE,OAAO,CAAC;gBAE3B,OAAO,SAA0C,EAAE,aAAa,GAAE,OAAc;CAK/F;AAED;;;GAGG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC5C,SAAyB,IAAI,2BAA2B;IAExD,uDAAuD;IACvD,SAAgB,aAAa,EAAE,OAAO,CAAC;gBAGnC,OAAO,SAAgD,EACvD,aAAa,GAAE,OAAc;CAMpC;AAED;;;;;;;;;GASG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACrC,SAAyB,IAAI,oBAAoB;IAEjD,sDAAsD;IACtD,SAAgB,aAAa,EAAE,OAAO,CAAC;gBAE3B,OAAO,SAAuC,EAAE,aAAa,GAAE,OAAc;CAK5F;AAED;;;;;;;;;;GAUG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC1C,SAAyB,IAAI,yBAAyB;IAEtD,uDAAuD;IACvD,SAAgB,SAAS,EAAE,MAAM,CAAC;gBAEtB,SAAS,SAAoB;CAK5C;AAED;;;;;;GAMG;AACH,qBAAa,WAAY,SAAQ,KAAK;IAClC,SAAyB,IAAI,iBAAiB;IAE9C,wDAAwD;IACxD,SAAgB,aAAa,EAAE,OAAO,CAAC;gBAE3B,OAAO,SAA4B,EAAE,aAAa,GAAE,OAAc;CAKjF"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Layer-order helpers for editor-owned Fabric objects.
3
+ *
4
+ * The invariant is base images at the bottom, host objects next, editable
5
+ * overlays above them, and session-only objects at the top.
6
+ *
7
+ * @module
8
+ */
9
+ import type * as FabricNS from 'fabric';
10
+ import { type AnnotationObject, type BaseImageObject, type MaskObject, type SessionObject } from './public-types.js';
11
+ export declare function normalizeLayerOrder(canvas: FabricNS.Canvas): void;
12
+ export declare function placeBaseImageObject(canvas: FabricNS.Canvas, image: BaseImageObject): void;
13
+ export declare function placeMaskObject(canvas: FabricNS.Canvas, mask: MaskObject): void;
14
+ export declare function placeAnnotationObject(canvas: FabricNS.Canvas, annotation: AnnotationObject): void;
15
+ export declare function placeSessionObject(canvas: FabricNS.Canvas, sessionObject: SessionObject): void;
16
+ export declare function getEditableOverlayRange(canvas: FabricNS.Canvas): {
17
+ start: number;
18
+ end: number;
19
+ overlays: Array<MaskObject | AnnotationObject>;
20
+ };
21
+ //# sourceMappingURL=layer-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layer-order.d.ts","sourceRoot":"","sources":["../../../src/core/layer-order.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,KAAK,QAAQ,MAAM,QAAQ,CAAC;AAExC,OAAO,EAIH,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,aAAa,EACrB,MAAM,mBAAmB,CAAC;AA6E3B,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAYjE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAI1F;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAK/E;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAKjG;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,IAAI,CAG9F;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,KAAK,CAAC,UAAU,GAAG,gBAAgB,CAAC,CAAC;CAClD,CAWA"}
@@ -66,6 +66,7 @@ export declare class OperationGuard {
66
66
  private isLoadingActive;
67
67
  private currentOperationName;
68
68
  private currentOperationToken;
69
+ private readonly animationAborters;
69
70
  /**
70
71
  * Returns `true` while an animation block is open (between
71
72
  * {@link beginAnimation} and {@link endAnimation}).
@@ -117,6 +118,7 @@ export declare class OperationGuard {
117
118
  * Idempotent: calling twice is a no-op.
118
119
  */
119
120
  markDisposed(): void;
121
+ registerAnimationAborter(abort: () => void): () => void;
120
122
  /**
121
123
  * Mark a transactional image load as active.
122
124
  */
@@ -1 +1 @@
1
- {"version":3,"file":"operation-guard.d.ts","sourceRoot":"","sources":["../../../src/core/operation-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC3B,0EAA0E;IAC1E,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC;;;;;;;;GAQG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,qBAAqB,CAA+B;IAE5D;;;;;;OAMG;IACH,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,MAAM,IAAI,OAAO;IAMjB;;;;;;;OAOG;IACH,cAAc,IAAI,IAAI;IAItB;;;;OAIG;IACH,YAAY,IAAI,IAAI;IAIpB;;;;;;;;;OASG;IACH,YAAY,IAAI,IAAI;IAQpB;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;;OAGG;IACH,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc;IAOzD;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;IAOhE;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAIjE;;;;;;;;;;;;;;;;OAgBG;IACG,YAAY,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IASlE;;;;;;;;;;;;;;;;;;OAkBG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAQhD;;;;OAIG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI;IAuBnF;;;;OAIG;IACH,uBAAuB,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI;CAiBvF"}
1
+ {"version":3,"file":"operation-guard.d.ts","sourceRoot":"","sources":["../../../src/core/operation-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC3B,0EAA0E;IAC1E,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC;;;;;;;;GAQG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,qBAAqB,CAA+B;IAC5D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyB;IAE3D;;;;;;OAMG;IACH,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,MAAM,IAAI,OAAO;IAMjB;;;;;;;OAOG;IACH,cAAc,IAAI,IAAI;IAItB;;;;OAIG;IACH,YAAY,IAAI,IAAI;IAIpB;;;;;;;;;OASG;IACH,YAAY,IAAI,IAAI;IAgBpB,wBAAwB,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAgBvD;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;;OAGG;IACH,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc;IAOzD;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;IAOhE;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAIjE;;;;;;;;;;;;;;;;OAgBG;IACG,YAAY,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IASlE;;;;;;;;;;;;;;;;;;OAkBG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAQhD;;;;OAIG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI;IAuBnF;;;;OAIG;IACH,uBAAuB,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI;CAiBvF"}