@bensitu/image-editor 2.1.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 (113) hide show
  1. package/README.md +235 -81
  2. package/dist/cjs/index.cjs +2969 -747
  3. package/dist/cjs/index.cjs.map +1 -1
  4. package/dist/esm/annotation/annotation-lock.js +7 -0
  5. package/dist/esm/annotation/annotation-lock.js.map +1 -0
  6. package/dist/esm/annotation/annotation-manager.js +217 -0
  7. package/dist/esm/annotation/annotation-manager.js.map +1 -0
  8. package/dist/esm/annotation/annotation-style.js +50 -0
  9. package/dist/esm/annotation/annotation-style.js.map +1 -0
  10. package/dist/esm/annotation/draw-controller.js +114 -0
  11. package/dist/esm/annotation/draw-controller.js.map +1 -0
  12. package/dist/esm/annotation/text-controller.js +234 -0
  13. package/dist/esm/annotation/text-controller.js.map +1 -0
  14. package/dist/esm/core/default-options.js +232 -3
  15. package/dist/esm/core/default-options.js.map +1 -1
  16. package/dist/esm/core/editor-object-kind.js +37 -0
  17. package/dist/esm/core/editor-object-kind.js.map +1 -0
  18. package/dist/esm/core/errors.js +19 -0
  19. package/dist/esm/core/errors.js.map +1 -1
  20. package/dist/esm/core/layer-order.js +100 -0
  21. package/dist/esm/core/layer-order.js.map +1 -0
  22. package/dist/esm/core/public-types.js +34 -1
  23. package/dist/esm/core/public-types.js.map +1 -1
  24. package/dist/esm/core/state-serializer.js +104 -24
  25. package/dist/esm/core/state-serializer.js.map +1 -1
  26. package/dist/esm/crop/crop-controller.js +2 -0
  27. package/dist/esm/crop/crop-controller.js.map +1 -1
  28. package/dist/esm/export/export-format.js.map +1 -1
  29. package/dist/esm/export/export-service.js +123 -135
  30. package/dist/esm/export/export-service.js.map +1 -1
  31. package/dist/esm/export/overlay-merge-service.js +75 -0
  32. package/dist/esm/export/overlay-merge-service.js.map +1 -0
  33. package/dist/esm/history/history-manager.js +2 -2
  34. package/dist/esm/history/history-manager.js.map +1 -1
  35. package/dist/esm/image/image-loader.js +18 -49
  36. package/dist/esm/image/image-loader.js.map +1 -1
  37. package/dist/esm/image/transform-controller.js.map +1 -1
  38. package/dist/esm/image-editor.js +1063 -60
  39. package/dist/esm/image-editor.js.map +1 -1
  40. package/dist/esm/index.js +1 -1
  41. package/dist/esm/index.js.map +1 -1
  42. package/dist/esm/mask/mask-factory.js +39 -14
  43. package/dist/esm/mask/mask-factory.js.map +1 -1
  44. package/dist/esm/mask/mask-label-manager.js +2 -0
  45. package/dist/esm/mask/mask-label-manager.js.map +1 -1
  46. package/dist/esm/mask/mask-list.js.map +1 -1
  47. package/dist/esm/mask/mask-style.js.map +1 -1
  48. package/dist/esm/mosaic/mosaic-controller.js +24 -28
  49. package/dist/esm/mosaic/mosaic-controller.js.map +1 -1
  50. package/dist/esm/utils/image-element-loader.js +55 -0
  51. package/dist/esm/utils/image-element-loader.js.map +1 -0
  52. package/dist/esm/utils/pointer.js +28 -0
  53. package/dist/esm/utils/pointer.js.map +1 -0
  54. package/dist/types/annotation/annotation-lock.d.ts +12 -0
  55. package/dist/types/annotation/annotation-lock.d.ts.map +1 -0
  56. package/dist/types/annotation/annotation-manager.d.ts +33 -0
  57. package/dist/types/annotation/annotation-manager.d.ts.map +1 -0
  58. package/dist/types/annotation/annotation-style.d.ts +13 -0
  59. package/dist/types/annotation/annotation-style.d.ts.map +1 -0
  60. package/dist/types/annotation/draw-controller.d.ts +43 -0
  61. package/dist/types/annotation/draw-controller.d.ts.map +1 -0
  62. package/dist/types/annotation/text-controller.d.ts +47 -0
  63. package/dist/types/annotation/text-controller.d.ts.map +1 -0
  64. package/dist/types/core/default-options.d.ts +14 -2
  65. package/dist/types/core/default-options.d.ts.map +1 -1
  66. package/dist/types/core/editor-object-kind.d.ts +29 -0
  67. package/dist/types/core/editor-object-kind.d.ts.map +1 -0
  68. package/dist/types/core/errors.d.ts +11 -1
  69. package/dist/types/core/errors.d.ts.map +1 -1
  70. package/dist/types/core/layer-order.d.ts +21 -0
  71. package/dist/types/core/layer-order.d.ts.map +1 -0
  72. package/dist/types/core/public-types.d.ts +222 -24
  73. package/dist/types/core/public-types.d.ts.map +1 -1
  74. package/dist/types/core/state-serializer.d.ts +30 -5
  75. package/dist/types/core/state-serializer.d.ts.map +1 -1
  76. package/dist/types/crop/crop-controller.d.ts +6 -7
  77. package/dist/types/crop/crop-controller.d.ts.map +1 -1
  78. package/dist/types/export/export-format.d.ts +5 -33
  79. package/dist/types/export/export-format.d.ts.map +1 -1
  80. package/dist/types/export/export-service.d.ts +24 -15
  81. package/dist/types/export/export-service.d.ts.map +1 -1
  82. package/dist/types/export/overlay-merge-service.d.ts +38 -0
  83. package/dist/types/export/overlay-merge-service.d.ts.map +1 -0
  84. package/dist/types/history/history-manager.d.ts +11 -14
  85. package/dist/types/history/history-manager.d.ts.map +1 -1
  86. package/dist/types/image/image-loader.d.ts +22 -17
  87. package/dist/types/image/image-loader.d.ts.map +1 -1
  88. package/dist/types/image/image-resampler.d.ts +1 -1
  89. package/dist/types/image/transform-controller.d.ts +5 -7
  90. package/dist/types/image/transform-controller.d.ts.map +1 -1
  91. package/dist/types/image-editor.d.ts +75 -7
  92. package/dist/types/image-editor.d.ts.map +1 -1
  93. package/dist/types/index.d.cts +3 -3
  94. package/dist/types/index.d.cts.map +1 -1
  95. package/dist/types/index.d.ts +3 -3
  96. package/dist/types/index.d.ts.map +1 -1
  97. package/dist/types/mask/mask-factory.d.ts.map +1 -1
  98. package/dist/types/mask/mask-label-manager.d.ts +10 -9
  99. package/dist/types/mask/mask-label-manager.d.ts.map +1 -1
  100. package/dist/types/mask/mask-list.d.ts +11 -12
  101. package/dist/types/mask/mask-list.d.ts.map +1 -1
  102. package/dist/types/mask/mask-style.d.ts +19 -20
  103. package/dist/types/mask/mask-style.d.ts.map +1 -1
  104. package/dist/types/mosaic/mosaic-controller.d.ts +3 -3
  105. package/dist/types/mosaic/mosaic-controller.d.ts.map +1 -1
  106. package/dist/types/ui/visibility-state.d.ts +2 -2
  107. package/dist/types/utils/image-element-loader.d.ts +19 -0
  108. package/dist/types/utils/image-element-loader.d.ts.map +1 -0
  109. package/dist/types/utils/pointer.d.ts +16 -0
  110. package/dist/types/utils/pointer.d.ts.map +1 -0
  111. package/dist/umd/image-editor.umd.js +1 -1
  112. package/dist/umd/image-editor.umd.js.map +1 -1
  113. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"state-serializer.d.ts","sourceRoot":"","sources":["../../../src/core/state-serializer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-serializer.d.ts","sourceRoot":"","sources":["../../../src/core/state-serializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,KAAK,KAAK,QAAQ,MAAM,QAAQ,CAAC;AAExC,OAAO,KAAK,EACR,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,UAAU,EACb,MAAM,mBAAmB,CAAC;AAM3B;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC7B,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sCAAsC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iCAAiC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,8CAA8C;IAC9C,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kEAAkE;IAClE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qEAAqE;IACrE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC5B,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,eAAe,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5C,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC;IAChD,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACvB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,iCAAiC;IACjC,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,gEAAgE;IAChE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,yZAyBvB,CAAC;AA8GX;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC3B,kCAAkC;IAClC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACxB,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,2FAA2F;IAC3F,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAC;IACrB,wFAAwF;IACxF,eAAe,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,cAAc,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,oBAAoB,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;CAC/C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAgEvD;AAID;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAC/B,yCAAyC;IACzC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACxB;;;;;;;OAOG;IACH,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC;;;OAGG;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAChC;;;;;OAKG;IACH,WAAW,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,aAAa,EAAE,eAAe,GAAG,IAAI,CAAC;IACtC;;;;OAIG;IACH,OAAO,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC;IACjC,6BAA6B;IAC7B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,mCAAmC;IACnC,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAmG3F"}
@@ -2,7 +2,7 @@
2
2
  * Crop session lifecycle owner. Implements the
3
3
  * `enterCropMode → applyCrop` and
4
4
  * `enterCropMode → cancelCrop` transitions atop the
5
- * legacy crop pipeline, plus the dedicated crop rectangle
5
+ * crop export/load pipeline, plus the dedicated crop rectangle
6
6
  * shape, its drag/scale clamps, and the per-object
7
7
  * `evented`/`selectable` freeze that keeps only the crop
8
8
  * rectangle interactive while a session is open.
@@ -66,10 +66,9 @@
66
66
  * `left` and `top` shifted by `-cropRegion.left, -cropRegion.top`.
67
67
  * Per-mask `angle`, `scaleX`, and `scaleY` are restored verbatim so
68
68
  * the visible mask shape does not change size or orientation. The
69
- * cropRegion-relative shift matches legacy's
69
+ * cropRegion-relative shift preserves the historical
70
70
  * `_translateObjectByCanvasOffset(mask, -cropRegion.sourceX,
71
- * -cropRegion.sourceY)` and is the documented legacy behavior to
72
- * preserve. Because shifting `left` / `top` by a constant translates
71
+ * -cropRegion.sourceY)` behavior. Because shifting `left` / `top` by a constant translates
73
72
  * the entire object (including its rotated visual) by the same
74
73
  * constant in canvas pixels, the post-crop position relative to the
75
74
  * new image bounding box matches the pre-crop position relative to
@@ -87,7 +86,7 @@
87
86
  * before export and re-adds the masks shifted by
88
87
  * `-cropRegion.left, -cropRegion.top` after
89
88
  * `context.loadImage(croppedBase64)` commits. The intersection filter
90
- * drops masks that do not overlap the crop region, matching legacy
89
+ * drops masks that do not overlap the crop region, matching the documented
91
90
  * observable behavior: masks fully outside the cropped region are
92
91
  * removed, while intersecting masks are preserved.
93
92
  *
@@ -97,7 +96,7 @@
97
96
  * {@link CropControllerContext}. The `ImageEditor` facade keeps
98
97
  * ownership of the canonical session pointer (`getCropSession` /
99
98
  * `setCropSession`) so multiple editors on the same page do not share
100
- * crop state and a sub-agent unit test can exercise the controller
99
+ * crop state and unit tests can exercise the controller
101
100
  * without instantiating the full facade.
102
101
  * - The crop rectangle's drag/scale handlers clamp `scaleX` / `scaleY`
103
102
  * so the rect cannot grow past the available image bounding box and
@@ -111,7 +110,7 @@
111
110
  * - The pre-crop snapshot is captured once, in `enterCropMode`, and
112
111
  * reused by `applyCrop`'s history command and rollback path. This
113
112
  * avoids a re-serialization right before the crop, and — more
114
- * importantly — avoids the legacy fragility of filtering `isCropRect`
113
+ * importantly — avoids the historical fragility of filtering `isCropRect`
115
114
  * objects out of a post-rect snapshot when Fabric's custom-key
116
115
  * serializer occasionally drops the marker.
117
116
  *
@@ -1 +1 @@
1
- {"version":3,"file":"crop-controller.d.ts","sourceRoot":"","sources":["../../../src/crop/crop-controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0HG;AAEH,OAAO,KAAK,KAAK,QAAQ,MAAM,QAAQ,CAAC;AAGxC,OAAO,KAAK,EACR,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,UAAU,EAGV,eAAe,EAClB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAW,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAoB7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,WAAW,WAAW;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,8EAA8E;IAC9E,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,QAAQ,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,WAAW,EAAE,CAAC;CAC3B;AAID;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,qBAAqB;IAClC,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,0BAA0B;IAC1B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACjC;;yEAEqE;IACrE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,uEAAuE;IACvE,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAExC;;;;;;OAMG;IACH,aAAa,IAAI,OAAO,CAAC;IAEzB;;;;OAIG;IACH,gBAAgB,IAAI,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;IAEhD;;;OAGG;IACH,uBAAuB,CAAC,IAAI,aAAa,GAAG,IAAI,CAAC;IAEjD,8CAA8C;IAC9C,cAAc,IAAI,WAAW,GAAG,IAAI,CAAC;IACrC,uEAAuE;IACvE,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;IAElD;;;;;OAKG;IACH,SAAS,IAAI,MAAM,CAAC;IAEpB;;;;OAIG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;;;OAIG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E;;;;;;;;;;OAUG;IACH,cAAc,CAAC,IAAI,MAAM,CAAC;IAE1B;;;OAGG;IACH,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC;;;;;OAKG;IACH,cAAc,CAAC,IAAI,IAAI,CAAC;CAC3B;AA4bD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAyLlE;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAiB/D;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkFG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoJ7E"}
1
+ {"version":3,"file":"crop-controller.d.ts","sourceRoot":"","sources":["../../../src/crop/crop-controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyHG;AAEH,OAAO,KAAK,KAAK,QAAQ,MAAM,QAAQ,CAAC;AAIxC,OAAO,KAAK,EACR,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,UAAU,EAGV,eAAe,EAClB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAW,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAoB7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,WAAW,WAAW;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,8EAA8E;IAC9E,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,QAAQ,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,WAAW,EAAE,CAAC;CAC3B;AAID;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,qBAAqB;IAClC,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,0BAA0B;IAC1B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACjC;;yEAEqE;IACrE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,uEAAuE;IACvE,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAExC;;;;;;OAMG;IACH,aAAa,IAAI,OAAO,CAAC;IAEzB;;;;OAIG;IACH,gBAAgB,IAAI,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;IAEhD;;;OAGG;IACH,uBAAuB,CAAC,IAAI,aAAa,GAAG,IAAI,CAAC;IAEjD,8CAA8C;IAC9C,cAAc,IAAI,WAAW,GAAG,IAAI,CAAC;IACrC,uEAAuE;IACvE,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;IAElD;;;;;OAKG;IACH,SAAS,IAAI,MAAM,CAAC;IAEpB;;;;OAIG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;;;OAIG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E;;;;;;;;;;OAUG;IACH,cAAc,CAAC,IAAI,MAAM,CAAC;IAE1B;;;OAGG;IACH,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC;;;;;OAKG;IACH,cAAc,CAAC,IAAI,IAAI,CAAC;CAC3B;AA4bD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CA0LlE;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAiB/D;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkFG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoJ7E"}
@@ -1,37 +1,9 @@
1
1
  /**
2
- * Pure helpers that normalize the user-facing
3
- * `Base64ExportOptions` / `ImageFileExportOptions` surface into the
4
- * canvas-/Fabric-shaped values consumed by `export/export-service.ts`.
5
- *
6
- * The module owns three small, individually testable building blocks plus
7
- * one orchestrating function, mirroring the shape of
8
- * `image/image-resampler.ts`:
9
- *
10
- * - {@link normalizeImageFormat} — collapses `'jpg'` to `'jpeg'`, strips
11
- * the `image/` MIME prefix, and falls back to `'jpeg'` for unknown or
12
- * omitted input.
13
- * - {@link mimeTypeFor} — derives the matching `image/...` MIME
14
- * for a normalized format token.
15
- * - {@link clampQuality} — coerces input to a finite number and
16
- * clamps it into `[0, 1]`, falling back to a caller-supplied default
17
- * when the input is not finite.
18
- * - {@link resolveExportFormat} — composes the above with the documented
19
- * `fileType`-wins-over-`format` precedence and drops `quality` for PNG
20
- * output.
21
- *
22
- * legacy parity:
23
- * - The format mapping table mirrors `_normalizeImageFormat` from
24
- * `src/image-editor.js@legacy.4.0`, including the lowercase lookup and the
25
- * `'jpeg'` default for unknown input.
26
- * - The quality clamp mirrors `_normalizeQuality` from the same legacy file:
27
- * non-finite input falls back to `options.downsampleQuality`, finite
28
- * input is clamped to `[0, 1]`.
29
- *
30
- * This module is internal — it is NOT re-exported from `src/index.ts`.
31
- *
32
- * Fabric.
33
- * lossless.
34
- * `quality` defaulting to `options.downsampleQuality`.
2
+ * Export format normalization helpers.
3
+ *
4
+ * Converts public `Base64ExportOptions` and `ImageFileExportOptions` values
5
+ * into the normalized format, MIME type, and quality values consumed by
6
+ * `export/export-service.ts`.
35
7
  *
36
8
  * @module
37
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"export-format.d.ts","sourceRoot":"","sources":["../../../src/export/export-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EACR,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACb,qBAAqB,EACxB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACjC,8CAA8C;IAC9C,MAAM,EAAE,qBAAqB,CAAC;IAC9B,gEAAgE;IAChE,QAAQ,EAAE,aAAa,CAAC;IACxB,yDAAyD;IACzD,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AA+BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,qBAAqB,CAEjF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,qBAAqB,GAAG,IAAI,CAS3F;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,qBAAqB,GAAG,aAAa,CAExE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIvE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,mBAAmB,CAC/B,OAAO,EACD,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC,GAC5D,IAAI,CAAC,sBAAsB,EAAE,UAAU,GAAG,SAAS,CAAC,GACpD,SAAS,GACT,IAAI,EACV,iBAAiB,EAAE,MAAM,GAC1B,oBAAoB,CA8BtB"}
1
+ {"version":3,"file":"export-format.d.ts","sourceRoot":"","sources":["../../../src/export/export-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACR,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACb,qBAAqB,EACxB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACjC,8CAA8C;IAC9C,MAAM,EAAE,qBAAqB,CAAC;IAC9B,gEAAgE;IAChE,QAAQ,EAAE,aAAa,CAAC;IACxB,yDAAyD;IACzD,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AA+BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,qBAAqB,CAEjF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,qBAAqB,GAAG,IAAI,CAS3F;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,qBAAqB,GAAG,aAAa,CAExE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIvE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,mBAAmB,CAC/B,OAAO,EACD,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC,GAC5D,IAAI,CAAC,sBAAsB,EAAE,UAAU,GAAG,SAAS,CAAC,GACpD,SAAS,GACT,IAAI,EACV,iBAAiB,EAAE,MAAM,GAC1B,oBAAoB,CA8BtB"}
@@ -21,7 +21,7 @@
21
21
  * - `exportImageFile(options?: ImageFileExportOptions)`
22
22
  * resolves to a `File` whose name comes from `options.fileName` or the
23
23
  * editor's `defaultDownloadFileName`.
24
- * - `downloadImage(fileName?: string)` triggers a
24
+ * - `downloadImage(options?: DownloadImageOptions | string)` triggers a
25
25
  * browser download with the resolved filename. The bytes match the same
26
26
  * pipeline used by `exportImageBase64`.
27
27
  * - When `isImageLoaded` is `false`, the three
@@ -42,7 +42,7 @@
42
42
  * No intermediate `<canvas>` element is created, and sub-pixel
43
43
  * width/height values are floored to integer pixels through the
44
44
  * {@link floorRegion} helper before Fabric receives the region.
45
- * - When `mergeMask` is
45
+ * - When `mergeMasks` is
46
46
  * `true`, every mask's live style (`opacity`, `fill`, `stroke`,
47
47
  * `strokeWidth`, `selectable`, `lockRotation`) is captured BEFORE the
48
48
  * mutator forces the bake-in style (`opacity: 1, fill: '#000',
