drp-imagesdk 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +665 -0
- package/dist/adjustments.d.ts +3 -0
- package/dist/adjustments.d.ts.map +1 -0
- package/dist/adjustments.js +57 -0
- package/dist/adjustments.js.map +1 -0
- package/dist/batch.d.ts +27 -0
- package/dist/batch.d.ts.map +1 -0
- package/dist/batch.js +99 -0
- package/dist/batch.js.map +1 -0
- package/dist/compress.d.ts +11 -0
- package/dist/compress.d.ts.map +1 -0
- package/dist/compress.js +273 -0
- package/dist/compress.js.map +1 -0
- package/dist/convert.d.ts +8 -0
- package/dist/convert.d.ts.map +1 -0
- package/dist/convert.js +116 -0
- package/dist/convert.js.map +1 -0
- package/dist/crop.d.ts +4 -0
- package/dist/crop.d.ts.map +1 -0
- package/dist/crop.js +32 -0
- package/dist/crop.js.map +1 -0
- package/dist/drp-class.d.ts +58 -0
- package/dist/drp-class.d.ts.map +1 -0
- package/dist/drp-class.js +191 -0
- package/dist/drp-class.js.map +1 -0
- package/dist/drp.d.ts +14 -0
- package/dist/drp.d.ts.map +1 -0
- package/dist/drp.js +23 -0
- package/dist/drp.js.map +1 -0
- package/dist/editor.d.ts +24 -0
- package/dist/editor.d.ts.map +1 -0
- package/dist/editor.js +153 -0
- package/dist/editor.js.map +1 -0
- package/dist/filters.d.ts +19 -0
- package/dist/filters.d.ts.map +1 -0
- package/dist/filters.js +207 -0
- package/dist/filters.js.map +1 -0
- package/dist/image-sdk.iife.js +1979 -0
- package/dist/image-sdk.iife.js.map +1 -0
- package/dist/image-sdk.min.js +1978 -0
- package/dist/image-sdk.umd.js +1980 -0
- package/dist/image-sdk.umd.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/layers.d.ts +12 -0
- package/dist/layers.d.ts.map +1 -0
- package/dist/layers.js +174 -0
- package/dist/layers.js.map +1 -0
- package/dist/loader.d.ts +10 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +114 -0
- package/dist/loader.js.map +1 -0
- package/dist/metadata.d.ts +6 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +127 -0
- package/dist/metadata.js.map +1 -0
- package/dist/presets.d.ts +11 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +28 -0
- package/dist/presets.js.map +1 -0
- package/dist/resize.d.ts +4 -0
- package/dist/resize.d.ts.map +1 -0
- package/dist/resize.js +68 -0
- package/dist/resize.js.map +1 -0
- package/dist/transform.d.ts +6 -0
- package/dist/transform.d.ts.map +1 -0
- package/dist/transform.js +94 -0
- package/dist/transform.js.map +1 -0
- package/dist/types.d.ts +153 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/worker.d.ts +8 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +124 -0
- package/dist/worker.js.map +1 -0
- package/dist/zoom.d.ts +14 -0
- package/dist/zoom.d.ts.map +1 -0
- package/dist/zoom.js +55 -0
- package/dist/zoom.js.map +1 -0
- package/package.json +92 -0
package/dist/crop.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CropOptions } from './types';
|
|
2
|
+
export declare function cropImage(source: HTMLImageElement | HTMLCanvasElement | string | File, options: CropOptions): Promise<HTMLCanvasElement>;
|
|
3
|
+
export declare function cropCanvas(canvas: HTMLCanvasElement, options: CropOptions): HTMLCanvasElement;
|
|
4
|
+
//# sourceMappingURL=crop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crop.d.ts","sourceRoot":"","sources":["../src/crop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,wBAAsB,SAAS,CAC7B,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,GAAG,IAAI,EAC5D,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,iBAAiB,CAAC,CAiC5B;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,WAAW,GACnB,iBAAiB,CAmBnB"}
|
package/dist/crop.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { loadImage } from './loader';
|
|
2
|
+
export async function cropImage(source, options) {
|
|
3
|
+
let img;
|
|
4
|
+
if (typeof source === 'string' || source instanceof File) {
|
|
5
|
+
img = await loadImage(source);
|
|
6
|
+
}
|
|
7
|
+
else if (source instanceof HTMLImageElement) {
|
|
8
|
+
img = source;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
img = new Image();
|
|
12
|
+
img.src = source.toDataURL();
|
|
13
|
+
await new Promise((resolve) => {
|
|
14
|
+
img.onload = () => resolve();
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
const canvas = document.createElement('canvas');
|
|
18
|
+
canvas.width = options.width;
|
|
19
|
+
canvas.height = options.height;
|
|
20
|
+
const ctx = canvas.getContext('2d');
|
|
21
|
+
ctx.drawImage(img, options.x, options.y, options.width, options.height, 0, 0, options.width, options.height);
|
|
22
|
+
return canvas;
|
|
23
|
+
}
|
|
24
|
+
export function cropCanvas(canvas, options) {
|
|
25
|
+
const cropped = document.createElement('canvas');
|
|
26
|
+
cropped.width = options.width;
|
|
27
|
+
cropped.height = options.height;
|
|
28
|
+
const ctx = cropped.getContext('2d');
|
|
29
|
+
ctx.drawImage(canvas, options.x, options.y, options.width, options.height, 0, 0, options.width, options.height);
|
|
30
|
+
return cropped;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=crop.js.map
|
package/dist/crop.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crop.js","sourceRoot":"","sources":["../src/crop.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAA4D,EAC5D,OAAoB;IAEpB,IAAI,GAAqB,CAAC;IAE1B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,YAAY,IAAI,EAAE,CAAC;QACzD,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;SAAM,IAAI,MAAM,YAAY,gBAAgB,EAAE,CAAC;QAC9C,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QAClB,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE/B,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;IACrC,GAAG,CAAC,SAAS,CACX,GAAG,EACH,OAAO,CAAC,CAAC,EACT,OAAO,CAAC,CAAC,EACT,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,EACd,CAAC,EACD,CAAC,EACD,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,CACf,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,MAAyB,EACzB,OAAoB;IAEpB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC9B,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAEhC,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;IACtC,GAAG,CAAC,SAAS,CACX,MAAM,EACN,OAAO,CAAC,CAAC,EACT,OAAO,CAAC,CAAC,EACT,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,EACd,CAAC,EACD,CAAC,EACD,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,CACf,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { ImageFormat, Adjustments, FilterPreset, CropOptions } from './types';
|
|
2
|
+
export interface DRPResult {
|
|
3
|
+
blob: Blob;
|
|
4
|
+
size: number;
|
|
5
|
+
format: string;
|
|
6
|
+
quality: number;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
}
|
|
10
|
+
export interface DRPOptions {
|
|
11
|
+
format?: ImageFormat;
|
|
12
|
+
quality?: number;
|
|
13
|
+
targetSize?: string | number;
|
|
14
|
+
tolerance?: number;
|
|
15
|
+
width?: number;
|
|
16
|
+
height?: number;
|
|
17
|
+
maintainAspectRatio?: boolean;
|
|
18
|
+
crop?: {
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
} | CropOptions;
|
|
24
|
+
rotate?: number;
|
|
25
|
+
flip?: 'horizontal' | 'vertical' | 'both' | boolean;
|
|
26
|
+
filter?: FilterPreset;
|
|
27
|
+
adjustments?: Adjustments;
|
|
28
|
+
metadata?: {
|
|
29
|
+
preserve?: boolean;
|
|
30
|
+
remove?: boolean;
|
|
31
|
+
custom?: Record<string, unknown>;
|
|
32
|
+
};
|
|
33
|
+
onProgress?: (event: {
|
|
34
|
+
phase: string;
|
|
35
|
+
percent: number;
|
|
36
|
+
message: string;
|
|
37
|
+
}) => void;
|
|
38
|
+
}
|
|
39
|
+
declare function DRP(source: any, options?: DRPOptions): Promise<DRPResult>;
|
|
40
|
+
declare namespace DRP {
|
|
41
|
+
var process: (source: any, options?: DRPOptions) => Promise<DRPResult>;
|
|
42
|
+
var version: () => string;
|
|
43
|
+
var formats: () => ImageFormat[];
|
|
44
|
+
var filters: () => FilterPreset[];
|
|
45
|
+
var presets: () => import("./presets").ExportPreset[];
|
|
46
|
+
var editor: (source: any) => Promise<import("./editor").Editor>;
|
|
47
|
+
var batch: (files: File[], operation: any, onProgress?: any) => Promise<import("./batch").BatchResult[]>;
|
|
48
|
+
var validate: (file: File, maxSize?: number) => {
|
|
49
|
+
valid: boolean;
|
|
50
|
+
size: number;
|
|
51
|
+
maxSize?: number;
|
|
52
|
+
message: string;
|
|
53
|
+
};
|
|
54
|
+
var preview: (source: any, format?: ImageFormat) => Promise<import("./types").CompressionPreview>;
|
|
55
|
+
var readMetadata: (source: any) => Promise<import("./types").MetadataInfo>;
|
|
56
|
+
}
|
|
57
|
+
export { DRP };
|
|
58
|
+
//# sourceMappingURL=drp-class.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drp-class.d.ts","sourceRoot":"","sources":["../src/drp-class.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,WAAW,EAEZ,MAAM,SAAS,CAAC;AAajB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,IAAI,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW,CAAC;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;IACpD,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACtF,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACnF;AA0MD,iBAAS,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAElE;kBAFQ,GAAG;0BA/JmB,GAAG,YAAW,UAAU,KAAQ,OAAO,CAAC,SAAS,CAAC;;uBAqK/D,WAAW,EAAE;uBACb,YAAY,EAAE;;yBAKV,GAAG;uBACL,IAAI,EAAE,aAAa,GAAG,eAAe,GAAG;yBACtC,IAAI,YAAY,MAAM;;;;;;0BACrB,GAAG,WAAW,WAAW;+BACpB,GAAG;;AAE/B,OAAO,EAAE,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { VERSION } from './types';
|
|
2
|
+
import { loadImage, imageToCanvas } from './loader';
|
|
3
|
+
import { cropImage } from './crop';
|
|
4
|
+
import { resizeImage } from './resize';
|
|
5
|
+
import { rotateImage, flipImage } from './transform';
|
|
6
|
+
import { applyAdjustments } from './adjustments';
|
|
7
|
+
import { applyFilter } from './filters';
|
|
8
|
+
import { compressToTargetSize, getCompressionPreview, validateFileSize } from './compress';
|
|
9
|
+
import { readMetadata, exportWithMetadata } from './metadata';
|
|
10
|
+
import { createEditor } from './editor';
|
|
11
|
+
import { EXPORT_PRESETS } from './presets';
|
|
12
|
+
import { batchProcess } from './batch';
|
|
13
|
+
function parseSize(input) {
|
|
14
|
+
if (typeof input === 'number')
|
|
15
|
+
return input;
|
|
16
|
+
const str = input.trim().toUpperCase();
|
|
17
|
+
const match = str.match(/^([\d.]+)\s*(B|KB|MB|GB)$/);
|
|
18
|
+
if (!match)
|
|
19
|
+
throw new Error(`Invalid size format: "${input}". Use "500KB", "2MB", etc.`);
|
|
20
|
+
const value = parseFloat(match[1]);
|
|
21
|
+
const unit = match[2];
|
|
22
|
+
switch (unit) {
|
|
23
|
+
case 'B': return value;
|
|
24
|
+
case 'KB': return value * 1024;
|
|
25
|
+
case 'MB': return value * 1024 * 1024;
|
|
26
|
+
case 'GB': return value * 1024 * 1024 * 1024;
|
|
27
|
+
default: return value;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function parseFlip(input) {
|
|
31
|
+
if (input === true)
|
|
32
|
+
return { horizontal: true };
|
|
33
|
+
if (input === false)
|
|
34
|
+
return {};
|
|
35
|
+
switch (input) {
|
|
36
|
+
case 'horizontal': return { horizontal: true };
|
|
37
|
+
case 'vertical': return { vertical: true };
|
|
38
|
+
case 'both': return { horizontal: true, vertical: true };
|
|
39
|
+
default: return {};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function normalizeCrop(crop) {
|
|
43
|
+
return {
|
|
44
|
+
x: crop.x,
|
|
45
|
+
y: crop.y,
|
|
46
|
+
width: 'width' in crop ? crop.width : crop.width,
|
|
47
|
+
height: 'height' in crop ? crop.height : crop.height,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
async function process(source, options = {}) {
|
|
51
|
+
const { format = 'webp', quality = 80, targetSize, tolerance = 10, width, height, maintainAspectRatio = true, crop: cropOpts, rotate: rotateDeg, flip: flipOpts, filter: filterPreset, adjustments: adjOpts, metadata: metaOpts, onProgress, } = options;
|
|
52
|
+
onProgress?.({ phase: 'loading', percent: 0, message: 'Loading image...' });
|
|
53
|
+
let canvas;
|
|
54
|
+
if (source instanceof Blob && !(source instanceof File)) {
|
|
55
|
+
const url = URL.createObjectURL(source);
|
|
56
|
+
const img = await loadImage(url);
|
|
57
|
+
URL.revokeObjectURL(url);
|
|
58
|
+
canvas = imageToCanvas(img);
|
|
59
|
+
}
|
|
60
|
+
else if (typeof source === 'string' || source instanceof File) {
|
|
61
|
+
const img = await loadImage(source);
|
|
62
|
+
canvas = imageToCanvas(img);
|
|
63
|
+
}
|
|
64
|
+
else if (source instanceof HTMLImageElement) {
|
|
65
|
+
canvas = imageToCanvas(source);
|
|
66
|
+
}
|
|
67
|
+
else if (source instanceof HTMLCanvasElement) {
|
|
68
|
+
canvas = source;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
throw new Error('DRP: Invalid source. Provide a File, Blob, URL string, HTMLImageElement, or HTMLCanvasElement.');
|
|
72
|
+
}
|
|
73
|
+
const originalWidth = canvas.width;
|
|
74
|
+
const originalHeight = canvas.height;
|
|
75
|
+
void originalWidth;
|
|
76
|
+
void originalHeight;
|
|
77
|
+
let step = 0;
|
|
78
|
+
const totalSteps = [cropOpts, width || height, rotateDeg, flipOpts, adjOpts, filterPreset, true].filter(Boolean).length;
|
|
79
|
+
function progress(phase, msg) {
|
|
80
|
+
step++;
|
|
81
|
+
onProgress?.({ phase, percent: Math.round((step / totalSteps) * 80), message: msg });
|
|
82
|
+
}
|
|
83
|
+
if (cropOpts) {
|
|
84
|
+
progress('processing', 'Cropping...');
|
|
85
|
+
canvas = await cropImage(canvas, normalizeCrop(cropOpts));
|
|
86
|
+
}
|
|
87
|
+
if (width || height) {
|
|
88
|
+
progress('processing', 'Resizing...');
|
|
89
|
+
canvas = await resizeImage(canvas, {
|
|
90
|
+
width,
|
|
91
|
+
height,
|
|
92
|
+
maintainAspectRatio,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (rotateDeg) {
|
|
96
|
+
progress('processing', 'Rotating...');
|
|
97
|
+
canvas = await rotateImage(canvas, { degrees: rotateDeg });
|
|
98
|
+
}
|
|
99
|
+
if (flipOpts) {
|
|
100
|
+
progress('processing', 'Flipping...');
|
|
101
|
+
canvas = await flipImage(canvas, parseFlip(flipOpts));
|
|
102
|
+
}
|
|
103
|
+
if (adjOpts) {
|
|
104
|
+
progress('processing', 'Adjusting...');
|
|
105
|
+
canvas = applyAdjustments(canvas, adjOpts);
|
|
106
|
+
}
|
|
107
|
+
if (filterPreset && filterPreset !== 'original') {
|
|
108
|
+
progress('processing', 'Applying filter...');
|
|
109
|
+
canvas = applyFilter(canvas, filterPreset);
|
|
110
|
+
}
|
|
111
|
+
onProgress?.({ phase: 'encoding', percent: 80, message: 'Encoding...' });
|
|
112
|
+
let blob;
|
|
113
|
+
let actualQuality = quality;
|
|
114
|
+
let actualFormat = format;
|
|
115
|
+
if (targetSize) {
|
|
116
|
+
const targetBytes = parseSize(targetSize);
|
|
117
|
+
const result = await compressToTargetSize(canvas, {
|
|
118
|
+
format,
|
|
119
|
+
quality,
|
|
120
|
+
targetSize: targetBytes,
|
|
121
|
+
tolerance,
|
|
122
|
+
onProgress: onProgress
|
|
123
|
+
? (e) => onProgress({ ...e, percent: 80 + Math.round(e.percent * 0.2) })
|
|
124
|
+
: undefined,
|
|
125
|
+
});
|
|
126
|
+
blob = result.blob;
|
|
127
|
+
actualQuality = result.quality;
|
|
128
|
+
actualFormat = result.format;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
const mimeType = getMimeTypeForFormat(format);
|
|
132
|
+
const q = quality / 100;
|
|
133
|
+
let encoded;
|
|
134
|
+
if (format === 'png' || format === 'bmp' || format === 'gif') {
|
|
135
|
+
encoded = await canvasToBlob(canvas, mimeType);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
encoded = await canvasToBlob(canvas, mimeType, q);
|
|
139
|
+
}
|
|
140
|
+
if (!encoded) {
|
|
141
|
+
throw new Error(`DRP: Failed to encode to ${format}`);
|
|
142
|
+
}
|
|
143
|
+
blob = encoded;
|
|
144
|
+
}
|
|
145
|
+
if (metaOpts && (metaOpts.preserve || metaOpts.custom)) {
|
|
146
|
+
blob = await exportWithMetadata(blob, actualFormat, metaOpts);
|
|
147
|
+
}
|
|
148
|
+
onProgress?.({ phase: 'complete', percent: 100, message: 'Done' });
|
|
149
|
+
return {
|
|
150
|
+
blob,
|
|
151
|
+
size: blob.size,
|
|
152
|
+
format: actualFormat,
|
|
153
|
+
quality: actualQuality,
|
|
154
|
+
width: canvas.width,
|
|
155
|
+
height: canvas.height,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function getMimeTypeForFormat(format) {
|
|
159
|
+
const map = {
|
|
160
|
+
jpeg: 'image/jpeg',
|
|
161
|
+
png: 'image/png',
|
|
162
|
+
webp: 'image/webp',
|
|
163
|
+
avif: 'image/avif',
|
|
164
|
+
gif: 'image/gif',
|
|
165
|
+
bmp: 'image/bmp',
|
|
166
|
+
};
|
|
167
|
+
return map[format] || 'image/webp';
|
|
168
|
+
}
|
|
169
|
+
function canvasToBlob(canvas, mimeType, quality) {
|
|
170
|
+
return new Promise((resolve) => {
|
|
171
|
+
canvas.toBlob(resolve, mimeType, quality);
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
function DRP(source, options) {
|
|
175
|
+
return process(source, options);
|
|
176
|
+
}
|
|
177
|
+
DRP.process = process;
|
|
178
|
+
DRP.version = () => VERSION;
|
|
179
|
+
DRP.formats = () => ['jpeg', 'png', 'webp', 'avif', 'gif', 'bmp'];
|
|
180
|
+
DRP.filters = () => [
|
|
181
|
+
'original', 'vintage', 'blackAndWhite', 'warm', 'cool',
|
|
182
|
+
'cinematic', 'fade', 'dramatic', 'soft', 'highContrast',
|
|
183
|
+
];
|
|
184
|
+
DRP.presets = () => EXPORT_PRESETS;
|
|
185
|
+
DRP.editor = (source) => createEditor(source);
|
|
186
|
+
DRP.batch = (files, operation, onProgress) => batchProcess(files, operation, onProgress);
|
|
187
|
+
DRP.validate = (file, maxSize) => validateFileSize(file, maxSize);
|
|
188
|
+
DRP.preview = (source, format) => getCompressionPreview(source, format);
|
|
189
|
+
DRP.readMetadata = (source) => readMetadata(source);
|
|
190
|
+
export { DRP };
|
|
191
|
+
//# sourceMappingURL=drp-class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drp-class.js","sourceRoot":"","sources":["../src/drp-class.ts"],"names":[],"mappings":"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"}
|
package/dist/drp.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ImageFormat } from './types';
|
|
2
|
+
export declare const DRP_NAME = "Digital Resolution Pro";
|
|
3
|
+
export declare const DRP_VERSION = "1.0.0";
|
|
4
|
+
export declare const DRP_TAG = "drp";
|
|
5
|
+
export declare function getDRPVersion(): string;
|
|
6
|
+
export declare function getDRPInfo(): {
|
|
7
|
+
name: string;
|
|
8
|
+
version: string;
|
|
9
|
+
tag: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function getDRPFilename(originalName: string, format?: ImageFormat): string;
|
|
12
|
+
export declare function isDRPFile(filename: string): boolean;
|
|
13
|
+
export declare function stripDRPTag(filename: string): string;
|
|
14
|
+
//# sourceMappingURL=drp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drp.d.ts","sourceRoot":"","sources":["../src/drp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,eAAO,MAAM,QAAQ,2BAA2B,CAAC;AACjD,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,OAAO,QAAQ,CAAC;AAE7B,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,UAAU,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAE3E;AAED,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAIjF;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
package/dist/drp.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { getExtension } from './convert';
|
|
2
|
+
export const DRP_NAME = 'Digital Resolution Pro';
|
|
3
|
+
export const DRP_VERSION = '1.0.0';
|
|
4
|
+
export const DRP_TAG = 'drp';
|
|
5
|
+
export function getDRPVersion() {
|
|
6
|
+
return DRP_VERSION;
|
|
7
|
+
}
|
|
8
|
+
export function getDRPInfo() {
|
|
9
|
+
return { name: DRP_NAME, version: DRP_VERSION, tag: DRP_TAG };
|
|
10
|
+
}
|
|
11
|
+
export function getDRPFilename(originalName, format) {
|
|
12
|
+
const baseName = originalName.replace(/\.[^/.]+$/, '');
|
|
13
|
+
const ext = format ? getExtension(format) : '.' + originalName.split('.').pop();
|
|
14
|
+
return `${baseName}-${DRP_TAG}${ext}`;
|
|
15
|
+
}
|
|
16
|
+
export function isDRPFile(filename) {
|
|
17
|
+
const pattern = new RegExp(`-${DRP_TAG}\\.[^.]+$`);
|
|
18
|
+
return pattern.test(filename);
|
|
19
|
+
}
|
|
20
|
+
export function stripDRPTag(filename) {
|
|
21
|
+
return filename.replace(new RegExp(`-${DRP_TAG}(\\.[^.]+)$`), '$1');
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=drp.js.map
|
package/dist/drp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drp.js","sourceRoot":"","sources":["../src/drp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,CAAC,MAAM,QAAQ,GAAG,wBAAwB,CAAC;AACjD,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC;AAE7B,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,YAAoB,EAAE,MAAoB;IACvE,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAChF,OAAO,GAAG,QAAQ,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,OAAO,WAAW,CAAC,CAAC;IACnD,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,OAAO,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC"}
|
package/dist/editor.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { CropOptions, ResizeOptions, RotateOptions, FlipOptions, Adjustments, FilterPreset, ExportOptions, CompressionTargetOptions, Layer } from './types';
|
|
2
|
+
export interface Editor {
|
|
3
|
+
getWidth(): number;
|
|
4
|
+
getHeight(): number;
|
|
5
|
+
getCanvas(): HTMLCanvasElement;
|
|
6
|
+
crop(options: CropOptions): void;
|
|
7
|
+
resize(options: ResizeOptions): void;
|
|
8
|
+
rotate(options: RotateOptions): void;
|
|
9
|
+
flip(options: FlipOptions): void;
|
|
10
|
+
adjust(adjustments: Adjustments): void;
|
|
11
|
+
applyFilter(filter: FilterPreset): void;
|
|
12
|
+
addLayer(layer: Layer): void;
|
|
13
|
+
removeLayer(layerId: string): void;
|
|
14
|
+
getLayers(): Layer[];
|
|
15
|
+
export(options: ExportOptions): Promise<Blob>;
|
|
16
|
+
compress(options: CompressionTargetOptions): Promise<Blob>;
|
|
17
|
+
undo(): void;
|
|
18
|
+
redo(): void;
|
|
19
|
+
canUndo(): boolean;
|
|
20
|
+
canRedo(): boolean;
|
|
21
|
+
reset(): void;
|
|
22
|
+
}
|
|
23
|
+
export declare function createEditor(source: HTMLImageElement | string | File): Promise<Editor>;
|
|
24
|
+
//# sourceMappingURL=editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACX,aAAa,EACb,aAAa,EACb,WAAW,EACX,WAAW,EACX,YAAY,EACZ,aAAa,EACb,wBAAwB,EACxB,KAAK,EACN,MAAM,SAAS,CAAC;AAYjB,MAAM,WAAW,MAAM;IACrB,QAAQ,IAAI,MAAM,CAAC;IACnB,SAAS,IAAI,MAAM,CAAC;IACpB,SAAS,IAAI,iBAAiB,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IACvC,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,SAAS,IAAI,KAAK,EAAE,CAAC;IACrB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,IAAI,IAAI,CAAC;IACb,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,IAAI,OAAO,CAAC;IACnB,OAAO,IAAI,OAAO,CAAC;IACnB,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,GACvC,OAAO,CAAC,MAAM,CAAC,CA6KjB"}
|
package/dist/editor.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { loadImage, imageToCanvas } from './loader';
|
|
2
|
+
import { cropCanvas } from './crop';
|
|
3
|
+
import { resizeCanvas } from './resize';
|
|
4
|
+
import { rotateCanvas, flipCanvas } from './transform';
|
|
5
|
+
import { applyAdjustments } from './adjustments';
|
|
6
|
+
import { applyFilter } from './filters';
|
|
7
|
+
import { convertImage } from './convert';
|
|
8
|
+
import { renderLayersToCanvas, getMaxZIndex } from './layers';
|
|
9
|
+
import { exportWithMetadata } from './metadata';
|
|
10
|
+
import { compressToTargetSize } from './compress';
|
|
11
|
+
export async function createEditor(source) {
|
|
12
|
+
let img;
|
|
13
|
+
if (typeof source === 'string' || source instanceof File) {
|
|
14
|
+
img = await loadImage(source);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
img = source;
|
|
18
|
+
}
|
|
19
|
+
const originalCanvas = imageToCanvas(img);
|
|
20
|
+
let currentCanvas = originalCanvas;
|
|
21
|
+
const state = {
|
|
22
|
+
width: originalCanvas.width,
|
|
23
|
+
height: originalCanvas.height,
|
|
24
|
+
layers: [],
|
|
25
|
+
adjustments: {},
|
|
26
|
+
filter: 'original',
|
|
27
|
+
history: [],
|
|
28
|
+
historyIndex: -1,
|
|
29
|
+
};
|
|
30
|
+
function saveState() {
|
|
31
|
+
state.history = state.history.slice(0, state.historyIndex + 1);
|
|
32
|
+
state.history.push({
|
|
33
|
+
...state,
|
|
34
|
+
layers: [...state.layers],
|
|
35
|
+
adjustments: { ...state.adjustments },
|
|
36
|
+
});
|
|
37
|
+
state.historyIndex = state.history.length - 1;
|
|
38
|
+
}
|
|
39
|
+
function applyAllTransformations() {
|
|
40
|
+
let canvas = originalCanvas;
|
|
41
|
+
canvas = applyAdjustments(canvas, state.adjustments);
|
|
42
|
+
canvas = applyFilter(canvas, state.filter);
|
|
43
|
+
if (state.layers.length > 0) {
|
|
44
|
+
const layersCanvas = renderLayersToCanvas(state.layers, state.width, state.height);
|
|
45
|
+
const ctx = canvas.getContext('2d');
|
|
46
|
+
ctx.drawImage(layersCanvas, 0, 0);
|
|
47
|
+
}
|
|
48
|
+
return canvas;
|
|
49
|
+
}
|
|
50
|
+
saveState();
|
|
51
|
+
return {
|
|
52
|
+
getWidth: () => currentCanvas.width,
|
|
53
|
+
getHeight: () => currentCanvas.height,
|
|
54
|
+
getCanvas: () => currentCanvas,
|
|
55
|
+
crop: (options) => {
|
|
56
|
+
currentCanvas = cropCanvas(currentCanvas, options);
|
|
57
|
+
state.width = currentCanvas.width;
|
|
58
|
+
state.height = currentCanvas.height;
|
|
59
|
+
saveState();
|
|
60
|
+
},
|
|
61
|
+
resize: (options) => {
|
|
62
|
+
currentCanvas = resizeCanvas(currentCanvas, options);
|
|
63
|
+
state.width = currentCanvas.width;
|
|
64
|
+
state.height = currentCanvas.height;
|
|
65
|
+
saveState();
|
|
66
|
+
},
|
|
67
|
+
rotate: (options) => {
|
|
68
|
+
currentCanvas = rotateCanvas(currentCanvas, options);
|
|
69
|
+
state.width = currentCanvas.width;
|
|
70
|
+
state.height = currentCanvas.height;
|
|
71
|
+
saveState();
|
|
72
|
+
},
|
|
73
|
+
flip: (options) => {
|
|
74
|
+
currentCanvas = flipCanvas(currentCanvas, options);
|
|
75
|
+
saveState();
|
|
76
|
+
},
|
|
77
|
+
adjust: (adjustments) => {
|
|
78
|
+
state.adjustments = { ...state.adjustments, ...adjustments };
|
|
79
|
+
currentCanvas = applyAllTransformations();
|
|
80
|
+
saveState();
|
|
81
|
+
},
|
|
82
|
+
applyFilter: (filter) => {
|
|
83
|
+
state.filter = filter;
|
|
84
|
+
currentCanvas = applyAllTransformations();
|
|
85
|
+
saveState();
|
|
86
|
+
},
|
|
87
|
+
addLayer: (layer) => {
|
|
88
|
+
const maxZ = getMaxZIndex(state.layers);
|
|
89
|
+
layer.zIndex = maxZ + 1;
|
|
90
|
+
state.layers.push(layer);
|
|
91
|
+
currentCanvas = applyAllTransformations();
|
|
92
|
+
saveState();
|
|
93
|
+
},
|
|
94
|
+
removeLayer: (layerId) => {
|
|
95
|
+
state.layers = state.layers.filter((l) => l.id !== layerId);
|
|
96
|
+
currentCanvas = applyAllTransformations();
|
|
97
|
+
saveState();
|
|
98
|
+
},
|
|
99
|
+
getLayers: () => [...state.layers],
|
|
100
|
+
export: async (options) => {
|
|
101
|
+
let blob = await convertImage(currentCanvas, options);
|
|
102
|
+
if (options.metadata) {
|
|
103
|
+
blob = await exportWithMetadata(blob, options.format, options.metadata);
|
|
104
|
+
}
|
|
105
|
+
return blob;
|
|
106
|
+
},
|
|
107
|
+
compress: async (options) => {
|
|
108
|
+
const result = await compressToTargetSize(currentCanvas, options);
|
|
109
|
+
if (options.metadata) {
|
|
110
|
+
return exportWithMetadata(result.blob, options.format, options.metadata);
|
|
111
|
+
}
|
|
112
|
+
return result.blob;
|
|
113
|
+
},
|
|
114
|
+
undo: () => {
|
|
115
|
+
if (state.historyIndex > 0) {
|
|
116
|
+
state.historyIndex--;
|
|
117
|
+
const prev = state.history[state.historyIndex];
|
|
118
|
+
state.width = prev.width;
|
|
119
|
+
state.height = prev.height;
|
|
120
|
+
state.layers = [...prev.layers];
|
|
121
|
+
state.adjustments = { ...prev.adjustments };
|
|
122
|
+
state.filter = prev.filter;
|
|
123
|
+
currentCanvas = applyAllTransformations();
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
redo: () => {
|
|
127
|
+
if (state.historyIndex < state.history.length - 1) {
|
|
128
|
+
state.historyIndex++;
|
|
129
|
+
const next = state.history[state.historyIndex];
|
|
130
|
+
state.width = next.width;
|
|
131
|
+
state.height = next.height;
|
|
132
|
+
state.layers = [...next.layers];
|
|
133
|
+
state.adjustments = { ...next.adjustments };
|
|
134
|
+
state.filter = next.filter;
|
|
135
|
+
currentCanvas = applyAllTransformations();
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
canUndo: () => state.historyIndex > 0,
|
|
139
|
+
canRedo: () => state.historyIndex < state.history.length - 1,
|
|
140
|
+
reset: () => {
|
|
141
|
+
currentCanvas = originalCanvas;
|
|
142
|
+
state.width = originalCanvas.width;
|
|
143
|
+
state.height = originalCanvas.height;
|
|
144
|
+
state.layers = [];
|
|
145
|
+
state.adjustments = {};
|
|
146
|
+
state.filter = 'original';
|
|
147
|
+
state.history = [];
|
|
148
|
+
state.historyIndex = -1;
|
|
149
|
+
saveState();
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { FilterPreset } from './types';
|
|
2
|
+
interface FilterConfig {
|
|
3
|
+
brightness: number;
|
|
4
|
+
contrast: number;
|
|
5
|
+
saturation: number;
|
|
6
|
+
temperature: number;
|
|
7
|
+
tint: number;
|
|
8
|
+
grayscale: boolean;
|
|
9
|
+
sepia: boolean;
|
|
10
|
+
hueRotate: number;
|
|
11
|
+
blur: number;
|
|
12
|
+
opacity: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function getFilterConfig(preset: FilterPreset): FilterConfig;
|
|
15
|
+
export declare function applyFilter(canvas: HTMLCanvasElement, preset: FilterPreset): HTMLCanvasElement;
|
|
16
|
+
export declare const AVAILABLE_FILTERS: FilterPreset[];
|
|
17
|
+
export declare function getFilterName(preset: FilterPreset): string;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../src/filters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,UAAU,YAAY;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AA6HD,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAElE;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,YAAY,GACnB,iBAAiB,CA6DnB;AAED,eAAO,MAAM,iBAAiB,EAAE,YAAY,EAW3C,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAc1D"}
|