@bensitu/image-editor 1.5.2 → 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 (166) hide show
  1. package/README.md +460 -509
  2. package/dist/cjs/index.cjs +6892 -0
  3. package/dist/cjs/index.cjs.map +1 -0
  4. package/dist/esm/animation/animation-queue.js +74 -0
  5. package/dist/esm/animation/animation-queue.js.map +1 -0
  6. package/dist/esm/core/callback-reporter.js +23 -0
  7. package/dist/esm/core/callback-reporter.js.map +1 -0
  8. package/dist/esm/core/default-options.js +529 -0
  9. package/dist/esm/core/default-options.js.map +1 -0
  10. package/dist/esm/core/errors.js +156 -0
  11. package/dist/esm/core/errors.js.map +1 -0
  12. package/dist/esm/core/operation-guard.js +157 -0
  13. package/dist/esm/core/operation-guard.js.map +1 -0
  14. package/dist/esm/core/public-types.js +4 -0
  15. package/dist/esm/core/public-types.js.map +1 -0
  16. package/dist/esm/core/state-serializer.js +252 -0
  17. package/dist/esm/core/state-serializer.js.map +1 -0
  18. package/dist/esm/crop/crop-controller.js +405 -0
  19. package/dist/esm/crop/crop-controller.js.map +1 -0
  20. package/dist/esm/export/export-format.js +53 -0
  21. package/dist/esm/export/export-format.js.map +1 -0
  22. package/dist/esm/export/export-service.js +607 -0
  23. package/dist/esm/export/export-service.js.map +1 -0
  24. package/dist/esm/fabric/fabric-adapter.js +37 -0
  25. package/dist/esm/fabric/fabric-adapter.js.map +1 -0
  26. package/dist/esm/fabric/fabric-animation.js +89 -0
  27. package/dist/esm/fabric/fabric-animation.js.map +1 -0
  28. package/dist/esm/history/command.js +2 -0
  29. package/dist/esm/history/command.js.map +1 -0
  30. package/dist/esm/history/history-manager.js +103 -0
  31. package/dist/esm/history/history-manager.js.map +1 -0
  32. package/dist/esm/image/image-loader.js +238 -0
  33. package/dist/esm/image/image-loader.js.map +1 -0
  34. package/dist/esm/image/image-resampler.js +60 -0
  35. package/dist/esm/image/image-resampler.js.map +1 -0
  36. package/dist/esm/image/layout-manager.js +206 -0
  37. package/dist/esm/image/layout-manager.js.map +1 -0
  38. package/dist/esm/image/transform-controller.js +132 -0
  39. package/dist/esm/image/transform-controller.js.map +1 -0
  40. package/dist/esm/image-editor.js +2076 -0
  41. package/dist/esm/image-editor.js.map +1 -0
  42. package/dist/esm/index.js +5 -0
  43. package/dist/esm/index.js.map +1 -0
  44. package/dist/esm/mask/mask-factory.js +356 -0
  45. package/dist/esm/mask/mask-factory.js.map +1 -0
  46. package/dist/esm/mask/mask-label-manager.js +120 -0
  47. package/dist/esm/mask/mask-label-manager.js.map +1 -0
  48. package/dist/esm/mask/mask-list.js +53 -0
  49. package/dist/esm/mask/mask-list.js.map +1 -0
  50. package/dist/esm/mask/mask-style.js +182 -0
  51. package/dist/esm/mask/mask-style.js.map +1 -0
  52. package/dist/esm/mosaic/mosaic-controller.js +670 -0
  53. package/dist/esm/mosaic/mosaic-controller.js.map +1 -0
  54. package/dist/esm/mosaic/mosaic-geometry.js +81 -0
  55. package/dist/esm/mosaic/mosaic-geometry.js.map +1 -0
  56. package/dist/esm/mosaic/mosaic-pixelate.js +71 -0
  57. package/dist/esm/mosaic/mosaic-pixelate.js.map +1 -0
  58. package/dist/esm/ui/dom-bindings.js +67 -0
  59. package/dist/esm/ui/dom-bindings.js.map +1 -0
  60. package/dist/esm/ui/ui-state.js +25 -0
  61. package/dist/esm/ui/ui-state.js.map +1 -0
  62. package/dist/esm/ui/visibility-state.js +11 -0
  63. package/dist/esm/ui/visibility-state.js.map +1 -0
  64. package/dist/esm/utils/canvas-region.js +100 -0
  65. package/dist/esm/utils/canvas-region.js.map +1 -0
  66. package/dist/esm/utils/dom.js +6 -0
  67. package/dist/esm/utils/dom.js.map +1 -0
  68. package/dist/esm/utils/file.js +53 -0
  69. package/dist/esm/utils/file.js.map +1 -0
  70. package/dist/esm/utils/number.js +24 -0
  71. package/dist/esm/utils/number.js.map +1 -0
  72. package/dist/esm/utils/timeout.js +17 -0
  73. package/dist/esm/utils/timeout.js.map +1 -0
  74. package/dist/types/animation/animation-queue.d.ts +111 -0
  75. package/dist/types/animation/animation-queue.d.ts.map +1 -0
  76. package/dist/types/core/callback-reporter.d.ts +125 -0
  77. package/dist/types/core/callback-reporter.d.ts.map +1 -0
  78. package/dist/types/core/default-options.d.ts +84 -0
  79. package/dist/types/core/default-options.d.ts.map +1 -0
  80. package/dist/types/core/errors.d.ts +142 -0
  81. package/dist/types/core/errors.d.ts.map +1 -0
  82. package/dist/types/core/operation-guard.d.ts +194 -0
  83. package/dist/types/core/operation-guard.d.ts.map +1 -0
  84. package/dist/types/core/public-types.d.ts +788 -0
  85. package/dist/types/core/public-types.d.ts.map +1 -0
  86. package/dist/types/core/state-serializer.d.ts +303 -0
  87. package/dist/types/core/state-serializer.d.ts.map +1 -0
  88. package/dist/types/crop/crop-controller.d.ts +407 -0
  89. package/dist/types/crop/crop-controller.d.ts.map +1 -0
  90. package/dist/types/export/export-format.d.ts +136 -0
  91. package/dist/types/export/export-format.d.ts.map +1 -0
  92. package/dist/types/export/export-service.d.ts +333 -0
  93. package/dist/types/export/export-service.d.ts.map +1 -0
  94. package/dist/types/fabric/fabric-adapter.d.ts +74 -0
  95. package/dist/types/fabric/fabric-adapter.d.ts.map +1 -0
  96. package/dist/types/fabric/fabric-animation.d.ts +141 -0
  97. package/dist/types/fabric/fabric-animation.d.ts.map +1 -0
  98. package/dist/types/history/command.d.ts +16 -0
  99. package/dist/types/history/command.d.ts.map +1 -0
  100. package/dist/types/history/history-manager.d.ts +129 -0
  101. package/dist/types/history/history-manager.d.ts.map +1 -0
  102. package/dist/types/image/image-loader.d.ts +263 -0
  103. package/dist/types/image/image-loader.d.ts.map +1 -0
  104. package/dist/types/image/image-resampler.d.ts +139 -0
  105. package/dist/types/image/image-resampler.d.ts.map +1 -0
  106. package/dist/types/image/layout-manager.d.ts +211 -0
  107. package/dist/types/image/layout-manager.d.ts.map +1 -0
  108. package/dist/types/image/transform-controller.d.ts +286 -0
  109. package/dist/types/image/transform-controller.d.ts.map +1 -0
  110. package/dist/types/image-editor.d.ts +661 -0
  111. package/dist/types/image-editor.d.ts.map +1 -0
  112. package/dist/types/index.d.cts +31 -0
  113. package/dist/types/index.d.cts.map +1 -0
  114. package/dist/types/index.d.ts +31 -0
  115. package/dist/types/index.d.ts.map +1 -0
  116. package/dist/types/mask/mask-factory.d.ts +212 -0
  117. package/dist/types/mask/mask-factory.d.ts.map +1 -0
  118. package/dist/types/mask/mask-label-manager.d.ts +171 -0
  119. package/dist/types/mask/mask-label-manager.d.ts.map +1 -0
  120. package/dist/types/mask/mask-list.d.ts +144 -0
  121. package/dist/types/mask/mask-list.d.ts.map +1 -0
  122. package/dist/types/mask/mask-style.d.ts +338 -0
  123. package/dist/types/mask/mask-style.d.ts.map +1 -0
  124. package/dist/types/mosaic/mosaic-controller.d.ts +82 -0
  125. package/dist/types/mosaic/mosaic-controller.d.ts.map +1 -0
  126. package/dist/types/mosaic/mosaic-geometry.d.ts +29 -0
  127. package/dist/types/mosaic/mosaic-geometry.d.ts.map +1 -0
  128. package/dist/types/mosaic/mosaic-pixelate.d.ts +23 -0
  129. package/dist/types/mosaic/mosaic-pixelate.d.ts.map +1 -0
  130. package/dist/types/ui/dom-bindings.d.ts +105 -0
  131. package/dist/types/ui/dom-bindings.d.ts.map +1 -0
  132. package/dist/types/ui/ui-state.d.ts +112 -0
  133. package/dist/types/ui/ui-state.d.ts.map +1 -0
  134. package/dist/types/ui/visibility-state.d.ts +77 -0
  135. package/dist/types/ui/visibility-state.d.ts.map +1 -0
  136. package/dist/types/utils/canvas-region.d.ts +177 -0
  137. package/dist/types/utils/canvas-region.d.ts.map +1 -0
  138. package/dist/types/utils/dom.d.ts +26 -0
  139. package/dist/types/utils/dom.d.ts.map +1 -0
  140. package/dist/types/utils/file.d.ts +80 -0
  141. package/dist/types/utils/file.d.ts.map +1 -0
  142. package/dist/types/utils/number.d.ts +131 -0
  143. package/dist/types/utils/number.d.ts.map +1 -0
  144. package/dist/types/utils/timeout.d.ts +84 -0
  145. package/dist/types/utils/timeout.d.ts.map +1 -0
  146. package/dist/umd/image-editor.umd.js +2 -0
  147. package/dist/umd/image-editor.umd.js.map +1 -0
  148. package/package.json +72 -66
  149. package/dist/image-editor.cjs +0 -4407
  150. package/dist/image-editor.cjs.map +0 -7
  151. package/dist/image-editor.esm.js +0 -4376
  152. package/dist/image-editor.esm.js.map +0 -7
  153. package/dist/image-editor.esm.min.js +0 -9
  154. package/dist/image-editor.esm.min.js.map +0 -7
  155. package/dist/image-editor.esm.min.mjs +0 -9
  156. package/dist/image-editor.esm.min.mjs.map +0 -7
  157. package/dist/image-editor.esm.mjs +0 -4376
  158. package/dist/image-editor.esm.mjs.map +0 -7
  159. package/dist/image-editor.js +0 -4373
  160. package/dist/image-editor.js.map +0 -7
  161. package/dist/image-editor.min.js +0 -9
  162. package/dist/image-editor.min.js.map +0 -7
  163. package/image-editor.d.ts +0 -271
  164. package/src/browser.js +0 -11
  165. package/src/esm.js +0 -9
  166. package/src/image-editor.js +0 -5013