@@ -91,8 +91,9 @@
91
91
  * @module
92
92
  */
93
93
  import type * as FabricNS from 'fabric';
94
- import type { Base64ExportOptions, FabricModule, ImageFileExportOptions, LoadImageOptions, ResolvedOptions } from '../core/public-types.js';
95
- import { type HistoryManager } from '../history/history-manager.js';
94
+ import type { Base64ExportOptions, DownloadImageOptions, FabricModule, ImageFileExportOptions, LoadImageOptions, AnnotationObject, MaskObject, ResolvedOptions } from '../core/public-types.js';
95
+ import type { HistoryManager } from '../history/history-manager.js';
96
+ import { type OverlayMergeTransactionContext } from './overlay-merge-service.js';
96
97
  /**
97
98
  * Dependency bundle passed by the `ImageEditor` facade into every export
98
99
  * entry point. The service has no class state of its own — every editor
@@ -150,7 +151,7 @@ export interface ExportServiceContext {
150
151
  * 6. **Render** through {@link withMaskExportState} so mask styles are
151
152
  * captured, the export bake-in (`opacity: 1, fill: '#000',
152
153
  * strokeWidth: 0, stroke: null, selectable: false`) is applied for
153
- * `mergeMask === true` exports, and the live styles are
154
+ * `mergeMasks === true` exports, and the live styles are
154
155
  * restored in a `finally` block whether the render resolved or
155
156
  * threw. The inner step is a single
156
157
  * `canvas.toDataURL` call — no intermediate `<canvas>`.
@@ -199,11 +200,12 @@ export declare function exportImageFile(context: ExportServiceContext, options?:
199
200
  * `void` and there is no caller-visible promise to reject.
200
201
  *
201
202
  * @param context - Export context bundle.
202
- * @param fileName - Optional filename override. Defaults to
203
- * `options.defaultDownloadFileName`.
203
+ * @param options - Optional filename or {@link DownloadImageOptions}.
204
+ * String input is treated as a filename for backwards
205
+ * compatibility.
204
206
  *
205
207
  */
