@cashub/ui 0.3.3 → 0.4.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/cropper/Cropper.js +66 -0
- package/cropper/CropperHandler.js +44 -0
- package/dropzone/FileDropzone.js +535 -0
- package/dropzone/ImageDropzone.js +275 -0
- package/dropzone/Message.js +26 -0
- package/heading/Heading3.js +31 -0
- package/image/ImageFigure.js +31 -0
- package/image/ImageFluid.js +21 -0
- package/image/UploadImage.js +207 -0
- package/package.json +1 -1
- package/partial/modal/CropImageModal.js +111 -0
- package/styles/mixin/rounded.js +22 -0
- package/toast/MessageContainer.js +42 -0
- package/utils/aria/keycode.js +16 -0
- package/utils/dataURLtoFile.js +25 -0
- package/utils/format/formatSize.js +36 -0
- package/utils/getBase64.js +22 -0
- package/utils/image/resize.js +49 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _reactI18next = require("react-i18next");
|
|
11
|
+
|
|
12
|
+
var _resize = _interopRequireDefault(require("../../utils/image/resize"));
|
|
13
|
+
|
|
14
|
+
var _Button = _interopRequireDefault(require("../../button/Button"));
|
|
15
|
+
|
|
16
|
+
var _ButtonGroup = _interopRequireDefault(require("../../button/ButtonGroup"));
|
|
17
|
+
|
|
18
|
+
var _TitleModal = _interopRequireDefault(require("../../modal/TitleModal"));
|
|
19
|
+
|
|
20
|
+
var _Cropper = _interopRequireDefault(require("../../cropper/Cropper"));
|
|
21
|
+
|
|
22
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
23
|
+
|
|
24
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
+
|
|
26
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
27
|
+
|
|
28
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
29
|
+
|
|
30
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
31
|
+
|
|
32
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
33
|
+
|
|
34
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
35
|
+
|
|
36
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
37
|
+
|
|
38
|
+
var CropImageModal = function CropImageModal(_ref) {
|
|
39
|
+
var src = _ref.src,
|
|
40
|
+
mime = _ref.mime,
|
|
41
|
+
alt = _ref.alt,
|
|
42
|
+
width = _ref.width,
|
|
43
|
+
height = _ref.height,
|
|
44
|
+
onCrop = _ref.onCrop,
|
|
45
|
+
onClose = _ref.onClose,
|
|
46
|
+
close = _ref.close;
|
|
47
|
+
|
|
48
|
+
var _useTranslation = (0, _reactI18next.useTranslation)(),
|
|
49
|
+
t = _useTranslation.t;
|
|
50
|
+
|
|
51
|
+
var _useState = (0, _react.useState)(null),
|
|
52
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
53
|
+
instance = _useState2[0],
|
|
54
|
+
setIntance = _useState2[1];
|
|
55
|
+
|
|
56
|
+
var _useState3 = (0, _react.useState)(null),
|
|
57
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
58
|
+
resizedImage = _useState4[0],
|
|
59
|
+
setResizedImage = _useState4[1];
|
|
60
|
+
|
|
61
|
+
var handleCrop = (0, _react.useCallback)(function () {
|
|
62
|
+
onCrop(instance.getCroppedCanvas().toDataURL());
|
|
63
|
+
close();
|
|
64
|
+
}, [onCrop, instance, close]);
|
|
65
|
+
var handleInitialized = (0, _react.useCallback)(function (instance) {
|
|
66
|
+
setIntance(instance);
|
|
67
|
+
}, []);
|
|
68
|
+
|
|
69
|
+
var handleClose = function handleClose() {
|
|
70
|
+
if (onClose) {
|
|
71
|
+
onClose();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
close();
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
(0, _react.useEffect)(function () {
|
|
78
|
+
(0, _resize.default)(src, mime, width > height ? width : height, 'cover', function (resizedImageUrl) {
|
|
79
|
+
setResizedImage(resizedImageUrl);
|
|
80
|
+
});
|
|
81
|
+
}, [src, mime, height, width]);
|
|
82
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
83
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_TitleModal.default.Header, {
|
|
84
|
+
handleClose: handleClose,
|
|
85
|
+
children: t('CropImage')
|
|
86
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TitleModal.default.Body, {
|
|
87
|
+
children: resizedImage && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Cropper.default, {
|
|
88
|
+
src: resizedImage,
|
|
89
|
+
alt: alt,
|
|
90
|
+
width: width,
|
|
91
|
+
height: height,
|
|
92
|
+
onInitialized: handleInitialized
|
|
93
|
+
})
|
|
94
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TitleModal.default.Footer, {
|
|
95
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ButtonGroup.default, {
|
|
96
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
|
|
97
|
+
danger: true,
|
|
98
|
+
onClick: handleClose,
|
|
99
|
+
children: t('button:Cancel')
|
|
100
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
|
|
101
|
+
success: true,
|
|
102
|
+
onClick: handleCrop,
|
|
103
|
+
children: t('button:Confirm')
|
|
104
|
+
})]
|
|
105
|
+
})
|
|
106
|
+
})]
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
var _default = CropImageModal;
|
|
111
|
+
exports.default = _default;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _styledComponents = require("styled-components");
|
|
9
|
+
|
|
10
|
+
var _templateObject;
|
|
11
|
+
|
|
12
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
13
|
+
|
|
14
|
+
var rounded = (0, _styledComponents.css)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n ", "\n\n ", "\n"])), function (_ref) {
|
|
15
|
+
var rounded = _ref.rounded;
|
|
16
|
+
return rounded && 'border-radius: var(--border-radius);';
|
|
17
|
+
}, function (_ref2) {
|
|
18
|
+
var roundedCircle = _ref2.roundedCircle;
|
|
19
|
+
return roundedCircle && 'border-radius: var(--border-radius-round);';
|
|
20
|
+
});
|
|
21
|
+
var _default = rounded;
|
|
22
|
+
exports.default = _default;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
9
|
+
|
|
10
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
|
|
12
|
+
var _templateObject, _templateObject2;
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
17
|
+
|
|
18
|
+
var MessageContainer = function MessageContainer(_ref) {
|
|
19
|
+
var title = _ref.title,
|
|
20
|
+
message = _ref.message,
|
|
21
|
+
_ref$containHTML = _ref.containHTML,
|
|
22
|
+
containHTML = _ref$containHTML === void 0 ? false : _ref$containHTML;
|
|
23
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
24
|
+
"data-testid": "messageContainer",
|
|
25
|
+
children: [title && /*#__PURE__*/(0, _jsxRuntime.jsx)(Title, {
|
|
26
|
+
children: title
|
|
27
|
+
}), containHTML ? /*#__PURE__*/(0, _jsxRuntime.jsx)(Message, {
|
|
28
|
+
dangerouslySetInnerHTML: {
|
|
29
|
+
__html: message
|
|
30
|
+
}
|
|
31
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(Message, {
|
|
32
|
+
children: message
|
|
33
|
+
})]
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
var Title = _styledComponents.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n margin: 0;\n margin-bottom: 0.25rem;\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n"])));
|
|
38
|
+
|
|
39
|
+
var Message = _styledComponents.default.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n margin: 0;\n font-size: 0.9rem;\n line-height: 1.2rem;\n\n ul {\n margin-left: 1rem;\n\n li {\n list-style: disc;\n }\n }\n"])));
|
|
40
|
+
|
|
41
|
+
var _default = MessageContainer;
|
|
42
|
+
exports.default = _default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var KEY_CODE = {
|
|
8
|
+
ENTER: 13,
|
|
9
|
+
ESCAPE: 27,
|
|
10
|
+
UP: 38,
|
|
11
|
+
DOWN: 40,
|
|
12
|
+
END: 35,
|
|
13
|
+
HOME: 36
|
|
14
|
+
};
|
|
15
|
+
var _default = KEY_CODE;
|
|
16
|
+
exports.default = _default;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var dataURLtoFile = function dataURLtoFile(dataurl, filename) {
|
|
9
|
+
var arr = dataurl.split(",");
|
|
10
|
+
var mime = arr[0].match(/:(.*?);/)[1];
|
|
11
|
+
var bstr = atob(arr[1]);
|
|
12
|
+
var n = bstr.length;
|
|
13
|
+
var u8arr = new Uint8Array(n);
|
|
14
|
+
|
|
15
|
+
while (n--) {
|
|
16
|
+
u8arr[n] = bstr.charCodeAt(n);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return new File([u8arr], filename, {
|
|
20
|
+
type: mime
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
var _default = dataURLtoFile;
|
|
25
|
+
exports.default = _default;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Convert the amount of data in byte to the largest unit
|
|
10
|
+
*
|
|
11
|
+
* @param {String|Integer} bytes Amount of data in byte
|
|
12
|
+
*
|
|
13
|
+
* @return {String}
|
|
14
|
+
*/
|
|
15
|
+
var formatSize = function formatSize(bytes) {
|
|
16
|
+
var str;
|
|
17
|
+
|
|
18
|
+
if (bytes >= 1073741824) {
|
|
19
|
+
str = "".concat((bytes / 1073741824).toFixed(2), " GB");
|
|
20
|
+
} else if (bytes >= 1048576) {
|
|
21
|
+
str = "".concat((bytes / 1048576).toFixed(2), " MB");
|
|
22
|
+
} else if (bytes >= 1024) {
|
|
23
|
+
str = "".concat((bytes / 1024).toFixed(2), " KB");
|
|
24
|
+
} else if (bytes > 1) {
|
|
25
|
+
str = "".concat((bytes / 1).toFixed(2), " bytes");
|
|
26
|
+
} else if (bytes === 1) {
|
|
27
|
+
str = "".concat(bytes, " byte");
|
|
28
|
+
} else {
|
|
29
|
+
str = "0 bytes";
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return str;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
var _default = formatSize;
|
|
36
|
+
exports.default = _default;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var getBase64 = function getBase64(file, callback) {
|
|
9
|
+
// 建立FileReader物件
|
|
10
|
+
var reader = new FileReader(); //讀取'成功'時執行
|
|
11
|
+
|
|
12
|
+
reader.onload = function () {
|
|
13
|
+
//result返回文件的內容
|
|
14
|
+
callback(reader.result);
|
|
15
|
+
}; //讀取文件內容,結果用data:url形式表示
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
reader.readAsDataURL(file);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
var _default = getBase64;
|
|
22
|
+
exports.default = _default;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var resizeImage = function resizeImage(url, mime, size, mode, callback) {
|
|
9
|
+
var canvas = document.createElement("canvas");
|
|
10
|
+
var ctx = canvas.getContext("2d");
|
|
11
|
+
var img = new Image();
|
|
12
|
+
img.crossOrigin = "Anonymous";
|
|
13
|
+
|
|
14
|
+
img.onload = function () {
|
|
15
|
+
var height = img.height;
|
|
16
|
+
var width = img.width;
|
|
17
|
+
|
|
18
|
+
if (mode === "contain") {
|
|
19
|
+
if (height > width) {
|
|
20
|
+
width = width * (size / height);
|
|
21
|
+
height = size;
|
|
22
|
+
} else {
|
|
23
|
+
height = height * (size / width);
|
|
24
|
+
width = size;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (mode === "cover") {
|
|
29
|
+
if (height > width) {
|
|
30
|
+
height = height * (size / width);
|
|
31
|
+
width = size;
|
|
32
|
+
} else {
|
|
33
|
+
width = width * (size / height);
|
|
34
|
+
height = size;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
canvas.height = height;
|
|
39
|
+
canvas.width = width;
|
|
40
|
+
ctx.drawImage(img, 0, 0, width, height);
|
|
41
|
+
callback(canvas.toDataURL(mime));
|
|
42
|
+
canvas = null;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
img.src = url;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
var _default = resizeImage;
|
|
49
|
+
exports.default = _default;
|