@siamf/upload 1.0.0 → 1.0.1
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 +691 -0
- package/dist/cjs/components/file/FileUpload.d.ts +3 -0
- package/dist/cjs/components/file/FileUpload.js +120 -0
- package/dist/cjs/components/file/FileUpload.js.map +1 -0
- package/dist/cjs/components/file/MultiFileUpload.d.ts +4 -0
- package/dist/cjs/components/file/MultiFileUpload.js +160 -0
- package/dist/cjs/components/file/MultiFileUpload.js.map +1 -0
- package/dist/cjs/components/file/typings.d.ts +103 -0
- package/dist/cjs/components/file/typings.js +57 -0
- package/dist/cjs/components/file/typings.js.map +1 -0
- package/dist/cjs/components/image/ImageUpload.d.ts +3 -0
- package/dist/cjs/components/image/ImageUpload.js +126 -0
- package/dist/cjs/components/image/ImageUpload.js.map +1 -0
- package/dist/cjs/components/image/MultiImageUpload.d.ts +3 -0
- package/dist/cjs/components/image/MultiImageUpload.js +162 -0
- package/dist/cjs/components/image/MultiImageUpload.js.map +1 -0
- package/dist/cjs/components/image/typings.d.ts +73 -0
- package/dist/cjs/components/image/typings.js +18 -0
- package/dist/cjs/components/image/typings.js.map +1 -0
- package/dist/cjs/components/utils/utils.d.ts +9 -0
- package/dist/cjs/components/utils/utils.js +78 -0
- package/dist/cjs/components/utils/utils.js.map +1 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.js +21 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/esm/components/file/FileUpload.d.ts +3 -0
- package/dist/esm/components/file/FileUpload.js +118 -0
- package/dist/esm/components/file/FileUpload.js.map +1 -0
- package/dist/esm/components/file/MultiFileUpload.d.ts +4 -0
- package/dist/esm/components/file/MultiFileUpload.js +157 -0
- package/dist/esm/components/file/MultiFileUpload.js.map +1 -0
- package/dist/esm/components/file/typings.d.ts +103 -0
- package/dist/esm/components/file/typings.js +54 -0
- package/dist/esm/components/file/typings.js.map +1 -0
- package/dist/esm/components/image/ImageUpload.d.ts +3 -0
- package/dist/esm/components/image/ImageUpload.js +124 -0
- package/dist/esm/components/image/ImageUpload.js.map +1 -0
- package/dist/esm/components/image/MultiImageUpload.d.ts +3 -0
- package/dist/esm/components/image/MultiImageUpload.js +160 -0
- package/dist/esm/components/image/MultiImageUpload.js.map +1 -0
- package/dist/esm/components/image/typings.d.ts +73 -0
- package/dist/esm/components/image/typings.js +15 -0
- package/dist/esm/components/image/typings.js.map +1 -0
- package/dist/esm/components/utils/utils.d.ts +9 -0
- package/dist/esm/components/utils/utils.js +69 -0
- package/dist/esm/components/utils/utils.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -0
- package/package.json +52 -8
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
14
|
+
const react_1 = require("react");
|
|
15
|
+
const typings_1 = require("./typings");
|
|
16
|
+
//Utils
|
|
17
|
+
const utils_1 = require("../utils/utils");
|
|
18
|
+
const DEFAULT_INDEX = -1;
|
|
19
|
+
const MultiImageUpload = ({ inputProps, acceptType, maxFileSize, resolutionWidth, resolutionHeight, resolutionType = "absolute", children, onChange, value, onError, maxNumber = 10 }) => {
|
|
20
|
+
//Validations
|
|
21
|
+
//@ts-ignore
|
|
22
|
+
if (Array.isArray(acceptType) && acceptType.includes(typings_1.ImageAcceptType.ALL)) {
|
|
23
|
+
throw new Error("Invalid accept type: FileAccept.All cannot be included in an array.");
|
|
24
|
+
}
|
|
25
|
+
//Ref
|
|
26
|
+
const inputRef = (0, react_1.useRef)(null);
|
|
27
|
+
//State
|
|
28
|
+
const [isDragging, setIsDragging] = (0, react_1.useState)(false);
|
|
29
|
+
const [indexKey, setIndexKey] = (0, react_1.useState)(DEFAULT_INDEX);
|
|
30
|
+
const [errors, setErrors] = (0, react_1.useState)({ acceptType: false, maxFileSize: false, resolution: false, maxNumber: false });
|
|
31
|
+
//Handle The File Change
|
|
32
|
+
const handleChange = (files) => __awaiter(void 0, void 0, void 0, function* () {
|
|
33
|
+
if (!files)
|
|
34
|
+
return;
|
|
35
|
+
if (files.length === 0)
|
|
36
|
+
return;
|
|
37
|
+
var changeFiles = [];
|
|
38
|
+
let newErrors = {
|
|
39
|
+
acceptType: false,
|
|
40
|
+
maxFileSize: false,
|
|
41
|
+
resolution: false,
|
|
42
|
+
maxNumber: false,
|
|
43
|
+
};
|
|
44
|
+
if (files.length > maxNumber)
|
|
45
|
+
newErrors.maxNumber = true;
|
|
46
|
+
for (let i = 0; i < files.length; i++) {
|
|
47
|
+
const file = files[i];
|
|
48
|
+
const uploadSize = Number((file.size / 1024 * 1024).toFixed(2));
|
|
49
|
+
//Accept Type Error
|
|
50
|
+
if (!(0, utils_1.getImageAccepts)(acceptType).includes(file.type))
|
|
51
|
+
newErrors.acceptType = true;
|
|
52
|
+
//Max File Size Error
|
|
53
|
+
if (maxFileSize && (uploadSize > maxFileSize))
|
|
54
|
+
newErrors.maxFileSize = true;
|
|
55
|
+
//Resolution Check
|
|
56
|
+
const image = yield (0, utils_1.getImage)(file);
|
|
57
|
+
const checkRes = (0, utils_1.isResolutionValid)(image, resolutionType, resolutionWidth, resolutionHeight);
|
|
58
|
+
if (!checkRes)
|
|
59
|
+
newErrors.resolution = true;
|
|
60
|
+
const dataUrl = yield (0, utils_1.getBase64)(file);
|
|
61
|
+
//Get Files Ready
|
|
62
|
+
changeFiles.push({
|
|
63
|
+
file: file,
|
|
64
|
+
dataURL: dataUrl,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
setErrors(newErrors);
|
|
68
|
+
if (newErrors.acceptType || newErrors.maxFileSize || newErrors.maxNumber || newErrors.resolution) {
|
|
69
|
+
onError === null || onError === void 0 ? void 0 : onError(newErrors);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (indexKey > DEFAULT_INDEX) {
|
|
73
|
+
onChange(value.map((a, i) => {
|
|
74
|
+
if (i === indexKey) {
|
|
75
|
+
return changeFiles[0];
|
|
76
|
+
}
|
|
77
|
+
return a;
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
onChange(changeFiles);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
//On File Remove ALl
|
|
85
|
+
const onImageRemoveAll = () => {
|
|
86
|
+
onChange([]);
|
|
87
|
+
};
|
|
88
|
+
//On File Remove Index
|
|
89
|
+
const onImageRemove = (index) => {
|
|
90
|
+
onChange(value.filter((_, i) => i !== index));
|
|
91
|
+
};
|
|
92
|
+
//Handle File Upload
|
|
93
|
+
const onImageUpdate = (index) => {
|
|
94
|
+
setIndexKey(index);
|
|
95
|
+
};
|
|
96
|
+
//In Component Method
|
|
97
|
+
const onInputChange = (e) => __awaiter(void 0, void 0, void 0, function* () {
|
|
98
|
+
yield handleChange(e.target.files);
|
|
99
|
+
indexKey > DEFAULT_INDEX && setIndexKey(DEFAULT_INDEX);
|
|
100
|
+
if (inputRef.current)
|
|
101
|
+
inputRef.current.value = '';
|
|
102
|
+
});
|
|
103
|
+
const handleClickInput = (0, react_1.useCallback)(() => (0, utils_1.openFileDialog)(inputRef), [
|
|
104
|
+
inputRef,
|
|
105
|
+
]);
|
|
106
|
+
const onImageUpload = (0, react_1.useCallback)(() => {
|
|
107
|
+
setIndexKey(DEFAULT_INDEX);
|
|
108
|
+
handleClickInput();
|
|
109
|
+
}, [handleClickInput]);
|
|
110
|
+
const handleDrag = (e) => {
|
|
111
|
+
e.preventDefault();
|
|
112
|
+
e.stopPropagation();
|
|
113
|
+
};
|
|
114
|
+
const handleDragIn = (e) => {
|
|
115
|
+
e.preventDefault();
|
|
116
|
+
e.stopPropagation();
|
|
117
|
+
if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {
|
|
118
|
+
setIsDragging(true);
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
const handleDragOut = (e) => {
|
|
122
|
+
e.preventDefault();
|
|
123
|
+
e.stopPropagation();
|
|
124
|
+
setIsDragging(false);
|
|
125
|
+
};
|
|
126
|
+
const handleDrop = (e) => {
|
|
127
|
+
e.preventDefault();
|
|
128
|
+
e.stopPropagation();
|
|
129
|
+
setIsDragging(false);
|
|
130
|
+
if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
|
|
131
|
+
handleChange(e.dataTransfer.files);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
const handleDragStart = (e) => {
|
|
135
|
+
e.preventDefault();
|
|
136
|
+
e.stopPropagation();
|
|
137
|
+
e.dataTransfer.clearData();
|
|
138
|
+
};
|
|
139
|
+
(0, react_1.useEffect)(() => {
|
|
140
|
+
if (indexKey > DEFAULT_INDEX) {
|
|
141
|
+
handleClickInput();
|
|
142
|
+
}
|
|
143
|
+
}, [indexKey]);
|
|
144
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("input", Object.assign({ type: "file", style: { display: "none" }, accept: (0, utils_1.getImageAccepts)(acceptType).join(","), multiple: indexKey === DEFAULT_INDEX, onChange: onInputChange, ref: inputRef }, inputProps)), children === null || children === void 0 ? void 0 : children({
|
|
145
|
+
onImageUpload,
|
|
146
|
+
onImageRemove,
|
|
147
|
+
onImageUpdate,
|
|
148
|
+
onImageRemoveAll,
|
|
149
|
+
dragProps: {
|
|
150
|
+
onDrop: handleDrop,
|
|
151
|
+
onDragEnter: handleDragIn,
|
|
152
|
+
onDragLeave: handleDragOut,
|
|
153
|
+
onDragOver: handleDrag,
|
|
154
|
+
onDragStart: handleDragStart
|
|
155
|
+
},
|
|
156
|
+
isDragging,
|
|
157
|
+
errors,
|
|
158
|
+
imageInfo: value
|
|
159
|
+
})] }));
|
|
160
|
+
};
|
|
161
|
+
exports.default = MultiImageUpload;
|
|
162
|
+
//# sourceMappingURL=MultiImageUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiImageUpload.js","sourceRoot":"","sources":["../../../../src/components/image/MultiImageUpload.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { DragEvent } from "react";
|
|
2
|
+
export type ImageType = {
|
|
3
|
+
file?: File;
|
|
4
|
+
dataURL?: string;
|
|
5
|
+
} | null;
|
|
6
|
+
type TExportTypes = {
|
|
7
|
+
dragProps: {
|
|
8
|
+
onDrop: (e: DragEvent<HTMLDivElement>) => void;
|
|
9
|
+
onDragEnter: (e: DragEvent<HTMLDivElement>) => void;
|
|
10
|
+
onDragLeave: (e: DragEvent<HTMLDivElement>) => void;
|
|
11
|
+
onDragOver: (e: DragEvent<HTMLDivElement>) => void;
|
|
12
|
+
onDragStart: (e: DragEvent<HTMLDivElement>) => void;
|
|
13
|
+
};
|
|
14
|
+
isDragging: boolean;
|
|
15
|
+
onImageUpload: () => void;
|
|
16
|
+
};
|
|
17
|
+
type TPropsTypes = {
|
|
18
|
+
inputProps?: React.HTMLProps<HTMLInputElement>;
|
|
19
|
+
acceptType?: ImageAcceptType | Exclude<ImageAcceptType, ImageAcceptType.ALL>[];
|
|
20
|
+
maxFileSize?: number;
|
|
21
|
+
resolutionWidth?: number;
|
|
22
|
+
resolutionHeight?: number;
|
|
23
|
+
resolutionType?: ResolutionType;
|
|
24
|
+
};
|
|
25
|
+
export declare enum ImageAcceptType {
|
|
26
|
+
ALL = "all",
|
|
27
|
+
SVG = "image/svg+xml",
|
|
28
|
+
PNG = "image/png",
|
|
29
|
+
JPEG = "image/jpeg",
|
|
30
|
+
GIF = "image/gif",
|
|
31
|
+
BMP = "image/bmp",
|
|
32
|
+
WEBP = "image/webp",
|
|
33
|
+
TIFF = "image/tiff",
|
|
34
|
+
ICO = "image/x-icon",
|
|
35
|
+
HEIC = "image/heic",
|
|
36
|
+
HEIF = "image/heif"
|
|
37
|
+
}
|
|
38
|
+
export type ImageErrorTypes = {
|
|
39
|
+
maxFileSize: boolean;
|
|
40
|
+
acceptType: boolean;
|
|
41
|
+
resolution: boolean;
|
|
42
|
+
};
|
|
43
|
+
export interface ImageExportTypes extends TExportTypes {
|
|
44
|
+
imageInfo: ImageType;
|
|
45
|
+
errors: ImageErrorTypes;
|
|
46
|
+
onImageRemove: () => void;
|
|
47
|
+
}
|
|
48
|
+
export interface ImagePropsTypes extends TPropsTypes {
|
|
49
|
+
children: (props: ImageExportTypes) => React.ReactNode;
|
|
50
|
+
onChange: (value: ImageType) => void;
|
|
51
|
+
value: ImageType;
|
|
52
|
+
onError?: (errors: ImageErrorTypes) => void;
|
|
53
|
+
}
|
|
54
|
+
export type MultiImageType = ImageType[];
|
|
55
|
+
export interface MultiImageErrorTypes extends ImageErrorTypes {
|
|
56
|
+
maxNumber: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface MultiImageExportTypes extends TExportTypes {
|
|
59
|
+
imageInfo: MultiImageType;
|
|
60
|
+
errors: MultiImageErrorTypes;
|
|
61
|
+
onImageRemove: (index: number) => void;
|
|
62
|
+
onImageUpdate: (index: number) => void;
|
|
63
|
+
onImageRemoveAll: () => void;
|
|
64
|
+
}
|
|
65
|
+
export interface MultiImagePropsTypes extends TPropsTypes {
|
|
66
|
+
children: (props: MultiImageExportTypes) => React.ReactNode;
|
|
67
|
+
onChange: (value: MultiImageType) => void;
|
|
68
|
+
value: MultiImageType;
|
|
69
|
+
onError?: (errors: MultiImageErrorTypes) => void;
|
|
70
|
+
maxNumber?: number;
|
|
71
|
+
}
|
|
72
|
+
export type ResolutionType = "absolute" | "less" | "more" | "ratio";
|
|
73
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ImageAcceptType = void 0;
|
|
4
|
+
var ImageAcceptType;
|
|
5
|
+
(function (ImageAcceptType) {
|
|
6
|
+
ImageAcceptType["ALL"] = "all";
|
|
7
|
+
ImageAcceptType["SVG"] = "image/svg+xml";
|
|
8
|
+
ImageAcceptType["PNG"] = "image/png";
|
|
9
|
+
ImageAcceptType["JPEG"] = "image/jpeg";
|
|
10
|
+
ImageAcceptType["GIF"] = "image/gif";
|
|
11
|
+
ImageAcceptType["BMP"] = "image/bmp";
|
|
12
|
+
ImageAcceptType["WEBP"] = "image/webp";
|
|
13
|
+
ImageAcceptType["TIFF"] = "image/tiff";
|
|
14
|
+
ImageAcceptType["ICO"] = "image/x-icon";
|
|
15
|
+
ImageAcceptType["HEIC"] = "image/heic";
|
|
16
|
+
ImageAcceptType["HEIF"] = "image/heif";
|
|
17
|
+
})(ImageAcceptType || (exports.ImageAcceptType = ImageAcceptType = {}));
|
|
18
|
+
//# sourceMappingURL=typings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typings.js","sourceRoot":"","sources":["../../../../src/components/image/typings.ts"],"names":[],"mappings":";;;AA6BA,IAAY,eAYX;AAZD,WAAY,eAAe;IACvB,8BAAW,CAAA;IACX,wCAAqB,CAAA;IACrB,oCAAiB,CAAA;IACjB,sCAAmB,CAAA;IACnB,oCAAiB,CAAA;IACjB,oCAAiB,CAAA;IACjB,sCAAmB,CAAA;IACnB,sCAAmB,CAAA;IACnB,uCAAoB,CAAA;IACpB,sCAAmB,CAAA;IACnB,sCAAmB,CAAA;AACvB,CAAC,EAZW,eAAe,+BAAf,eAAe,QAY1B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { FileAcceptType } from "../file/typings";
|
|
3
|
+
import { ImageAcceptType, ResolutionType } from "../image/typings";
|
|
4
|
+
export declare const openFileDialog: (inputRef: React.RefObject<HTMLInputElement | null>) => void;
|
|
5
|
+
export declare const getFileAccepts: (acceptType?: FileAcceptType | Exclude<FileAcceptType, FileAcceptType.ALL>[]) => string[];
|
|
6
|
+
export declare const getImageAccepts: (acceptType?: ImageAcceptType | Exclude<ImageAcceptType, ImageAcceptType.ALL>[]) => string[];
|
|
7
|
+
export declare const getImage: (file: File) => Promise<HTMLImageElement>;
|
|
8
|
+
export declare const getBase64: (file: File) => Promise<string>;
|
|
9
|
+
export declare const isResolutionValid: (image: HTMLImageElement, resolutionType: ResolutionType, resolutionWidth: number | undefined, resolutionHeight: number | undefined) => boolean;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isResolutionValid = exports.getBase64 = exports.getImage = exports.getImageAccepts = exports.getFileAccepts = exports.openFileDialog = void 0;
|
|
4
|
+
const typings_1 = require("../file/typings");
|
|
5
|
+
const typings_2 = require("../image/typings");
|
|
6
|
+
const openFileDialog = (inputRef) => {
|
|
7
|
+
if (inputRef.current)
|
|
8
|
+
inputRef.current.click();
|
|
9
|
+
};
|
|
10
|
+
exports.openFileDialog = openFileDialog;
|
|
11
|
+
const getFileAccepts = (acceptType) => {
|
|
12
|
+
if (!acceptType || acceptType === typings_1.FileAcceptType.ALL) {
|
|
13
|
+
const defaultArray = Object.values(typings_1.FileAcceptType).filter(value => value !== typings_1.FileAcceptType.ALL);
|
|
14
|
+
return defaultArray;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
return acceptType;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
exports.getFileAccepts = getFileAccepts;
|
|
21
|
+
const getImageAccepts = (acceptType) => {
|
|
22
|
+
if (!acceptType || acceptType === typings_2.ImageAcceptType.ALL) {
|
|
23
|
+
const defaultArray = Object.values(typings_2.ImageAcceptType).filter(value => value !== typings_2.ImageAcceptType.ALL);
|
|
24
|
+
return defaultArray;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
return acceptType;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
exports.getImageAccepts = getImageAccepts;
|
|
31
|
+
const getImage = (file) => {
|
|
32
|
+
const image = new Image();
|
|
33
|
+
return new Promise((resolve) => {
|
|
34
|
+
image.addEventListener('load', () => resolve(image));
|
|
35
|
+
image.src = URL.createObjectURL(file);
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
exports.getImage = getImage;
|
|
39
|
+
const getBase64 = (file) => {
|
|
40
|
+
const reader = new FileReader();
|
|
41
|
+
return new Promise((resolve) => {
|
|
42
|
+
reader.addEventListener('load', () => resolve(String(reader.result)));
|
|
43
|
+
reader.readAsDataURL(file);
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
exports.getBase64 = getBase64;
|
|
47
|
+
const isResolutionValid = (image, resolutionType, resolutionWidth, resolutionHeight) => {
|
|
48
|
+
if (!resolutionWidth || !resolutionHeight || !image.width || !image.height)
|
|
49
|
+
return true;
|
|
50
|
+
switch (resolutionType) {
|
|
51
|
+
case 'absolute': {
|
|
52
|
+
if (image.width === resolutionWidth && image.height === resolutionHeight)
|
|
53
|
+
return true;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
case 'ratio': {
|
|
57
|
+
const ratio = resolutionWidth / resolutionHeight;
|
|
58
|
+
if (image.width / image.height === ratio)
|
|
59
|
+
return true;
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case 'less': {
|
|
63
|
+
if (image.width <= resolutionWidth && image.height <= resolutionHeight)
|
|
64
|
+
return true;
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
case 'more': {
|
|
68
|
+
if (image.width >= resolutionWidth && image.height >= resolutionHeight)
|
|
69
|
+
return true;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
default:
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
};
|
|
77
|
+
exports.isResolutionValid = isResolutionValid;
|
|
78
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/components/utils/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { default as FileUpload } from "./components/file/FileUpload";
|
|
2
|
+
export { default as MultiFileUpload } from "./components/file/MultiFileUpload";
|
|
3
|
+
export { FileAcceptType } from "./components/file/typings";
|
|
4
|
+
export type { FileType, MultiFileType, FileErrorTypes, MultiFileErrorTypes } from "./components/file/typings";
|
|
5
|
+
export { default as ImageUpload } from "./components/image/ImageUpload";
|
|
6
|
+
export { default as MultiImageUpload } from "./components/image/MultiImageUpload";
|
|
7
|
+
export { ImageAcceptType } from "./components/image/typings";
|
|
8
|
+
export type { ImageType, MultiImageType, ImageErrorTypes, MultiImageErrorTypes } from "./components/image/typings";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ImageAcceptType = exports.MultiImageUpload = exports.ImageUpload = exports.FileAcceptType = exports.MultiFileUpload = exports.FileUpload = void 0;
|
|
7
|
+
//Files
|
|
8
|
+
var FileUpload_1 = require("./components/file/FileUpload");
|
|
9
|
+
Object.defineProperty(exports, "FileUpload", { enumerable: true, get: function () { return __importDefault(FileUpload_1).default; } });
|
|
10
|
+
var MultiFileUpload_1 = require("./components/file/MultiFileUpload");
|
|
11
|
+
Object.defineProperty(exports, "MultiFileUpload", { enumerable: true, get: function () { return __importDefault(MultiFileUpload_1).default; } });
|
|
12
|
+
var typings_1 = require("./components/file/typings");
|
|
13
|
+
Object.defineProperty(exports, "FileAcceptType", { enumerable: true, get: function () { return typings_1.FileAcceptType; } });
|
|
14
|
+
//Image
|
|
15
|
+
var ImageUpload_1 = require("./components/image/ImageUpload");
|
|
16
|
+
Object.defineProperty(exports, "ImageUpload", { enumerable: true, get: function () { return __importDefault(ImageUpload_1).default; } });
|
|
17
|
+
var MultiImageUpload_1 = require("./components/image/MultiImageUpload");
|
|
18
|
+
Object.defineProperty(exports, "MultiImageUpload", { enumerable: true, get: function () { return __importDefault(MultiImageUpload_1).default; } });
|
|
19
|
+
var typings_2 = require("./components/image/typings");
|
|
20
|
+
Object.defineProperty(exports, "ImageAcceptType", { enumerable: true, get: function () { return typings_2.ImageAcceptType; } });
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO;AACP,2DAAqE;AAA5D,yHAAA,OAAO,OAAc;AAC9B,qEAA+E;AAAtE,mIAAA,OAAO,OAAmB;AACnC,qDAA2D;AAAlD,yGAAA,cAAc,OAAA;AAGvB,OAAO;AACP,8DAAwE;AAA/D,2HAAA,OAAO,OAAe;AAC/B,wEAAkF;AAAzE,qIAAA,OAAO,OAAoB;AACpC,sDAA6D;AAApD,0GAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
import { useRef, useState, useCallback } from "react";
|
|
13
|
+
import { FileAcceptType } from "./typings";
|
|
14
|
+
//Utils
|
|
15
|
+
import { openFileDialog, getFileAccepts } from "../utils/utils";
|
|
16
|
+
const FileUpload = ({ children, onChange, value, onError, inputProps, acceptType, maxFileSize }) => {
|
|
17
|
+
//Validations
|
|
18
|
+
//@ts-ignore
|
|
19
|
+
if (Array.isArray(acceptType) && acceptType.includes(FileAcceptType.ALL)) {
|
|
20
|
+
throw new Error("Invalid accept type: FileAcceptType.All cannot be included in an array.");
|
|
21
|
+
}
|
|
22
|
+
//Ref
|
|
23
|
+
const inputRef = useRef(null);
|
|
24
|
+
//State
|
|
25
|
+
const [isDragging, setIsDragging] = useState(false);
|
|
26
|
+
const [errors, setErrors] = useState({ acceptType: false, maxFileSize: false });
|
|
27
|
+
//Handle Change
|
|
28
|
+
const handleChange = (files) => __awaiter(void 0, void 0, void 0, function* () {
|
|
29
|
+
if (!files)
|
|
30
|
+
return null;
|
|
31
|
+
const file = files[0];
|
|
32
|
+
if (!file)
|
|
33
|
+
return null;
|
|
34
|
+
//Default
|
|
35
|
+
const newErrors = {
|
|
36
|
+
acceptType: false,
|
|
37
|
+
maxFileSize: false,
|
|
38
|
+
};
|
|
39
|
+
const uploadSize = Number((file.size / 1024 * 1024).toFixed(2));
|
|
40
|
+
if (maxFileSize && uploadSize > maxFileSize)
|
|
41
|
+
newErrors.maxFileSize = true;
|
|
42
|
+
if (!getFileAccepts(acceptType).includes(file.type))
|
|
43
|
+
newErrors.acceptType = true;
|
|
44
|
+
setErrors(newErrors);
|
|
45
|
+
if (newErrors.acceptType || newErrors.maxFileSize) {
|
|
46
|
+
onError === null || onError === void 0 ? void 0 : onError(newErrors);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
onChange({
|
|
50
|
+
file: file, fileInfo: {
|
|
51
|
+
name: file.name.split(".")[0],
|
|
52
|
+
size: uploadSize,
|
|
53
|
+
type: file.type,
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//On File Remove
|
|
58
|
+
const onFileRemove = () => {
|
|
59
|
+
onChange(null);
|
|
60
|
+
};
|
|
61
|
+
//In Component Handler
|
|
62
|
+
const onInputChange = (e) => __awaiter(void 0, void 0, void 0, function* () {
|
|
63
|
+
yield handleChange(e.target.files);
|
|
64
|
+
if (inputRef.current)
|
|
65
|
+
inputRef.current.value = '';
|
|
66
|
+
});
|
|
67
|
+
const handleClickInput = useCallback(() => openFileDialog(inputRef), [
|
|
68
|
+
inputRef,
|
|
69
|
+
]);
|
|
70
|
+
const onFileUpload = useCallback(() => {
|
|
71
|
+
handleClickInput();
|
|
72
|
+
}, [handleClickInput]);
|
|
73
|
+
const handleDrag = (e) => {
|
|
74
|
+
e.preventDefault();
|
|
75
|
+
e.stopPropagation();
|
|
76
|
+
};
|
|
77
|
+
const handleDragIn = (e) => {
|
|
78
|
+
e.preventDefault();
|
|
79
|
+
e.stopPropagation();
|
|
80
|
+
if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {
|
|
81
|
+
setIsDragging(true);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const handleDragOut = (e) => {
|
|
85
|
+
e.preventDefault();
|
|
86
|
+
e.stopPropagation();
|
|
87
|
+
setIsDragging(false);
|
|
88
|
+
};
|
|
89
|
+
const handleDrop = (e) => {
|
|
90
|
+
e.preventDefault();
|
|
91
|
+
e.stopPropagation();
|
|
92
|
+
setIsDragging(false);
|
|
93
|
+
if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
|
|
94
|
+
handleChange(e.dataTransfer.files);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
const handleDragStart = (e) => {
|
|
98
|
+
e.preventDefault();
|
|
99
|
+
e.stopPropagation();
|
|
100
|
+
e.dataTransfer.clearData();
|
|
101
|
+
};
|
|
102
|
+
return (_jsxs(_Fragment, { children: [_jsx("input", Object.assign({ type: "file", style: { display: "none" }, accept: getFileAccepts(acceptType).join(","), multiple: false, onChange: onInputChange, ref: inputRef }, inputProps)), children === null || children === void 0 ? void 0 : children({
|
|
103
|
+
onFileUpload,
|
|
104
|
+
onFileRemove: onFileRemove,
|
|
105
|
+
dragProps: {
|
|
106
|
+
onDrop: handleDrop,
|
|
107
|
+
onDragEnter: handleDragIn,
|
|
108
|
+
onDragLeave: handleDragOut,
|
|
109
|
+
onDragOver: handleDrag,
|
|
110
|
+
onDragStart: handleDragStart
|
|
111
|
+
},
|
|
112
|
+
isDragging,
|
|
113
|
+
errors,
|
|
114
|
+
fileInfo: value
|
|
115
|
+
})] }));
|
|
116
|
+
};
|
|
117
|
+
export default FileUpload;
|
|
118
|
+
//# sourceMappingURL=FileUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileUpload.js","sourceRoot":"","sources":["../../../../src/components/file/FileUpload.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { MultiFilePropsTypes } from "./typings";
|
|
2
|
+
export declare const DEFAULT_INDEX = -1;
|
|
3
|
+
declare const MultiFileUpload: ({ children, onChange, value, onError, inputProps, acceptType, maxFileSize, maxNumber }: MultiFilePropsTypes) => import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export default MultiFileUpload;
|