206
- export declare function downloadImage(context: ExportServiceContext, fileName?: string): void;
208
+ export declare function downloadImage(context: ExportServiceContext, options?: DownloadImageOptions | string): void;
207
209
  /**
208
210
  * Dependency bundle passed by the `ImageEditor` facade into
209
211
  * {@link mergeMasks}. Extends {@link ExportServiceContext} with the
@@ -229,7 +231,7 @@ export declare function downloadImage(context: ExportServiceContext, fileName?:
229
231
  * this bundle from its own state.
230
232
  *
231
233
  */
232
- export interface MergeMasksContext extends ExportServiceContext {
234
+ export interface MergeMasksContext extends ExportServiceContext, OverlayMergeTransactionContext {
233
235
  /** History manager that records the single merge command. */
234
236
  readonly historyManager: HistoryManager;
235
237
  /**
@@ -246,12 +248,6 @@ export interface MergeMasksContext extends ExportServiceContext {
246
248
  * the success path.
247
249
  */
248
250
  loadImage(imageBase64: string, options?: LoadImageOptions): Promise<void>;
249
- /**
250
- * Capture a snapshot suitable for {@link loadFromStateFn}. Reads the
251
- * orchestrator's `lastSnapshot`-producing path so the merge stores
252
- * exactly the same wire format used by `undo` / `redo`.
253
- */
254
- saveState(): string;
255
251
  /**
256
252
  * Restore a snapshot produced by {@link saveStateFn}. Used both as
257
253
  * the `undo` callback of the merge command and
@@ -265,6 +261,18 @@ export interface MergeMasksContext extends ExportServiceContext {
265
261
  * of its own history push.
266
262
  */
267
263
  removeAllMasksNoHistory(): void;
264
+ getAnnotations(): AnnotationObject[];
265
+ restoreAnnotations(objects: AnnotationObject[]): void | Promise<void>;
266
+ }
267
+ export interface MergeAnnotationsContext extends ExportServiceContext, OverlayMergeTransactionContext {
268
+ readonly historyManager: HistoryManager;
269
+ readonly containerElement: HTMLElement | null;
270
+ loadImage(imageBase64: string, options?: LoadImageOptions): Promise<void>;
271
+ captureSnapshot(): string;
272
+ loadFromState(snapshot: string): Promise<void>;
273
+ removeAllAnnotationsNoHistory(): void;
274
+ getMasks(): MaskObject[];
275
+ restoreMasks(objects: MaskObject[]): void | Promise<void>;
268
276
  }
269
277
  /**
270
278
  * Flatten every mask into the base image and reload the flattened
@@ -330,4 +338,5 @@ export interface MergeMasksContext extends ExportServiceContext {
330
338
  *
331
339
  */
332
340
  export declare function mergeMasks(context: MergeMasksContext): Promise<void>;
341
+ export declare function mergeAnnotations(context: MergeAnnotationsContext): Promise<void>;
333
342
  //# sourceMappingURL=export-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"export-service.d.ts","sourceRoot":"","sources":["../../../src/export/export-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2FG;AAEH,OAAO,KAAK,KAAK,QAAQ,MAAM,QAAQ,CAAC;AAIxC,OAAO,KAAK,EACR,mBAAmB,EAEnB,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAGhB,eAAe,EAClB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAW,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAsC7E;;;;;;;;;;GAUG;AACH,MAAM,WAAW,oBAAoB;IACjC,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACjC;;iCAE6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAElC;;;;OAIG;IACH,aAAa,IAAI,OAAO,CAAC;IAEzB;;;;;;OAMG;IACH,gBAAgB,IAAI,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;CACnD;AAsqBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,iBAAiB,CACnC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,CAAC,EAAE,mBAAmB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAiDjB;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CACjC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,CAAC,EAAE,sBAAsB,GACjC,OAAO,CAAC,IAAI,CAAC,CAsCf;AAID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAmCpF;AAID;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,iBAAkB,SAAQ,oBAAoB;IAC3D,6DAA6D;IAC7D,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,EAAE,WAAW,GAAG,IAAI,CAAC;IAE9C;;;;;OAKG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E;;;;OAIG;IACH,SAAS,IAAI,MAAM,CAAC;IAEpB;;;;OAIG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;;;;OAKG;IACH,uBAAuB,IAAI,IAAI,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyH1E"}
1
+ {"version":3,"file":"export-service.d.ts","sourceRoot":"","sources":["../../../src/export/export-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Shared transaction service for baking editable overlays into the base image.
3
+ *
4
+ * Mask and annotation merges use the same snapshot, export, reload, restore,
5
+ * history, and rollback flow while preserving the opposite overlay group.
6
+ *
7
+ * @module
8
+ */
9
+ import type * as FabricNS from 'fabric';
10
+ import type { AnnotationObject, Base64ExportOptions, LoadImageOptions, MaskObject, ResolvedOptions } from '../core/public-types.js';
11
+ import { type HistoryManager } from '../history/history-manager.js';
12
+ export type OverlayMergeOperation = 'mergeMasks' | 'mergeAnnotations';
13
+ export interface OverlayMergeTransactionContext {
14
+ readonly canvas: FabricNS.Canvas;
15
+ readonly options: ResolvedOptions;
16
+ readonly historyManager: HistoryManager;
17
+ readonly containerElement: HTMLElement | null;
18
+ isImageLoaded(): boolean;
19
+ captureSnapshot(): string;
20
+ loadFromState(snapshot: string): Promise<void>;
21
+ loadImage(imageBase64: string, options?: LoadImageOptions): Promise<void>;
22
+ exportImageBase64(options: Base64ExportOptions): Promise<string>;
23
+ updateUi(): void;
24
+ updateInputs(): void;
25
+ }
26
+ export interface OverlayMergeGroupOptions<TTarget extends FabricNS.FabricObject, TPreserved extends FabricNS.FabricObject> {
27
+ operation: OverlayMergeOperation;
28
+ exportOptions: Base64ExportOptions & {
29
+ exportArea: 'image';
30
+ fileType: 'png';
31
+ };
32
+ getTargets(): TTarget[];
33
+ getPreservedObjects(): TPreserved[];
34
+ removeTargetsNoHistory(): void;
35
+ restorePreservedObjects(objects: TPreserved[]): void | Promise<void>;
36
+ }
37
+ export declare function flattenOverlayGroupToBaseImage<TTarget extends MaskObject | AnnotationObject, TPreserved extends MaskObject | AnnotationObject>(context: OverlayMergeTransactionContext, options: OverlayMergeGroupOptions<TTarget, TPreserved>): Promise<void>;
38
+ //# sourceMappingURL=overlay-merge-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay-merge-service.d.ts","sourceRoot":"","sources":["../../../src/export/overlay-merge-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,KAAK,QAAQ,MAAM,QAAQ,CAAC;AAIxC,OAAO,KAAK,EACR,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,UAAU,EACV,eAAe,EAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAW,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE7E,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,kBAAkB,CAAC;AAEtE,MAAM,WAAW,8BAA8B;IAC3C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,GAAG,IAAI,CAAC;IAC9C,aAAa,IAAI,OAAO,CAAC;IACzB,eAAe,IAAI,MAAM,CAAC;IAC1B,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,QAAQ,IAAI,IAAI,CAAC;IACjB,YAAY,IAAI,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB,CACrC,OAAO,SAAS,QAAQ,CAAC,YAAY,EACrC,UAAU,SAAS,QAAQ,CAAC,YAAY;IAExC,SAAS,EAAE,qBAAqB,CAAC;IACjC,aAAa,EAAE,mBAAmB,GAAG;QACjC,UAAU,EAAE,OAAO,CAAC;QACpB,QAAQ,EAAE,KAAK,CAAC;KACnB,CAAC;IACF,UAAU,IAAI,OAAO,EAAE,CAAC;IACxB,mBAAmB,IAAI,UAAU,EAAE,CAAC;IACpC,sBAAsB,IAAI,IAAI,CAAC;IAC/B,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AA0BD,wBAAsB,8BAA8B,CAChD,OAAO,SAAS,UAAU,GAAG,gBAAgB,EAC7C,UAAU,SAAS,UAAU,GAAG,gBAAgB,EAEhD,OAAO,EAAE,8BAA8B,EACvC,OAAO,EAAE,wBAAwB,CAAC,OAAO,EAAE,UAAU,CAAC,GACvD,OAAO,CAAC,IAAI,CAAC,CAuDf"}
@@ -4,11 +4,11 @@
4
4
  *
5
5
  * Behavior contract:
6
6
  *
7
- * • {@link HistoryManager.execute} and {@link HistoryManager.push} are
8
- * **synchronous** for the history-push step so callers can immediately
9
- * inspect {@link HistoryManager.canUndo} / {@link HistoryManager.canRedo}
10
- * on the next line (e.g. `updateUi` calls that immediately follow
11
- * `saveState`).
7
+ * • {@link HistoryManager.push} is **synchronous** for the history-push
8
+ * step so callers can immediately inspect {@link HistoryManager.canUndo} /
9
+ * {@link HistoryManager.canRedo} on the next line (e.g. `updateUi` calls
10
+ * that immediately follow `saveState`). {@link HistoryManager.execute}
11
+ * awaits the command before pushing it.
12
12
  *
13
13
  * • {@link HistoryManager.undo} and {@link HistoryManager.redo} are
14
14
  * **async** and protected by an internal `isProcessing` lock. Overlapping
@@ -50,7 +50,7 @@
50
50
  * await canvas.loadFromJSON(beforeJson);
51
51
  * },
52
52
  * );
53
- * historyManager.execute(cmd);
53
+ * await historyManager.execute(cmd);
54
54
  * ```
55
55
  */
56
56
  export declare class Command {
@@ -76,16 +76,13 @@ export declare class HistoryManager {
76
76
  */
77
77
  constructor(maxSize?: number);
78
78
  /**
79
- * Records a command on the history stack **and** fires its `execute`
80
- * (fire-and-forget).
79
+ * Awaits a command's `execute` closure and records it on the history stack
80
+ * only after the closure succeeds.
81
81
  *
82
- * The history push is synchronous so that {@link canUndo} /
83
- * {@link canRedo} reflect the new state on the next line. In the
84
- * `saveState` pattern, `command.execute` is a no-op on its first
85
- * invocation (guarded by an `executedOnce` flag inside the closure), so
86
- * the fire-and-forget is safe and produces no canvas side-effect.
82
+ * Use {@link push} when the operation has already been performed and
83
+ * should become undoable synchronously.
87
84
  */
88
- execute(command: Command): void;
85
+ execute(command: Command): Promise<void>;
89
86
  /**
90
87
  * Pushes a command onto the history stack **without** calling
91
88
  * `execute`. Use this when the operation has already been performed
@@ -1 +1 @@
1
- {"version":3,"file":"history-manager.d.ts","sourceRoot":"","sources":["../../../src/history/history-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,OAAO;IAChB,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;gBAEvB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;CAItE;AAED;;;GAGG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,YAAY,CAAS;IAE7B,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;OAGG;gBACS,OAAO,GAAE,MAAW;IAIhC;;;;;;;;;OASG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAQ/B;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI5B,8DAA8D;IAC9D,OAAO,IAAI,OAAO;IAIlB,8DAA8D;IAC9D,OAAO,IAAI,OAAO;IAIlB;;;;;;;;;OASG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B;;;;;;OAMG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;CAgBtB"}
1
+ {"version":3,"file":"history-manager.d.ts","sourceRoot":"","sources":["../../../src/history/history-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,OAAO;IAChB,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;gBAEvB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;CAItE;AAED;;;GAGG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,YAAY,CAAS;IAE7B,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;;OAGG;gBACS,OAAO,GAAE,MAAW;IAIhC;;;;;;OAMG;IACG,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI5B,8DAA8D;IAC9D,OAAO,IAAI,OAAO;IAIlB,8DAA8D;IAC9D,OAAO,IAAI,OAAO;IAIlB;;;;;;;;;OASG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B;;;;;;OAMG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;CAgBtB"}
@@ -34,7 +34,7 @@
34
34
  * original error.
35
35
  * - On success, `isImageLoadedToCanvas` is set to
36
36
  * `true`, `lastSnapshot` is replaced with a fresh snapshot derived from
37
- * the new canvas, and `maskCounter` is reset to `0`.
37
+ * the new canvas, and both overlay counters are reset to `0`.
38
38
  * - Either the new image is committed fully, or the
39
39
  * prior committed state is restored fully. No partial state is observable
40
40
  * after the returned promise settles.
@@ -47,7 +47,7 @@
47
47
  * - The 2D-context failure inside
48
48
  * {@link resampleImage} surfaces as {@link DownsampleError}; the loader
49
49
  * catches it and routes through the rollback path.
50
- * - On success, `maskCounter` is reset to `0`.
50
+ * - On success, `maskCounter` and `annotationCounter` are reset to `0`.
51
51
  *
52
52
  * ## Implementation notes
53
53
  *
@@ -56,15 +56,14 @@
56
56
  * facade owns all editor state (the canvas reference, the placeholder
57
57
  * element, the editor scalar fields), so the loader must read and write
58
58
  * that state through a small set of getter/setter callbacks. The class
59
- * shape of legacy was a side effect of the monolith; current keeps the loader
60
- * stateless so the rollback bundle is the single source of truth for what
61
- * the operation has captured.
59
+ * shape stays on the facade; the loader remains stateless so the rollback
60
+ * bundle is the single source of truth for what the operation has captured.
62
61
  *
63
62
  * The rollback bundle is built before the loader hides the placeholder or
64
63
  * touches the canvas. It captures *every* field listed in the documented
65
64
  * RollbackBundle definition plus the editor scalar fields
66
- * (`isImageLoadedToCanvas`, `maskCounter`, `currentScale`,
67
- * `currentRotation`, `baseImageScale`) the success path mutates. Restoring
65
+ * (`isImageLoadedToCanvas`, `maskCounter`, `annotationCounter`,
66
+ * `currentScale`, `currentRotation`, `baseImageScale`) the success path mutates. Restoring
68
67
  * those scalars is required for atomic rollback — without them, a failed
69
68
  * load that ran past the scalar reset would leave the editor with
70
69
  * `currentScale = 1` and `currentRotation = 0` even though
@@ -76,7 +75,7 @@
76
75
  * `loadOptions.preserveScroll === true`; on rollback the bundle is replayed
77
76
  * unconditionally, which the rollback contract already requires for
78
77
  * transactional rewind. When `preserveScroll` is omitted or `false`, the
79
- * success path leaves the container scroll untouched, so legacy's documented
78
+ * success path leaves the container scroll untouched, so the documented
80
79
  * scroll/viewport behavior for the selected layout mode prevails.
81
80
  *
82
81
  * The loader does not invoke public success callbacks. It owns
@@ -93,7 +92,7 @@
93
92
  * @module
94
93
  */
95
94
  import type * as FabricNS from 'fabric';
96
- import type { FabricModule, ImageMimeType, LoadImageOptions, ResolvedOptions } from '../core/public-types.js';
95
+ import type { BaseImageObject, FabricModule, ImageMimeType, LoadImageOptions, ResolvedOptions } from '../core/public-types.js';
97
96
  import { type ViewportCache } from './layout-manager.js';
98
97
  /**
99
98
  * Snapshot of every field the loader is about to mutate, captured before
@@ -102,9 +101,9 @@ import { type ViewportCache } from './layout-manager.js';
102
101
  *
103
102
  * Mirrors the documented `RollbackBundle` definition with the addition of
104
103
  * the editor scalar fields the success path also rewrites
105
- * (`isImageLoadedToCanvas`, `maskCounter`, `currentScale`,
106
- * `currentRotation`, `baseImageScale`). Those scalars must be restored
107
- * together with the canvas JSON for atomic rewind.
104
+ * (`isImageLoadedToCanvas`, `maskCounter`, `annotationCounter`,
105
+ * `currentScale`, `currentRotation`, `baseImageScale`). Those scalars must
106
+ * be restored together with the canvas JSON for atomic rewind.
108
107
  *
109
108
  */
110
109
  export interface RollbackBundle {
@@ -115,7 +114,7 @@ export interface RollbackBundle {
115
114
  /** Container `scrollLeft` immediately before the loader started. */
116
115
  containerScrollLeft: number | null;
117
116
  /** The previously-committed `originalImage` reference, if any. */
118
- originalImage: FabricNS.FabricImage | null;
117
+ originalImage: BaseImageObject | null;
119
118
  /** Whether an image was already committed before this call. */
120
119
  isImageLoadedToCanvas: boolean;
121
120
  /** Snapshot string used as the history baseline before the call. */
@@ -127,6 +126,8 @@ export interface RollbackBundle {
127
126
  canvasJson: string;
128
127
  /** Mask counter value before the loader reset it to 0. */
129
128
  maskCounter: number;
129
+ /** Annotation counter value before the loader reset it to 0. */
130
+ annotationCounter: number;
130
131
  /** Image scale factor before the loader reset it to 1. */
131
132
  currentScale: number;
132
133
  /** Image rotation in degrees before the loader reset it to 0. */
@@ -166,9 +167,9 @@ export interface LoadImageContext {
166
167
  /** Hidden-container viewport cache shared with the layout manager. */
167
168
  viewportCache: ViewportCache;
168
169
  /** Reads the previously-committed `originalImage`. */
169
- getOriginalImage(): FabricNS.FabricImage | null;
170
+ getOriginalImage(): BaseImageObject | null;
170
171
  /** Writes `originalImage` (used both on commit and on rollback). */
171
- setOriginalImage(imageObject: FabricNS.FabricImage | null): void;
172
+ setOriginalImage(imageObject: BaseImageObject | null): void;
172
173
  /** Reads `isImageLoadedToCanvas`. */
173
174
  getIsImageLoadedToCanvas(): boolean;
174
175
  /** Writes `isImageLoadedToCanvas`. */
@@ -181,6 +182,10 @@ export interface LoadImageContext {
181
182
  getMaskCounter(): number;
182
183
  /** Writes `maskCounter`. */
183
184
  setMaskCounter(n: number): void;
185
+ /** Reads `annotationCounter`. */
186
+ getAnnotationCounter(): number;
187
+ /** Writes `annotationCounter`. */
188
+ setAnnotationCounter(n: number): void;
184
189
  /** Reads `currentScale`. */
185
190
  getCurrentScale(): number;
186
191
  /** Writes `currentScale`. */
@@ -226,8 +231,8 @@ export interface LoadImageContext {
226
231
  * 7. **Layout** — pick a strategy via {@link selectLayoutStrategy} and
227
232
  * apply via {@link applyCanvasDimensions}.
228
233
  * 8. **Commit** — set `isImageLoadedToCanvas`,
229
- * reset `maskCounter` to 0, reset transforms, and emit a fresh
230
- * `lastSnapshot` via {@link saveState}.
234
+ * reset both overlay counters to 0, reset transforms, and emit a
235
+ * fresh `lastSnapshot` via {@link saveState}.
231
236
  *
232
237
  * Any rejection between step 3 and step 8 routes through {@link replayRollback}
233
238
  * before re-throwing the original error. On the rollback
@@ -1 +1 @@
1
- {"version":3,"file":"image-loader.d.ts","sourceRoot":"","sources":["../../../src/image/image-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"image-loader.d.ts","sourceRoot":"","sources":["../../../src/image/image-loader.ts"],"names":[],"mappings":"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"}
@@ -117,7 +117,7 @@ export declare function detectSourceMimeType(dataUrl: string): string | null;
117
117
  *
118
118
  * Failure mode: when `<canvas>.getContext('2d')` returns
119
119
  * `null`, this function throws {@link DownsampleError} so
120
- * `image/image-loader.ts` can replay its Transactional_Load rollback bundle
120
+ * `image/image-loader.ts` can replay its rollback bundle
121
121
  * before rejecting the public `loadImage` promise.
122
122
  *
123
123
  * @param imageElement - Decoded source image element.
@@ -59,14 +59,12 @@
59
59
  *
60
60
  * ## Why a class with a context bundle?
61
61
  *
62
- * The legacy monolithic `ImageEditor` owned all transform state. This module keeps that
63
- * state on the facade so `currentScale`, `currentRotation`,
64
- * `baseImageScale`, and `shouldSuppressSaveState` remain on a single owner
65
- * (these are part of the snapshot wire format). The
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. Mirrors the same pattern used by
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
@@ -1 +1 @@
1
- {"version":3,"file":"transform-controller.d.ts","sourceRoot":"","sources":["../../../src/image/transform-controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2EG;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"}
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"}