@@ -0,0 +1,607 @@
1
+ import { isMaskObject } from '../core/public-types.js';
2
+ import { reportError } from '../core/callback-reporter.js';
3
+ import { ExportError, ExportNotReadyError, MergeMasksError } from '../core/errors.js';
4
+ import { Command } from '../history/history-manager.js';
5
+ import { withMaskStyleBackup } from '../mask/mask-style.js';
6
+ import { getClampedCanvasRegion, getObjectBBox, getPartialExportEdges, hasMeaningfulCanvasRegion, } from '../utils/canvas-region.js';
7
+ import { resolveExportFormat } from './export-format.js';
8
+ function resolveMultiplier(requested, fallback) {
9
+ const num = Number(requested);
10
+ if (Number.isFinite(num) && num > 0)
11
+ return num;
12
+ const fallbackValue = Number(fallback);
13
+ return Number.isFinite(fallbackValue) && fallbackValue > 0 ? fallbackValue : 1;
14
+ }
15
+ function resolveExportArea(requested, fallback) {
16
+ if (requested === 'canvas' || requested === 'image')
17
+ return requested;
18
+ return fallback === 'canvas' ? 'canvas' : 'image';
19
+ }
20
+ function resolveExportOptions(context, options) {
21
+ const providedOptions = options !== null && options !== void 0 ? options : {};
22
+ return {
23
+ exportArea: resolveExportArea(providedOptions.exportArea, context.options.exportAreaByDefault),
24
+ mergeMask: typeof providedOptions.mergeMask === 'boolean'
25
+ ? providedOptions.mergeMask
26
+ : context.options.mergeMaskByDefault,
27
+ multiplier: resolveMultiplier(providedOptions.multiplier, context.options.exportMultiplier),
28
+ format: resolveExportFormat(providedOptions, context.options.downsampleQuality),
29
+ };
30
+ }
31
+ function readCanvasDimension(canvas, getterName, propertyName) {
32
+ const canvasLike = canvas;
33
+ const getter = canvasLike[getterName];
34
+ const value = typeof getter === 'function' ? getter.call(canvasLike) : canvasLike[propertyName];
35
+ return Math.max(1, Math.ceil(Number.isFinite(value) ? Number(value) : 1));
36
+ }
37
+ function assertExportPixelBudget(context, multiplier, region) {
38
+ var _a, _b;
39
+ const sourceWidth = (_a = region === null || region === void 0 ? void 0 : region.width) !== null && _a !== void 0 ? _a : readCanvasDimension(context.canvas, 'getWidth', 'width');
40
+ const sourceHeight = (_b = region === null || region === void 0 ? void 0 : region.height) !== null && _b !== void 0 ? _b : readCanvasDimension(context.canvas, 'getHeight', 'height');
41
+ const outputWidth = Math.max(1, Math.ceil(sourceWidth * multiplier));
42
+ const outputHeight = Math.max(1, Math.ceil(sourceHeight * multiplier));
43
+ const pixelCount = outputWidth * outputHeight;
44
+ const maxPixels = context.options.maxExportPixels;
45
+ if (!Number.isFinite(pixelCount) || pixelCount > maxPixels) {
46
+ throw new RangeError(`[ImageEditor] Export size ${outputWidth}x${outputHeight} ` +
47
+ `(${pixelCount} pixels) exceeds maxExportPixels (${maxPixels}).`);
48
+ }
49
+ }
50
+ function computeExportRegion(context, exportArea) {
51
+ if (exportArea === 'canvas')
52
+ return { region: null, partialEdges: null };
53
+ const originalImage = context.getOriginalImage();
54
+ if (!originalImage)
55
+ return { region: null, partialEdges: null };
56
+ const bounds = getObjectBBox(originalImage);
57
+ const canvasLike = context.canvas;
58
+ const canvasWidth = typeof canvasLike.getWidth === 'function' ? canvasLike.getWidth() : canvasLike.width;
59
+ const canvasHeight = typeof canvasLike.getHeight === 'function' ? canvasLike.getHeight() : canvasLike.height;
60
+ if (!hasMeaningfulCanvasRegion(bounds, canvasWidth, canvasHeight)) {
61
+ throw new ExportError('exportImageBase64 failed: image export region is empty.');
62
+ }
63
+ return {
64
+ region: getClampedCanvasRegion(bounds, canvasWidth, canvasHeight, {
65
+ includePartialPixels: true,
66
+ }),
67
+ partialEdges: getPartialExportEdges(bounds, Number(originalImage.angle) || 0),
68
+ };
69
+ }
70
+ async function withMaskExportState(context, mergeMask, callback) {
71
+ if (!mergeMask)
72
+ return withMasksHidden(context, callback);
73
+ return withMaskStyleBackup({ canvas: context.canvas, options: context.options }, applyExportBakeInStyle, callback);
74
+ }
75
+ async function withMasksHidden(context, callback) {
76
+ const backups = getCanvasObjects(context.canvas)
77
+ .filter(isMaskObject)
78
+ .map((mask) => ({
79
+ mask,
80
+ visible: mask.visible,
81
+ }));
82
+ for (const backup of backups) {
83
+ try {
84
+ if (typeof backup.mask.set === 'function') {
85
+ backup.mask.set({ visible: false });
86
+ }
87
+ else {
88
+ backup.mask.visible = false;
89
+ }
90
+ }
91
+ catch {
92
+ }
93
+ }
94
+ try {
95
+ return await callback();
96
+ }
97
+ finally {
98
+ for (const backup of backups) {
99
+ try {
100
+ if (typeof backup.mask.set === 'function') {
101
+ backup.mask.set({ visible: backup.visible });
102
+ }
103
+ else {
104
+ backup.mask.visible = backup.visible;
105
+ }
106
+ }
107
+ catch {
108
+ }
109
+ }
110
+ }
111
+ }
112
+ function getCanvasObjects(canvas) {
113
+ try {
114
+ return canvas.getObjects();
115
+ }
116
+ catch {
117
+ return [];
118
+ }
119
+ }
120
+ function isObjectOnCanvas(canvas, object) {
121
+ return getCanvasObjects(canvas).includes(object);
122
+ }
123
+ function captureMaskLabelBackups(canvas) {
124
+ const backups = [];
125
+ for (const object of getCanvasObjects(canvas)) {
126
+ if (!isMaskObject(object))
127
+ continue;
128
+ const label = object.labelObject;
129
+ if (!label)
130
+ continue;
131
+ const wasOnCanvas = isObjectOnCanvas(canvas, label);
132
+ backups.push({
133
+ mask: object,
134
+ label,
135
+ wasOnCanvas,
136
+ visible: label.visible,
137
+ });
138
+ try {
139
+ if (typeof label.set === 'function')
140
+ label.set({ visible: false });
141
+ if (wasOnCanvas)
142
+ canvas.remove(label);
143
+ }
144
+ catch {
145
+ }
146
+ }
147
+ return backups;
148
+ }
149
+ function restoreMaskLabelBackups(canvas, backups) {
150
+ for (const backup of backups) {
151
+ try {
152
+ backup.mask.labelObject = backup.label;
153
+ if (typeof backup.label.set === 'function') {
154
+ backup.label.set({ visible: backup.visible });
155
+ }
156
+ else {
157
+ backup.label.visible = backup.visible;
158
+ }
159
+ if (backup.wasOnCanvas && !isObjectOnCanvas(canvas, backup.label)) {
160
+ canvas.add(backup.label);
161
+ canvas.bringObjectToFront(backup.label);
162
+ }
163
+ }
164
+ catch {
165
+ }
166
+ }
167
+ }
168
+ function captureActiveObject(canvas) {
169
+ var _a;
170
+ try {
171
+ const canvasWithSelection = canvas;
172
+ if (typeof canvasWithSelection.getActiveObject !== 'function')
173
+ return null;
174
+ return (_a = canvasWithSelection.getActiveObject()) !== null && _a !== void 0 ? _a : null;
175
+ }
176
+ catch {
177
+ return null;
178
+ }
179
+ }
180
+ function restoreActiveObject(canvas, activeObject) {
181
+ if (!activeObject)
182
+ return;
183
+ try {
184
+ const canvasWithSelection = canvas;
185
+ if (typeof canvasWithSelection.setActiveObject === 'function') {
186
+ canvasWithSelection.setActiveObject(activeObject);
187
+ }
188
+ }
189
+ catch {
190
+ }
191
+ }
192
+ function requestRender(canvas) {
193
+ try {
194
+ if (typeof canvas.requestRenderAll === 'function') {
195
+ canvas.requestRenderAll();
196
+ }
197
+ else {
198
+ canvas.renderAll();
199
+ }
200
+ }
201
+ catch {
202
+ }
203
+ }
204
+ function applyExportBakeInStyle(mask) {
205
+ try {
206
+ mask.set({
207
+ opacity: 1,
208
+ fill: '#000',
209
+ strokeWidth: 0,
210
+ stroke: null,
211
+ selectable: false,
212
+ });
213
+ if (typeof mask.setCoords === 'function')
214
+ mask.setCoords();
215
+ }
216
+ catch {
217
+ }
218
+ }
219
+ function renderCanvasToDataUrl(canvas, format, quality, multiplier, region) {
220
+ const fabricOptions = {
221
+ format,
222
+ multiplier,
223
+ };
224
+ if (quality !== undefined)
225
+ fabricOptions.quality = quality;
226
+ if (region) {
227
+ fabricOptions.left = region.left;
228
+ fabricOptions.top = region.top;
229
+ fabricOptions.width = region.width;
230
+ fabricOptions.height = region.height;
231
+ }
232
+ return canvas.toDataURL(fabricOptions);
233
+ }
234
+ function hasPartialEdges(edges) {
235
+ return !!edges && (edges.left || edges.top || edges.right || edges.bottom);
236
+ }
237
+ function getImageDimensions(imageElement) {
238
+ return {
239
+ width: Math.max(1, imageElement.naturalWidth || imageElement.width || 1),
240
+ height: Math.max(1, imageElement.naturalHeight || imageElement.height || 1),
241
+ };
242
+ }
243
+ function loadImageElement(dataUrl) {
244
+ return new Promise((resolve, reject) => {
245
+ const imageElement = new Image();
246
+ imageElement.crossOrigin = 'anonymous';
247
+ const cleanup = () => {
248
+ if (typeof imageElement.removeEventListener === 'function') {
249
+ imageElement.removeEventListener('load', handleLoad);
250
+ imageElement.removeEventListener('error', handleError);
251
+ }
252
+ else {
253
+ imageElement.onload = null;
254
+ imageElement.onerror = null;
255
+ }
256
+ };
257
+ const handleLoad = () => {
258
+ cleanup();
259
+ resolve(imageElement);
260
+ };
261
+ const handleError = () => {
262
+ cleanup();
263
+ reject(new Error('Failed to decode export data URL'));
264
+ };
265
+ if (typeof imageElement.addEventListener === 'function') {
266
+ imageElement.addEventListener('load', handleLoad, { once: true });
267
+ imageElement.addEventListener('error', handleError, { once: true });
268
+ }
269
+ else {
270
+ imageElement.onload = handleLoad;
271
+ imageElement.onerror = handleError;
272
+ }
273
+ imageElement.src = dataUrl;
274
+ });
275
+ }
276
+ async function sealPartialTransparentEdges(dataUrl, edges, target) {
277
+ if (!hasPartialEdges(edges))
278
+ return dataUrl;
279
+ const imageElement = await loadImageElement(dataUrl);
280
+ const { width, height } = getImageDimensions(imageElement);
281
+ const offscreenCanvas = document.createElement('canvas');
282
+ offscreenCanvas.width = width;
283
+ offscreenCanvas.height = height;
284
+ const canvasContext = offscreenCanvas.getContext('2d');
285
+ if (!canvasContext)
286
+ throw new Error('2D canvas context is unavailable');
287
+ canvasContext.drawImage(imageElement, 0, 0, width, height);
288
+ const imageData = canvasContext.getImageData(0, 0, width, height);
289
+ const pixels = imageData.data;
290
+ const sealPixel = (x, y, fallbackX, fallbackY) => {
291
+ var _a, _b, _c, _d, _e, _f;
292
+ const index = (y * width + x) * 4;
293
+ const fallbackIndex = (fallbackY * width + fallbackX) * 4;
294
+ const alpha = (_a = pixels[index + 3]) !== null && _a !== void 0 ? _a : 0;
295
+ const fallbackAlpha = (_b = pixels[fallbackIndex + 3]) !== null && _b !== void 0 ? _b : 0;
296
+ if (alpha === 0 && fallbackAlpha > 0) {
297
+ pixels[index] = (_c = pixels[fallbackIndex]) !== null && _c !== void 0 ? _c : 0;
298
+ pixels[index + 1] = (_d = pixels[fallbackIndex + 1]) !== null && _d !== void 0 ? _d : 0;
299
+ pixels[index + 2] = (_e = pixels[fallbackIndex + 2]) !== null && _e !== void 0 ? _e : 0;
300
+ pixels[index + 3] = fallbackAlpha;
301
+ }
302
+ const nextAlpha = (_f = pixels[index + 3]) !== null && _f !== void 0 ? _f : 0;
303
+ if (nextAlpha > 0 && nextAlpha < 255) {
304
+ pixels[index + 3] = 255;
305
+ }
306
+ };
307
+ if ((edges === null || edges === void 0 ? void 0 : edges.left) && width > 1) {
308
+ for (let y = 0; y < height; y += 1)
309
+ sealPixel(0, y, 1, y);
310
+ }
311
+ if ((edges === null || edges === void 0 ? void 0 : edges.right) && width > 1) {
312
+ for (let y = 0; y < height; y += 1)
313
+ sealPixel(width - 1, y, width - 2, y);
314
+ }
315
+ if ((edges === null || edges === void 0 ? void 0 : edges.top) && height > 1) {
316
+ for (let x = 0; x < width; x += 1)
317
+ sealPixel(x, 0, x, 1);
318
+ }
319
+ if ((edges === null || edges === void 0 ? void 0 : edges.bottom) && height > 1) {
320
+ for (let x = 0; x < width; x += 1)
321
+ sealPixel(x, height - 1, x, height - 2);
322
+ }
323
+ canvasContext.putImageData(imageData, 0, 0);
324
+ return target.quality === undefined
325
+ ? offscreenCanvas.toDataURL(target.mimeType)
326
+ : offscreenCanvas.toDataURL(target.mimeType, target.quality);
327
+ }
328
+ function getJpegBackgroundColor(backgroundColor) {
329
+ return resolveCanvasFillStyle(backgroundColor);
330
+ }
331
+ function resolveCanvasFillStyle(backgroundColor, fallback = '#ffffff') {
332
+ const value = String(backgroundColor !== null && backgroundColor !== void 0 ? backgroundColor : '').trim();
333
+ if (!value || isTransparentCssColor(value))
334
+ return '#ffffff';
335
+ const context = createColorValidationContext();
336
+ if (!context)
337
+ return fallback;
338
+ context.fillStyle = '#000001';
339
+ const firstSentinel = context.fillStyle;
340
+ context.fillStyle = value;
341
+ const firstResolved = context.fillStyle;
342
+ if (firstResolved !== firstSentinel)
343
+ return firstResolved;
344
+ context.fillStyle = '#000002';
345
+ const secondSentinel = context.fillStyle;
346
+ context.fillStyle = value;
347
+ const secondResolved = context.fillStyle;
348
+ if (secondResolved !== secondSentinel)
349
+ return secondResolved;
350
+ return fallback;
351
+ }
352
+ function createColorValidationContext() {
353
+ try {
354
+ if (typeof document === 'undefined' || typeof document.createElement !== 'function') {
355
+ return null;
356
+ }
357
+ return document.createElement('canvas').getContext('2d');
358
+ }
359
+ catch {
360
+ return null;
361
+ }
362
+ }
363
+ function getCanvasDocument(canvas) {
364
+ var _a, _b, _c, _d, _e;
365
+ const canvasLike = canvas;
366
+ return ((_e = (_c = (_b = (_a = canvasLike.getElement) === null || _a === void 0 ? void 0 : _a.call(canvasLike)) === null || _b === void 0 ? void 0 : _b.ownerDocument) !== null && _c !== void 0 ? _c : (_d = canvasLike.lowerCanvasEl) === null || _d === void 0 ? void 0 : _d.ownerDocument) !== null && _e !== void 0 ? _e : document);
367
+ }
368
+ function isTransparentCssColor(value) {
369
+ const normalized = value.trim().toLowerCase();
370
+ if (normalized === 'transparent')
371
+ return true;
372
+ const hex = normalized.match(/^#([0-9a-f]{4}|[0-9a-f]{8})$/i);
373
+ if (hex) {
374
+ const digits = hex[1];
375
+ const alpha = digits.length === 4 ? digits[3] : digits.slice(6, 8);
376
+ return /^0+$/.test(alpha);
377
+ }
378
+ const commaAlpha = normalized.match(/^(?:rgba|hsla)\((.*),\s*([^,/)]+)\)$/i);
379
+ if (commaAlpha && isZeroCssAlpha(commaAlpha[2]))
380
+ return true;
381
+ const slashAlpha = normalized.match(/^[a-z][a-z0-9-]*\([^/]+\/\s*([^)]+)\)$/i);
382
+ if (slashAlpha && isZeroCssAlpha(slashAlpha[1]))
383
+ return true;
384
+ return false;
385
+ }
386
+ function isZeroCssAlpha(value) {
387
+ const alpha = value.trim();
388
+ if (alpha.endsWith('%')) {
389
+ const numericPercent = Number.parseFloat(alpha.slice(0, -1));
390
+ return Number.isFinite(numericPercent) && numericPercent === 0;
391
+ }
392
+ const numericAlpha = Number.parseFloat(alpha);
393
+ return Number.isFinite(numericAlpha) && numericAlpha === 0;
394
+ }
395
+ async function convertDataUrlToOpaqueJpeg(dataUrl, backgroundColor, quality) {
396
+ const imageElement = await loadImageElement(dataUrl);
397
+ const { width, height } = getImageDimensions(imageElement);
398
+ const offscreenCanvas = document.createElement('canvas');
399
+ offscreenCanvas.width = width;
400
+ offscreenCanvas.height = height;
401
+ const canvasContext = offscreenCanvas.getContext('2d');
402
+ if (!canvasContext)
403
+ throw new Error('2D canvas context is unavailable');
404
+ canvasContext.fillStyle = getJpegBackgroundColor(backgroundColor);
405
+ canvasContext.fillRect(0, 0, width, height);
406
+ canvasContext.drawImage(imageElement, 0, 0, width, height);
407
+ return offscreenCanvas.toDataURL('image/jpeg', quality);
408
+ }
409
+ function dataUrlToBytes(dataUrl) {
410
+ var _a;
411
+ const match = /^data:image\/[a-z0-9.+-]+;base64,([A-Za-z0-9+/=]+)$/i.exec(dataUrl);
412
+ const base64 = (_a = match === null || match === void 0 ? void 0 : match[1]) !== null && _a !== void 0 ? _a : '';
413
+ if (!base64) {
414
+ throw new Error('exportImageFile received a malformed or empty image data URL.');
415
+ }
416
+ if (typeof globalThis.atob === 'function') {
417
+ const binary = globalThis.atob(base64);
418
+ const buffer = new ArrayBuffer(binary.length);
419
+ const bytes = new Uint8Array(buffer);
420
+ for (let i = binary.length - 1; i >= 0; i -= 1) {
421
+ bytes[i] = binary.charCodeAt(i);
422
+ }
423
+ return bytes;
424
+ }
425
+ const bufferCtor = globalThis.Buffer;
426
+ if (bufferCtor && typeof bufferCtor.from === 'function') {
427
+ const source = bufferCtor.from(base64, 'base64');
428
+ const buffer = new ArrayBuffer(source.length);
429
+ const bytes = new Uint8Array(buffer);
430
+ bytes.set(source);
431
+ return bytes;
432
+ }
433
+ throw new Error('No base64 decoder is available for exportImageFile.');
434
+ }
435
+ async function reencodeDataUrlAs(sourceDataUrl, target, backgroundColor) {
436
+ if (sourceDataUrl.startsWith(`data:${target.mimeType}`)) {
437
+ return sourceDataUrl;
438
+ }
439
+ const imageElement = await loadImageElement(sourceDataUrl);
440
+ const { width, height } = getImageDimensions(imageElement);
441
+ const offscreenCanvas = document.createElement('canvas');
442
+ offscreenCanvas.width = width;
443
+ offscreenCanvas.height = height;
444
+ const canvasContext = offscreenCanvas.getContext('2d');
445
+ if (!canvasContext) {
446
+ throw new Error('Unable to acquire 2D context for export conversion');
447
+ }
448
+ if (target.format === 'jpeg') {
449
+ canvasContext.fillStyle = getJpegBackgroundColor(backgroundColor);
450
+ canvasContext.fillRect(0, 0, width, height);
451
+ }
452
+ canvasContext.drawImage(imageElement, 0, 0, width, height);
453
+ return offscreenCanvas.toDataURL(target.mimeType, target.quality);
454
+ }
455
+ function warnNoImageLoaded(operation) {
456
+ console.warn(`[ImageEditor] ${operation} skipped: no image is loaded on the canvas.`);
457
+ }
458
+ export async function exportImageBase64(context, options) {
459
+ if (!context.isImageLoaded()) {
460
+ warnNoImageLoaded('exportImageBase64');
461
+ return '';
462
+ }
463
+ const activeObject = captureActiveObject(context.canvas);
464
+ const labelBackups = captureMaskLabelBackups(context.canvas);
465
+ try {
466
+ context.canvas.discardActiveObject();
467
+ const resolved = resolveExportOptions(context, options);
468
+ const { region, partialEdges } = computeExportRegion(context, resolved.exportArea);
469
+ assertExportPixelBudget(context, resolved.multiplier, region);
470
+ const renderFormat = region && resolved.format.format === 'jpeg' ? 'png' : resolved.format.format;
471
+ const renderQuality = renderFormat === 'png' ? undefined : resolved.format.quality;
472
+ let dataUrl = await withMaskExportState(context, resolved.mergeMask, async () => renderCanvasToDataUrl(context.canvas, renderFormat, renderQuality, resolved.multiplier, region));
473
+ if (region) {
474
+ const sealedFormat = resolved.format.format === 'jpeg'
475
+ ? { format: 'png', mimeType: 'image/png', quality: undefined }
476
+ : resolved.format;
477
+ dataUrl = await sealPartialTransparentEdges(dataUrl, partialEdges, sealedFormat);
478
+ if (resolved.format.format === 'jpeg') {
479
+ dataUrl = await convertDataUrlToOpaqueJpeg(dataUrl, context.options.backgroundColor, resolved.format.quality);
480
+ }
481
+ }
482
+ return dataUrl;
483
+ }
484
+ finally {
485
+ restoreMaskLabelBackups(context.canvas, labelBackups);
486
+ restoreActiveObject(context.canvas, activeObject);
487
+ requestRender(context.canvas);
488
+ }
489
+ }
490
+ export async function exportImageFile(context, options) {
491
+ var _a;
492
+ if (!context.isImageLoaded()) {
493
+ warnNoImageLoaded('exportImageFile');
494
+ throw new ExportNotReadyError('exportImageFile');
495
+ }
496
+ const providedOptions = options !== null && options !== void 0 ? options : {};
497
+ const fileName = (_a = providedOptions.fileName) !== null && _a !== void 0 ? _a : context.options.defaultDownloadFileName;
498
+ const resolved = resolveExportFormat(providedOptions, context.options.downsampleQuality);
499
+ const base64 = await exportImageBase64(context, {
500
+ exportArea: providedOptions.exportArea,
501
+ mergeMask: providedOptions.mergeMask,
502
+ multiplier: providedOptions.multiplier,
503
+ quality: providedOptions.quality,
504
+ fileType: providedOptions.fileType,
505
+ });
506
+ if (!base64) {
507
+ throw new ExportNotReadyError('exportImageFile');
508
+ }
509
+ const finalDataUrl = await reencodeDataUrlAs(base64, resolved, context.options.backgroundColor);
510
+ let bytes;
511
+ try {
512
+ bytes = dataUrlToBytes(finalDataUrl);
513
+ }
514
+ catch (error) {
515
+ throw new ExportError('exportImageFile failed to decode rendered data URL.', error);
516
+ }
517
+ return new File([bytes], fileName, { type: resolved.mimeType });
518
+ }
519
+ export function downloadImage(context, fileName) {
520
+ if (!context.isImageLoaded()) {
521
+ warnNoImageLoaded('downloadImage');
522
+ return;
523
+ }
524
+ const resolvedFileName = fileName !== null && fileName !== void 0 ? fileName : context.options.defaultDownloadFileName;
525
+ void exportImageBase64(context, {
526
+ exportArea: context.options.exportAreaByDefault,
527
+ mergeMask: context.options.mergeMaskByDefault,
528
+ multiplier: context.options.exportMultiplier,
529
+ })
530
+ .then((dataUrl) => {
531
+ if (!dataUrl)
532
+ return;
533
+ const ownerDocument = getCanvasDocument(context.canvas);
534
+ const link = ownerDocument.createElement('a');
535
+ link.download = resolvedFileName;
536
+ link.href = dataUrl;
537
+ const body = ownerDocument.body;
538
+ body.appendChild(link);
539
+ try {
540
+ link.click();
541
+ }
542
+ finally {
543
+ body.removeChild(link);
544
+ }
545
+ })
546
+ .catch((error) => {
547
+ reportError(context.options, error, 'downloadImage failed.');
548
+ console.error('[ImageEditor] downloadImage failed', error);
549
+ });
550
+ }
551
+ export async function mergeMasks(context) {
552
+ if (!context.isImageLoaded())
553
+ return;
554
+ const masks = context.canvas
555
+ .getObjects()
556
+ .filter((o) => 'maskId' in o && typeof o.maskId === 'number');
557
+ if (masks.length === 0)
558
+ return;
559
+ const beforeSnapshot = context.saveState();
560
+ context.canvas.discardActiveObject();
561
+ context.canvas.renderAll();
562
+ const preScrollTop = context.containerElement ? context.containerElement.scrollTop : null;
563
+ const preScrollLeft = context.containerElement ? context.containerElement.scrollLeft : null;
564
+ try {
565
+ const merged = await exportImageBase64(context, {
566
+ exportArea: 'image',
567
+ mergeMask: true,
568
+ multiplier: context.options.exportMultiplier,
569
+ fileType: 'png',
570
+ });
571
+ if (!merged) {
572
+ throw new MergeMasksError('mergeMasks: exportImageBase64 returned an empty data URL.');
573
+ }
574
+ context.removeAllMasksNoHistory();
575
+ await context.loadImage(merged, { preserveScroll: true });
576
+ const afterSnapshot = context.saveState();
577
+ if (context.containerElement) {
578
+ try {
579
+ if (preScrollTop !== null) {
580
+ context.containerElement.scrollTop = preScrollTop;
581
+ }
582
+ if (preScrollLeft !== null) {
583
+ context.containerElement.scrollLeft = preScrollLeft;
584
+ }
585
+ }
586
+ catch (scrollError) {
587
+ console.warn('[ImageEditor] mergeMasks: scroll restore failed', scrollError);
588
+ }
589
+ }
590
+ if (beforeSnapshot && afterSnapshot && beforeSnapshot !== afterSnapshot) {
591
+ context.historyManager.push(new Command(() => context.loadFromState(afterSnapshot), () => context.loadFromState(beforeSnapshot)));
592
+ }
593
+ }
594
+ catch (error) {
595
+ try {
596
+ await context.loadFromState(beforeSnapshot);
597
+ }
598
+ catch (rollbackError) {
599
+ console.warn('[ImageEditor] mergeMasks: rollback failed', rollbackError);
600
+ }
601
+ if (error instanceof MergeMasksError)
602
+ throw error;
603
+ const message = error instanceof Error ? `mergeMasks failed: ${error.message}` : 'mergeMasks failed';
604
+ throw new MergeMasksError(message, error);
605
+ }
606
+ }
607
+ //# sourceMappingURL=export-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-service.js","sourceRoot":"","sources":["../../../src/export/export-service.ts"],"names":[],"mappings":"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"}