@ablogcms/lib 3.2.28-beta.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/README.md +29 -0
- package/dist/a-table/index.d.ts +10 -0
- package/dist/a-table/index.mjs +48 -0
- package/dist/a-table/index.mjs.map +1 -0
- package/dist/acms.d.ts +8 -0
- package/dist/acms.mjs +1 -0
- package/dist/acms.mjs.map +1 -0
- package/dist/chunk-AMZYQ4DG.mjs +344 -0
- package/dist/chunk-AMZYQ4DG.mjs.map +1 -0
- package/dist/chunk-W7TT2YZB.mjs +271 -0
- package/dist/chunk-W7TT2YZB.mjs.map +1 -0
- package/dist/chunk-ZPZHEKTI.mjs +20 -0
- package/dist/chunk-ZPZHEKTI.mjs.map +1 -0
- package/dist/command.d.ts +5 -0
- package/dist/command.mjs +63 -0
- package/dist/command.mjs.map +1 -0
- package/dist/create-pdf.d.ts +1 -0
- package/dist/create-pdf.mjs +27 -0
- package/dist/create-pdf.mjs.map +1 -0
- package/dist/events.d.ts +210 -0
- package/dist/flatpicker/date-picker.d.ts +6 -0
- package/dist/flatpicker/date-picker.mjs +28 -0
- package/dist/flatpicker/date-picker.mjs.map +1 -0
- package/dist/flatpicker/time-picker.d.ts +6 -0
- package/dist/flatpicker/time-picker.mjs +28 -0
- package/dist/flatpicker/time-picker.mjs.map +1 -0
- package/dist/geolocation.d.ts +1 -0
- package/dist/geolocation.mjs +30 -0
- package/dist/geolocation.mjs.map +1 -0
- package/dist/google-maps/google-maps.d.ts +6 -0
- package/dist/google-maps/google-maps.mjs +105 -0
- package/dist/google-maps/google-maps.mjs.map +1 -0
- package/dist/google-maps/loader.d.ts +9 -0
- package/dist/google-maps/loader.mjs +7 -0
- package/dist/google-maps/loader.mjs.map +1 -0
- package/dist/google-maps/picker/google-maps-picker.d.ts +72 -0
- package/dist/google-maps/picker/index.d.ts +5 -0
- package/dist/google-maps/picker/index.mjs +483 -0
- package/dist/google-maps/picker/index.mjs.map +1 -0
- package/dist/google-maps/street-view.d.ts +2 -0
- package/dist/google-maps/street-view.mjs +25 -0
- package/dist/google-maps/street-view.mjs.map +1 -0
- package/dist/htmx/geolocation.d.ts +1 -0
- package/dist/htmx/geolocation.mjs +40 -0
- package/dist/htmx/geolocation.mjs.map +1 -0
- package/dist/icons.d.ts +2 -0
- package/dist/icons.mjs +181 -0
- package/dist/icons.mjs.map +1 -0
- package/dist/lazy-load/index.d.ts +2 -0
- package/dist/lazy-load/index.mjs +21 -0
- package/dist/lazy-load/index.mjs.map +1 -0
- package/dist/lite-editor/index.d.ts +87 -0
- package/dist/lite-editor/index.mjs +274 -0
- package/dist/lite-editor/index.mjs.map +1 -0
- package/dist/lite-editor-field/index.d.ts +8 -0
- package/dist/lite-editor-field/index.mjs +18 -0
- package/dist/lite-editor-field/index.mjs.map +1 -0
- package/dist/loader/index.d.ts +2 -0
- package/dist/loader/index.mjs +262 -0
- package/dist/loader/index.mjs.map +1 -0
- package/dist/loader/loader.d.ts +29 -0
- package/dist/loader/sync-loader.d.ts +104 -0
- package/dist/open-street-map/open-street-map.d.ts +2 -0
- package/dist/open-street-map/open-street-map.mjs +60 -0
- package/dist/open-street-map/open-street-map.mjs.map +1 -0
- package/dist/open-street-map/picker/index.d.ts +6 -0
- package/dist/open-street-map/picker/index.mjs +50 -0
- package/dist/open-street-map/picker/index.mjs.map +1 -0
- package/dist/open-street-map/picker/open-street-map-picker.d.ts +55 -0
- package/dist/open-street-map/picker/open-street-map-picker.mjs +7 -0
- package/dist/open-street-map/picker/open-street-map-picker.mjs.map +1 -0
- package/dist/pdf2image.d.ts +21 -0
- package/dist/pdf2image.mjs +115 -0
- package/dist/pdf2image.mjs.map +1 -0
- package/dist/polyfill/index.d.ts +1 -0
- package/dist/polyfill/index.mjs +40 -0
- package/dist/polyfill/index.mjs.map +1 -0
- package/dist/read-files.d.ts +14 -0
- package/dist/read-files.mjs +62 -0
- package/dist/read-files.mjs.map +1 -0
- package/dist/resize-image/resize-image.d.ts +71 -0
- package/dist/resize-image/resize-image.mjs +308 -0
- package/dist/resize-image/resize-image.mjs.map +1 -0
- package/dist/resize-image/util.d.ts +134 -0
- package/dist/resize-image/util.mjs +7 -0
- package/dist/resize-image/util.mjs.map +1 -0
- package/dist/select2/index.d.ts +1 -0
- package/dist/select2/index.mjs +33 -0
- package/dist/select2/index.mjs.map +1 -0
- package/dist/trumbowyg.d.ts +12 -0
- package/dist/wysiwyg.d.ts +2 -0
- package/dist/wysiwyg.mjs +21 -0
- package/dist/wysiwyg.mjs.map +1 -0
- package/dist/zxcvbn/index.d.ts +2 -0
- package/dist/zxcvbn/index.mjs +35 -0
- package/dist/zxcvbn/index.mjs.map +1 -0
- package/package.json +203 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// src/pdf2image.js
|
|
2
|
+
import * as pdfjs from "pdfjs-dist/legacy/build/pdf.mjs";
|
|
3
|
+
var Pdf2Image = class {
|
|
4
|
+
/**
|
|
5
|
+
* Constructor
|
|
6
|
+
*
|
|
7
|
+
* @param url
|
|
8
|
+
*/
|
|
9
|
+
constructor(url) {
|
|
10
|
+
this.url = url;
|
|
11
|
+
this.baseUrl = `${ACMS.Config.root}js/dest/`;
|
|
12
|
+
this.currentPage = 1;
|
|
13
|
+
this.numPages = -1;
|
|
14
|
+
this.document = null;
|
|
15
|
+
pdfjs.GlobalWorkerOptions.workerSrc = `${this.baseUrl}pdf.worker.js`;
|
|
16
|
+
}
|
|
17
|
+
async hasPrevPage() {
|
|
18
|
+
return this.currentPage > 1;
|
|
19
|
+
}
|
|
20
|
+
async hasNextPage() {
|
|
21
|
+
if (this.numPages < 1) {
|
|
22
|
+
this.numPages = await this.getPages();
|
|
23
|
+
}
|
|
24
|
+
if (this.currentPage < this.numPages) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
async getPrevImage(width = 0) {
|
|
30
|
+
if (await this.hasPrevPage()) {
|
|
31
|
+
return this.getPageImage(this.currentPage - 1, width);
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
async getNextImage(width = 0) {
|
|
36
|
+
if (await this.hasNextPage()) {
|
|
37
|
+
return this.getPageImage(this.currentPage + 1, width);
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
async getPages() {
|
|
42
|
+
try {
|
|
43
|
+
const pdfDocument = await this.getDocument();
|
|
44
|
+
return pdfDocument.numPages;
|
|
45
|
+
} catch (e) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async getPageImage(page, width = 0) {
|
|
50
|
+
try {
|
|
51
|
+
const canvas = document.createElement("canvas");
|
|
52
|
+
await this.toCanvas(canvas, page, width);
|
|
53
|
+
this.currentPage = page;
|
|
54
|
+
return canvas.toDataURL("image/jpeg");
|
|
55
|
+
} catch (e) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async toCanvas(canvas, page, width) {
|
|
60
|
+
const pdfDocument = await this.getDocument();
|
|
61
|
+
const pdfPage = await pdfDocument.getPage(page);
|
|
62
|
+
let viewport = pdfPage.getViewport({ scale: 1 });
|
|
63
|
+
if (width > 0) {
|
|
64
|
+
const ratio = width / viewport.width;
|
|
65
|
+
viewport = pdfPage.getViewport({ scale: ratio });
|
|
66
|
+
}
|
|
67
|
+
const IMAGE_RESOLUTION = 150;
|
|
68
|
+
const outputScale = width > 0 ? 1 : IMAGE_RESOLUTION / 72;
|
|
69
|
+
canvas.height = Math.floor(viewport.height * outputScale);
|
|
70
|
+
canvas.width = Math.floor(viewport.width * outputScale);
|
|
71
|
+
const context = canvas.getContext("2d");
|
|
72
|
+
if (context === null) {
|
|
73
|
+
throw new Error("Failed to get 2D rendering context from canvas.");
|
|
74
|
+
}
|
|
75
|
+
context.save();
|
|
76
|
+
context.fillStyle = "rgb(255, 255, 255)";
|
|
77
|
+
context.fillRect(0, 0, canvas.width, canvas.height);
|
|
78
|
+
context.restore();
|
|
79
|
+
return pdfPage.render({
|
|
80
|
+
canvasContext: context,
|
|
81
|
+
transform: [outputScale, 0, 0, outputScale, 0, 0],
|
|
82
|
+
viewport
|
|
83
|
+
}).promise;
|
|
84
|
+
}
|
|
85
|
+
getDocument() {
|
|
86
|
+
return new Promise((resolve, reject) => {
|
|
87
|
+
if (this.document) {
|
|
88
|
+
resolve(this.document);
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
const src = {
|
|
92
|
+
cMapUrl: `${this.baseUrl}cmaps/`,
|
|
93
|
+
cMapPacked: true
|
|
94
|
+
};
|
|
95
|
+
if (typeof this.url === "string") {
|
|
96
|
+
src.url = this.url;
|
|
97
|
+
} else {
|
|
98
|
+
src.data = this.url;
|
|
99
|
+
}
|
|
100
|
+
pdfjs.getDocument(src).promise.then((document2) => {
|
|
101
|
+
this.document = document2;
|
|
102
|
+
resolve(this.document);
|
|
103
|
+
}).catch((e) => {
|
|
104
|
+
reject(e);
|
|
105
|
+
});
|
|
106
|
+
} catch (e) {
|
|
107
|
+
reject(e);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
export {
|
|
113
|
+
Pdf2Image as default
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=pdf2image.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/pdf2image.js"],"sourcesContent":["import * as pdfjs from 'pdfjs-dist/legacy/build/pdf.mjs';\n\nexport default class Pdf2Image {\n /**\n * Constructor\n *\n * @param url\n */\n constructor(url) {\n this.url = url;\n this.baseUrl = `${ACMS.Config.root}js/dest/`;\n this.currentPage = 1;\n this.numPages = -1;\n this.document = null;\n pdfjs.GlobalWorkerOptions.workerSrc = `${this.baseUrl}pdf.worker.js`;\n }\n\n async hasPrevPage() {\n return this.currentPage > 1;\n }\n\n async hasNextPage() {\n if (this.numPages < 1) {\n this.numPages = await this.getPages();\n }\n if (this.currentPage < this.numPages) {\n return true;\n }\n return false;\n }\n\n async getPrevImage(width = 0) {\n if (await this.hasPrevPage()) {\n return this.getPageImage(this.currentPage - 1, width);\n }\n return false;\n }\n\n async getNextImage(width = 0) {\n if (await this.hasNextPage()) {\n return this.getPageImage(this.currentPage + 1, width);\n }\n return false;\n }\n\n async getPages() {\n try {\n const pdfDocument = await this.getDocument();\n return pdfDocument.numPages;\n } catch (e) {\n return false;\n }\n }\n\n async getPageImage(page, width = 0) {\n try {\n const canvas = document.createElement('canvas');\n await this.toCanvas(canvas, page, width);\n this.currentPage = page;\n return canvas.toDataURL('image/jpeg');\n } catch (e) {\n return false;\n }\n }\n\n async toCanvas(canvas, page, width) {\n const pdfDocument = await this.getDocument();\n const pdfPage = await pdfDocument.getPage(page);\n let viewport = pdfPage.getViewport({ scale: 1 });\n if (width > 0) {\n const ratio = width / viewport.width;\n viewport = pdfPage.getViewport({ scale: ratio });\n }\n\n const IMAGE_RESOLUTION = 150; // widthが指定されていない場合の解像度\n const outputScale = width > 0 ? 1 : IMAGE_RESOLUTION / 72.0;\n\n canvas.height = Math.floor(viewport.height * outputScale);\n canvas.width = Math.floor(viewport.width * outputScale);\n\n const context = canvas.getContext('2d');\n if (context === null) {\n throw new Error('Failed to get 2D rendering context from canvas.');\n }\n context.save();\n context.fillStyle = 'rgb(255, 255, 255)';\n context.fillRect(0, 0, canvas.width, canvas.height);\n context.restore();\n\n return pdfPage.render({\n canvasContext: context,\n transform: [outputScale, 0, 0, outputScale, 0, 0],\n viewport,\n }).promise;\n }\n\n getDocument() {\n return new Promise((resolve, reject) => {\n if (this.document) {\n resolve(this.document);\n }\n try {\n const src = {\n cMapUrl: `${this.baseUrl}cmaps/`,\n cMapPacked: true,\n };\n if (typeof this.url === 'string') {\n src.url = this.url;\n } else {\n src.data = this.url;\n }\n pdfjs\n .getDocument(src)\n .promise.then((document) => {\n this.document = document;\n resolve(this.document);\n })\n .catch((e) => {\n reject(e);\n });\n } catch (e) {\n reject(e);\n }\n });\n }\n}\n"],"mappings":"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","names":["document"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// src/polyfill/index.js
|
|
2
|
+
import "core-js/features/promise";
|
|
3
|
+
import "core-js/features/object/assign";
|
|
4
|
+
import "core-js/features/symbol";
|
|
5
|
+
import "core-js/features/array/from";
|
|
6
|
+
import "canvas-toBlob";
|
|
7
|
+
window.addEventListener("unhandledrejection", () => {
|
|
8
|
+
});
|
|
9
|
+
window.onunhandledrejection = () => {
|
|
10
|
+
};
|
|
11
|
+
if (!Element.prototype.matches) {
|
|
12
|
+
Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
|
|
13
|
+
}
|
|
14
|
+
if (!Element.prototype.closest) {
|
|
15
|
+
Element.prototype.closest = function(value) {
|
|
16
|
+
let element = this;
|
|
17
|
+
do {
|
|
18
|
+
if (element.matches(value)) return element;
|
|
19
|
+
element = element.parentelementement || element.parentNode;
|
|
20
|
+
} while (element !== null && element.nodeType === 1);
|
|
21
|
+
return null;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
if (window.navigator.userAgent === void 0) {
|
|
25
|
+
window.navigator.userAgent = "";
|
|
26
|
+
window.navigator.appVersion = "";
|
|
27
|
+
window.navigator.platform = "";
|
|
28
|
+
if (window.navigator.userAgentData !== void 0) {
|
|
29
|
+
const uaData = window.navigator.userAgentData;
|
|
30
|
+
const brand = uaData.brands[uaData.brands.length - 1];
|
|
31
|
+
let uaString = `dummy_${uaData.platform}_AppleWebKit_${brand.brand}_xxxx`;
|
|
32
|
+
if (uaData.mobile === true) {
|
|
33
|
+
uaString += "_Mobile_xxxx";
|
|
34
|
+
}
|
|
35
|
+
window.navigator.userAgent = uaString;
|
|
36
|
+
window.navigator.appVersion = brand.version;
|
|
37
|
+
window.navigator.platform = uaData.platform;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/polyfill/index.js"],"sourcesContent":["// reactを動かすのに必要なpolyfill\nimport 'core-js/features/promise';\nimport 'core-js/features/object/assign';\nimport 'core-js/features/symbol';\nimport 'core-js/features/array/from';\nimport 'canvas-toBlob';\n\nwindow.addEventListener('unhandledrejection', () => {});\n\nwindow.onunhandledrejection = () => {};\n\nif (!Element.prototype.matches) {\n Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n}\nif (!Element.prototype.closest) {\n Element.prototype.closest = function (value) {\n let element = this;\n do {\n if (element.matches(value)) return element;\n element = element.parentelementement || element.parentNode;\n } while (element !== null && element.nodeType === 1);\n return null;\n };\n}\n\nif (window.navigator.userAgent === undefined) {\n window.navigator.userAgent = '';\n window.navigator.appVersion = '';\n window.navigator.platform = '';\n\n if (window.navigator.userAgentData !== undefined) {\n const uaData = window.navigator.userAgentData;\n const brand = uaData.brands[uaData.brands.length - 1];\n let uaString = `dummy_${uaData.platform}_AppleWebKit_${brand.brand}_xxxx`;\n if (uaData.mobile === true) {\n uaString += '_Mobile_xxxx';\n }\n window.navigator.userAgent = uaString;\n window.navigator.appVersion = brand.version;\n window.navigator.platform = uaData.platform;\n }\n}\n"],"mappings":";AACA,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AAEP,OAAO,iBAAiB,sBAAsB,MAAM;AAAC,CAAC;AAEtD,OAAO,uBAAuB,MAAM;AAAC;AAErC,IAAI,CAAC,QAAQ,UAAU,SAAS;AAC9B,UAAQ,UAAU,UAAU,QAAQ,UAAU,qBAAqB,QAAQ,UAAU;AACvF;AACA,IAAI,CAAC,QAAQ,UAAU,SAAS;AAC9B,UAAQ,UAAU,UAAU,SAAU,OAAO;AAC3C,QAAI,UAAU;AACd,OAAG;AACD,UAAI,QAAQ,QAAQ,KAAK,EAAG,QAAO;AACnC,gBAAU,QAAQ,sBAAsB,QAAQ;AAAA,IAClD,SAAS,YAAY,QAAQ,QAAQ,aAAa;AAClD,WAAO;AAAA,EACT;AACF;AAEA,IAAI,OAAO,UAAU,cAAc,QAAW;AAC5C,SAAO,UAAU,YAAY;AAC7B,SAAO,UAAU,aAAa;AAC9B,SAAO,UAAU,WAAW;AAE5B,MAAI,OAAO,UAAU,kBAAkB,QAAW;AAChD,UAAM,SAAS,OAAO,UAAU;AAChC,UAAM,QAAQ,OAAO,OAAO,OAAO,OAAO,SAAS,CAAC;AACpD,QAAI,WAAW,SAAS,OAAO,QAAQ,gBAAgB,MAAM,KAAK;AAClE,QAAI,OAAO,WAAW,MAAM;AAC1B,kBAAY;AAAA,IACd;AACA,WAAO,UAAU,YAAY;AAC7B,WAAO,UAAU,aAAa,MAAM;AACpC,WAAO,UAAU,WAAW,OAAO;AAAA,EACrC;AACF;","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type ExtendedFile = {
|
|
2
|
+
file: File;
|
|
3
|
+
filetype: 'image';
|
|
4
|
+
preview: string;
|
|
5
|
+
blob?: Blob | null;
|
|
6
|
+
} | {
|
|
7
|
+
file: File;
|
|
8
|
+
filetype: 'file';
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* ファイルが画像 (HEIC/HEIF を含む) かどうかを MIME タイプで判定する。
|
|
12
|
+
*/
|
|
13
|
+
export declare const isImageFile: (file: File) => boolean;
|
|
14
|
+
export default function readFiles(files: File[] | FileList): Promise<ExtendedFile[]>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// src/read-files.ts
|
|
2
|
+
var isImageFile = (file) => /(heic|heif)/i.test(file.type) || /image.*/.test(file.type);
|
|
3
|
+
function readFiles(files) {
|
|
4
|
+
const promises = [];
|
|
5
|
+
Array.from(files).forEach((f) => {
|
|
6
|
+
const promise = new Promise((resolve, reject) => {
|
|
7
|
+
const objFileReader = new FileReader();
|
|
8
|
+
if (/(heic|heif)/i.test(f.type)) {
|
|
9
|
+
let convertedBlob = null;
|
|
10
|
+
objFileReader.onload = () => {
|
|
11
|
+
resolve({
|
|
12
|
+
file: f,
|
|
13
|
+
filetype: "image",
|
|
14
|
+
preview: objFileReader.result,
|
|
15
|
+
blob: convertedBlob
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
(async () => {
|
|
19
|
+
const { heicTo } = await import(
|
|
20
|
+
/* webpackChunkName: "heic-to" */
|
|
21
|
+
"heic-to"
|
|
22
|
+
);
|
|
23
|
+
const blob = await heicTo({
|
|
24
|
+
blob: f,
|
|
25
|
+
type: "image/jpeg"
|
|
26
|
+
});
|
|
27
|
+
if (blob instanceof Blob) {
|
|
28
|
+
convertedBlob = blob;
|
|
29
|
+
objFileReader.readAsDataURL(blob);
|
|
30
|
+
}
|
|
31
|
+
})();
|
|
32
|
+
} else if (isImageFile(f)) {
|
|
33
|
+
objFileReader.onload = () => {
|
|
34
|
+
resolve({
|
|
35
|
+
file: f,
|
|
36
|
+
filetype: "image",
|
|
37
|
+
preview: objFileReader.result
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
objFileReader.readAsDataURL(f);
|
|
41
|
+
} else {
|
|
42
|
+
objFileReader.onload = () => {
|
|
43
|
+
resolve({
|
|
44
|
+
file: f,
|
|
45
|
+
filetype: "file"
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
objFileReader.readAsDataURL(f);
|
|
49
|
+
}
|
|
50
|
+
objFileReader.onerror = () => {
|
|
51
|
+
reject(new Error(`Failed to read file: ${f.name}`));
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
promises.push(promise);
|
|
55
|
+
});
|
|
56
|
+
return Promise.all(promises);
|
|
57
|
+
}
|
|
58
|
+
export {
|
|
59
|
+
readFiles as default,
|
|
60
|
+
isImageFile
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=read-files.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/read-files.ts"],"sourcesContent":["export type ExtendedFile =\n | {\n file: File;\n filetype: 'image';\n preview: string;\n blob?: Blob | null;\n }\n | {\n file: File;\n filetype: 'file';\n };\n\n/**\n * ファイルが画像 (HEIC/HEIF を含む) かどうかを MIME タイプで判定する。\n */\nexport const isImageFile = (file: File): boolean => /(heic|heif)/i.test(file.type) || /image.*/.test(file.type);\n\nexport default function readFiles(files: File[] | FileList): Promise<ExtendedFile[]> {\n const promises: Promise<ExtendedFile>[] = [];\n Array.from(files).forEach((f) => {\n const promise = new Promise<ExtendedFile>((resolve, reject) => {\n const objFileReader = new FileReader();\n if (/(heic|heif)/i.test(f.type)) {\n let convertedBlob: Blob | null = null;\n objFileReader.onload = () => {\n resolve({\n file: f,\n filetype: 'image',\n preview: objFileReader.result as string,\n blob: convertedBlob,\n });\n };\n (async () => {\n const { heicTo } = await import(/* webpackChunkName: \"heic-to\" */ 'heic-to');\n const blob = await heicTo({\n blob: f,\n type: 'image/jpeg',\n });\n if (blob instanceof Blob) {\n convertedBlob = blob;\n objFileReader.readAsDataURL(blob);\n }\n })();\n } else if (isImageFile(f)) {\n objFileReader.onload = () => {\n resolve({\n file: f,\n filetype: 'image',\n preview: objFileReader.result as string,\n });\n };\n objFileReader.readAsDataURL(f);\n } else {\n objFileReader.onload = () => {\n resolve({\n file: f,\n filetype: 'file',\n });\n };\n objFileReader.readAsDataURL(f);\n }\n objFileReader.onerror = () => {\n reject(new Error(`Failed to read file: ${f.name}`));\n };\n });\n promises.push(promise);\n });\n return Promise.all(promises);\n}\n"],"mappings":";AAeO,IAAM,cAAc,CAAC,SAAwB,eAAe,KAAK,KAAK,IAAI,KAAK,UAAU,KAAK,KAAK,IAAI;AAE/F,SAAR,UAA2B,OAAmD;AACnF,QAAM,WAAoC,CAAC;AAC3C,QAAM,KAAK,KAAK,EAAE,QAAQ,CAAC,MAAM;AAC/B,UAAM,UAAU,IAAI,QAAsB,CAAC,SAAS,WAAW;AAC7D,YAAM,gBAAgB,IAAI,WAAW;AACrC,UAAI,eAAe,KAAK,EAAE,IAAI,GAAG;AAC/B,YAAI,gBAA6B;AACjC,sBAAc,SAAS,MAAM;AAC3B,kBAAQ;AAAA,YACN,MAAM;AAAA,YACN,UAAU;AAAA,YACV,SAAS,cAAc;AAAA,YACvB,MAAM;AAAA,UACR,CAAC;AAAA,QACH;AACA,SAAC,YAAY;AACX,gBAAM,EAAE,OAAO,IAAI,MAAM;AAAA;AAAA,YAAyC;AAAA,UAAS;AAC3E,gBAAM,OAAO,MAAM,OAAO;AAAA,YACxB,MAAM;AAAA,YACN,MAAM;AAAA,UACR,CAAC;AACD,cAAI,gBAAgB,MAAM;AACxB,4BAAgB;AAChB,0BAAc,cAAc,IAAI;AAAA,UAClC;AAAA,QACF,GAAG;AAAA,MACL,WAAW,YAAY,CAAC,GAAG;AACzB,sBAAc,SAAS,MAAM;AAC3B,kBAAQ;AAAA,YACN,MAAM;AAAA,YACN,UAAU;AAAA,YACV,SAAS,cAAc;AAAA,UACzB,CAAC;AAAA,QACH;AACA,sBAAc,cAAc,CAAC;AAAA,MAC/B,OAAO;AACL,sBAAc,SAAS,MAAM;AAC3B,kBAAQ;AAAA,YACN,MAAM;AAAA,YACN,UAAU;AAAA,UACZ,CAAC;AAAA,QACH;AACA,sBAAc,cAAc,CAAC;AAAA,MAC/B;AACA,oBAAc,UAAU,MAAM;AAC5B,eAAO,IAAI,MAAM,wBAAwB,EAAE,IAAI,EAAE,CAAC;AAAA,MACpD;AAAA,IACF,CAAC;AACD,aAAS,KAAK,OAAO;AAAA,EACvB,CAAC;AACD,SAAO,QAAQ,IAAI,QAAQ;AAC7B;","names":[]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export default class ResizeImage {
|
|
2
|
+
/**
|
|
3
|
+
* Constructor
|
|
4
|
+
*
|
|
5
|
+
* @param elm
|
|
6
|
+
*/
|
|
7
|
+
constructor(elm: any);
|
|
8
|
+
elm: any;
|
|
9
|
+
dropAreaMark: string;
|
|
10
|
+
inputMark: any;
|
|
11
|
+
previewMark: any;
|
|
12
|
+
targetMark: any;
|
|
13
|
+
targetMarkCF: any;
|
|
14
|
+
dropSelect: boolean;
|
|
15
|
+
dragging: number;
|
|
16
|
+
previewOnly: boolean;
|
|
17
|
+
util: Util;
|
|
18
|
+
eventListeners: any[];
|
|
19
|
+
/**
|
|
20
|
+
* リサイズ処理の初期化
|
|
21
|
+
*/
|
|
22
|
+
resize(): void;
|
|
23
|
+
/**
|
|
24
|
+
* イベントリスナーを削除し、クリーンアップする
|
|
25
|
+
*/
|
|
26
|
+
destroy(): void;
|
|
27
|
+
/**
|
|
28
|
+
* targetに対してリサイズ処理イベントを登録
|
|
29
|
+
*
|
|
30
|
+
* @param target
|
|
31
|
+
*/
|
|
32
|
+
exec(target: any): void;
|
|
33
|
+
previewBox: any;
|
|
34
|
+
/**
|
|
35
|
+
* 画像のファイル選択イベントを登録
|
|
36
|
+
*
|
|
37
|
+
* @param target
|
|
38
|
+
*/
|
|
39
|
+
listener(target: any): void;
|
|
40
|
+
/**
|
|
41
|
+
* 画像ファイルを読み込み
|
|
42
|
+
*
|
|
43
|
+
* @param files
|
|
44
|
+
* @param target
|
|
45
|
+
* @return {boolean}
|
|
46
|
+
*/
|
|
47
|
+
readFiles(files: any, target: any): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* 画像ドラッグでの失敗を抑制
|
|
50
|
+
*
|
|
51
|
+
* @param target
|
|
52
|
+
*/
|
|
53
|
+
banDrag(target: any): void;
|
|
54
|
+
/**
|
|
55
|
+
* 分数を約分
|
|
56
|
+
*
|
|
57
|
+
* @param numerator
|
|
58
|
+
* @param denominator
|
|
59
|
+
*/
|
|
60
|
+
reduce(numerator: any, denominator: any): string | number;
|
|
61
|
+
/**
|
|
62
|
+
* リサイズした画像データをdomとして追加
|
|
63
|
+
*
|
|
64
|
+
* @param {HTMLElement} target 対象の要素
|
|
65
|
+
* @param {string} dataUrl 画像データのURL
|
|
66
|
+
* @param {boolean} resize リサイズされているかどうか
|
|
67
|
+
* @return {void}
|
|
68
|
+
*/
|
|
69
|
+
set(target: HTMLElement, dataUrl: string, resize: boolean): void;
|
|
70
|
+
}
|
|
71
|
+
import Util from './util.js';
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ResizeImageUtil
|
|
3
|
+
} from "../chunk-AMZYQ4DG.mjs";
|
|
4
|
+
|
|
5
|
+
// src/resize-image/resize-image.js
|
|
6
|
+
var ResizeImage = class {
|
|
7
|
+
/**
|
|
8
|
+
* Constructor
|
|
9
|
+
*
|
|
10
|
+
* @param elm
|
|
11
|
+
*/
|
|
12
|
+
constructor(elm) {
|
|
13
|
+
this.elm = elm;
|
|
14
|
+
this.dropAreaMark = ".js-drop_area";
|
|
15
|
+
this.inputMark = ACMS.Config.resizeImageInputMark;
|
|
16
|
+
this.previewMark = ACMS.Config.resizeImagePreviewMark;
|
|
17
|
+
this.targetMark = ACMS.Config.resizeImageTargetMark;
|
|
18
|
+
this.targetMarkCF = ACMS.Config.resizeImageTargetMarkCF;
|
|
19
|
+
this.dropSelect = false;
|
|
20
|
+
this.dragging = 0;
|
|
21
|
+
this.previewOnly = ACMS.Config.resizeImage !== "on";
|
|
22
|
+
this.util = new ResizeImageUtil();
|
|
23
|
+
this.eventListeners = [];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* リサイズ処理の初期化
|
|
27
|
+
*/
|
|
28
|
+
resize() {
|
|
29
|
+
const targetAry = this.elm.querySelectorAll(this.targetMark);
|
|
30
|
+
if (targetAry.length > 0) {
|
|
31
|
+
[].forEach.call(targetAry, (input) => {
|
|
32
|
+
this.exec(input);
|
|
33
|
+
});
|
|
34
|
+
} else if (this.elm.classList.contains(this.targetMarkCF.substr(1)) && !this.elm.classList.contains("resizeImage")) {
|
|
35
|
+
this.elm.classList.add("resizeImage");
|
|
36
|
+
this.exec(this.elm);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* イベントリスナーを削除し、クリーンアップする
|
|
41
|
+
*/
|
|
42
|
+
destroy() {
|
|
43
|
+
this.eventListeners.forEach(({ element, type, handler }) => {
|
|
44
|
+
element.removeEventListener(type, handler);
|
|
45
|
+
});
|
|
46
|
+
this.eventListeners = [];
|
|
47
|
+
const previewElements = this.elm.querySelectorAll(this.previewMark);
|
|
48
|
+
previewElements.forEach((element) => {
|
|
49
|
+
element.remove();
|
|
50
|
+
});
|
|
51
|
+
const resizeDataElements = this.elm.querySelectorAll(".js-img_resize_data");
|
|
52
|
+
resizeDataElements.forEach((element) => {
|
|
53
|
+
element.remove();
|
|
54
|
+
});
|
|
55
|
+
this.elm.classList.remove("resizeImage");
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* targetに対してリサイズ処理イベントを登録
|
|
59
|
+
*
|
|
60
|
+
* @param target
|
|
61
|
+
*/
|
|
62
|
+
exec(target) {
|
|
63
|
+
const node = target.querySelector(this.previewMark);
|
|
64
|
+
if (node !== null) {
|
|
65
|
+
this.previewBox = node.cloneNode(true);
|
|
66
|
+
target.querySelector(this.previewMark).insertAdjacentHTML("afterend", '<div class="js-img_resize_preview_location" />');
|
|
67
|
+
this.listener(target);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 画像のファイル選択イベントを登録
|
|
72
|
+
*
|
|
73
|
+
* @param target
|
|
74
|
+
*/
|
|
75
|
+
listener(target) {
|
|
76
|
+
const dropArea = target.querySelector(this.dropAreaMark);
|
|
77
|
+
const interval = 1500;
|
|
78
|
+
let lastTime = (/* @__PURE__ */ new Date()).getTime() - interval;
|
|
79
|
+
this.dragging = 0;
|
|
80
|
+
if (dropArea && window.File && window.FileReader && !this.previewOnly) {
|
|
81
|
+
this.banDrag(target);
|
|
82
|
+
target.querySelector("img").getAttribute("src");
|
|
83
|
+
if (!target.querySelector("img").getAttribute("src")) {
|
|
84
|
+
dropArea.classList.add("drag-n-drop-hover");
|
|
85
|
+
setTimeout(() => {
|
|
86
|
+
const area = dropArea.querySelector(".acms-admin-drop-area");
|
|
87
|
+
$(area).fadeOut(200, () => {
|
|
88
|
+
dropArea.classList.remove("drag-n-drop-hover");
|
|
89
|
+
dropArea.querySelector(".acms-admin-drop-area").style.display = "";
|
|
90
|
+
});
|
|
91
|
+
}, 800);
|
|
92
|
+
}
|
|
93
|
+
const dropHandler = (event) => {
|
|
94
|
+
event.stopPropagation();
|
|
95
|
+
event.preventDefault();
|
|
96
|
+
this.dragging = 0;
|
|
97
|
+
this.dropSelect = true;
|
|
98
|
+
dropArea.classList.remove("drag-n-drop-hover");
|
|
99
|
+
const { files } = event.dataTransfer;
|
|
100
|
+
let gif = false;
|
|
101
|
+
for (let i = 0; i < files.length; i++) {
|
|
102
|
+
const file = files[i];
|
|
103
|
+
if (file.type === "image/gif") {
|
|
104
|
+
gif = true;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (gif) {
|
|
109
|
+
if (!window.confirm(ACMS.i18n("drop_select_gif_image.alert"))) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
this.readFiles(event.dataTransfer.files, target);
|
|
114
|
+
return false;
|
|
115
|
+
};
|
|
116
|
+
dropArea.addEventListener("drop", dropHandler, false);
|
|
117
|
+
this.eventListeners.push({ element: dropArea, type: "drop", handler: dropHandler });
|
|
118
|
+
const dragOverHandler = (event) => {
|
|
119
|
+
event.stopPropagation();
|
|
120
|
+
event.preventDefault();
|
|
121
|
+
dropArea.classList.add("drag-n-drop-hover");
|
|
122
|
+
return false;
|
|
123
|
+
};
|
|
124
|
+
dropArea.addEventListener("dragover", dragOverHandler, false);
|
|
125
|
+
this.eventListeners.push({ element: dropArea, type: "dragover", handler: dragOverHandler });
|
|
126
|
+
const dragEnterHandler = (event) => {
|
|
127
|
+
event.stopPropagation();
|
|
128
|
+
event.preventDefault();
|
|
129
|
+
this.dragging++;
|
|
130
|
+
dropArea.classList.add("drag-n-drop-hover");
|
|
131
|
+
return false;
|
|
132
|
+
};
|
|
133
|
+
dropArea.addEventListener("dragenter", dragEnterHandler, false);
|
|
134
|
+
this.eventListeners.push({ element: dropArea, type: "dragenter", handler: dragEnterHandler });
|
|
135
|
+
const dragLeaveHandler = (event) => {
|
|
136
|
+
event.stopPropagation();
|
|
137
|
+
event.preventDefault();
|
|
138
|
+
this.dragging--;
|
|
139
|
+
if (this.dragging === 0) {
|
|
140
|
+
dropArea.classList.remove("drag-n-drop-hover");
|
|
141
|
+
}
|
|
142
|
+
return false;
|
|
143
|
+
};
|
|
144
|
+
dropArea.addEventListener("dragleave", dragLeaveHandler, false);
|
|
145
|
+
this.eventListeners.push({ element: dropArea, type: "dragleave", handler: dragLeaveHandler });
|
|
146
|
+
}
|
|
147
|
+
const fileInputs = target.querySelectorAll(this.inputMark);
|
|
148
|
+
fileInputs.forEach((fileInput) => {
|
|
149
|
+
const changeHandler = (event) => {
|
|
150
|
+
if (lastTime + interval <= (/* @__PURE__ */ new Date()).getTime()) {
|
|
151
|
+
lastTime = (/* @__PURE__ */ new Date()).getTime();
|
|
152
|
+
this.readFiles(event.target.files, target);
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
fileInput.addEventListener("change", changeHandler);
|
|
156
|
+
this.eventListeners.push({ element: fileInput, type: "change", handler: changeHandler });
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* 画像ファイルを読み込み
|
|
161
|
+
*
|
|
162
|
+
* @param files
|
|
163
|
+
* @param target
|
|
164
|
+
* @return {boolean}
|
|
165
|
+
*/
|
|
166
|
+
readFiles(files, target) {
|
|
167
|
+
const sizeSelect = target.querySelectorAll("[name^=image_size_]");
|
|
168
|
+
const bannerSize = document.querySelectorAll(".js-banner_size_large");
|
|
169
|
+
const bannerSizeCriterion = document.querySelector(".js-banner_size_large_criterion");
|
|
170
|
+
const rawSize = sizeSelect.length > 0 && sizeSelect[0].value.length < 2;
|
|
171
|
+
if (sizeSelect.length > 1) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
if (bannerSize.length >= 1 && bannerSize.value) {
|
|
175
|
+
ACMS.Config.lgImg = `${bannerSizeCriterion.value}:${bannerSize[0].value}`;
|
|
176
|
+
}
|
|
177
|
+
[].forEach.call(target.querySelectorAll(this.previewMark), (item) => {
|
|
178
|
+
item.parentNode.removeChild(item);
|
|
179
|
+
});
|
|
180
|
+
[].forEach.call(target.querySelectorAll(".js-img_resize_data"), (item) => {
|
|
181
|
+
item.parentNode.removeChild(item);
|
|
182
|
+
});
|
|
183
|
+
const lgImageSize = ACMS.Config.lgImg;
|
|
184
|
+
const lgImgAry = lgImageSize.split(":");
|
|
185
|
+
const lgImgSide = lgImgAry[0];
|
|
186
|
+
let lgImgSize = lgImgAry[1];
|
|
187
|
+
if (rawSize) {
|
|
188
|
+
lgImgSize = 999999999;
|
|
189
|
+
}
|
|
190
|
+
for (let i = 0; i < files.length; i++) {
|
|
191
|
+
const file = files[i];
|
|
192
|
+
if (!file) continue;
|
|
193
|
+
this.util.getDataUrlFromFile(file, lgImgSide, lgImgSize).then((data) => {
|
|
194
|
+
const { dataUrl } = data;
|
|
195
|
+
let { resize } = data;
|
|
196
|
+
if (rawSize) {
|
|
197
|
+
resize = false;
|
|
198
|
+
}
|
|
199
|
+
if (!this.dropSelect && file.type === "image/gif") {
|
|
200
|
+
resize = false;
|
|
201
|
+
}
|
|
202
|
+
if (this.previewOnly) {
|
|
203
|
+
resize = false;
|
|
204
|
+
}
|
|
205
|
+
this.set(target, dataUrl, resize || this.dropSelect);
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* 画像ドラッグでの失敗を抑制
|
|
211
|
+
*
|
|
212
|
+
* @param target
|
|
213
|
+
*/
|
|
214
|
+
banDrag(target) {
|
|
215
|
+
[].forEach.call(target.querySelectorAll("img"), (item) => {
|
|
216
|
+
const mouseDownHandler = (event) => {
|
|
217
|
+
event.preventDefault();
|
|
218
|
+
};
|
|
219
|
+
const mouseUpHandler = (event) => {
|
|
220
|
+
event.preventDefault();
|
|
221
|
+
};
|
|
222
|
+
item.addEventListener("mousedown", mouseDownHandler);
|
|
223
|
+
item.addEventListener("mouseup", mouseUpHandler);
|
|
224
|
+
this.eventListeners.push(
|
|
225
|
+
{ element: item, type: "mousedown", handler: mouseDownHandler },
|
|
226
|
+
{ element: item, type: "mouseup", handler: mouseUpHandler }
|
|
227
|
+
);
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* 分数を約分
|
|
232
|
+
*
|
|
233
|
+
* @param numerator
|
|
234
|
+
* @param denominator
|
|
235
|
+
*/
|
|
236
|
+
reduce(numerator, denominator) {
|
|
237
|
+
if (numerator > denominator) {
|
|
238
|
+
return Math.floor(numerator / denominator);
|
|
239
|
+
}
|
|
240
|
+
const numerator0 = numerator;
|
|
241
|
+
const denominator0 = denominator;
|
|
242
|
+
let c;
|
|
243
|
+
while (1) {
|
|
244
|
+
c = numerator % denominator;
|
|
245
|
+
if (c === 0) break;
|
|
246
|
+
denominator = numerator;
|
|
247
|
+
numerator = c;
|
|
248
|
+
}
|
|
249
|
+
return `${Math.floor(numerator0 / numerator)}/${Math.floor(denominator0 / numerator)}`;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* リサイズした画像データをdomとして追加
|
|
253
|
+
*
|
|
254
|
+
* @param {HTMLElement} target 対象の要素
|
|
255
|
+
* @param {string} dataUrl 画像データのURL
|
|
256
|
+
* @param {boolean} resize リサイズされているかどうか
|
|
257
|
+
* @return {void}
|
|
258
|
+
*/
|
|
259
|
+
set(target, dataUrl, resize) {
|
|
260
|
+
if (!this.previewBox) {
|
|
261
|
+
this.previewBox = target.querySelector(this.previewMark).cloneNode(true);
|
|
262
|
+
[].forEach.call(target.querySelectorAll(this.previewMark), (item) => {
|
|
263
|
+
item.parentNode.removeChild(item);
|
|
264
|
+
});
|
|
265
|
+
[].forEach.call(target.querySelectorAll(".js-img_resize_data"), (item) => {
|
|
266
|
+
item.parentNode.removeChild(item);
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
const clone = this.previewBox.cloneNode(true);
|
|
270
|
+
clone.style.display = "";
|
|
271
|
+
clone.setAttribute("src", dataUrl);
|
|
272
|
+
target.querySelector(".js-img_resize_preview_location").insertAdjacentHTML("beforebegin", clone.outerHTML);
|
|
273
|
+
[].forEach.call(target.querySelectorAll(".js-img_resize_preview_old"), (item) => {
|
|
274
|
+
item.parentNode.removeChild(item);
|
|
275
|
+
});
|
|
276
|
+
const imgDataUrl = target.querySelector(".js-img_data_url");
|
|
277
|
+
if (imgDataUrl) {
|
|
278
|
+
imgDataUrl.setAttribute("data-src", dataUrl);
|
|
279
|
+
}
|
|
280
|
+
this.banDrag(target);
|
|
281
|
+
const input = target.querySelector(this.inputMark);
|
|
282
|
+
if (resize) {
|
|
283
|
+
const fileInput = target.querySelector(this.inputMark);
|
|
284
|
+
if (fileInput) {
|
|
285
|
+
fileInput.value = "";
|
|
286
|
+
}
|
|
287
|
+
} else {
|
|
288
|
+
dataUrl = "";
|
|
289
|
+
}
|
|
290
|
+
const inputName = input.getAttribute("name");
|
|
291
|
+
const dataForm = document.createElement("input");
|
|
292
|
+
dataForm.classList.add("js-img_resize_data");
|
|
293
|
+
dataForm.setAttribute("type", "hidden");
|
|
294
|
+
dataForm.setAttribute("accept", "image/*");
|
|
295
|
+
dataForm.setAttribute("type", "hidden");
|
|
296
|
+
dataForm.setAttribute("name", inputName);
|
|
297
|
+
dataForm.value = dataUrl;
|
|
298
|
+
const dummy = target.querySelector(".js-img_resize_dummy");
|
|
299
|
+
if (dummy) {
|
|
300
|
+
dummy.remove();
|
|
301
|
+
}
|
|
302
|
+
target.querySelector(this.inputMark).insertAdjacentHTML("afterend", dataForm.outerHTML);
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
export {
|
|
306
|
+
ResizeImage as default
|
|
307
|
+
};
|
|
308
|
+
//# sourceMappingURL=resize-image.mjs.map
|