zartui 2.1.30 → 2.1.32
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/es/index.js +1 -1
- package/es/media-picker/index.js +23 -2
- package/lib/index.js +1 -1
- package/lib/media-picker/index.js +23 -2
- package/lib/zart.js +77 -27
- package/lib/zart.min.js +3 -3
- package/package.json +2 -2
package/es/index.js
CHANGED
|
@@ -76,7 +76,7 @@ import TextEllipsis from './text-ellipsis';
|
|
|
76
76
|
import Timeline from './timeline';
|
|
77
77
|
import Toast from './toast';
|
|
78
78
|
import Uploader from './uploader';
|
|
79
|
-
var version = '2.1.
|
|
79
|
+
var version = '2.1.32';
|
|
80
80
|
function install(Vue) {
|
|
81
81
|
var components = [ActionSheet, Area, Avatar, BackTop, Badge, Button, Calendar, Cascader, Cell, CellGroup, Checkbox, CheckboxGroup, Col, Collapse, CollapseItem, CountDown, DatetimePicker, Dialog, Divider, DropdownItem, DropdownMenu, Empty, Field, FoldDialog, Form, Grid, GridItem, HierarchySelect, Icon, Image, ImagePreview, IndexAnchor, IndexBar, Info, Lazyload, List, Loading, Locale, MediaPicker, MediaPlayer, MultiplePicker, NavBar, NoticeBar, NumberKeyboard, Overlay, PasswordInput, Picker, Popover, Popup, PullRefresh, Radio, RadioGroup, Rate, Row, Search, Signature, Skeleton, Slider, SpeechRecognizer, Step, Stepper, Steps, Sticky, Swipe, SwipeCell, SwipeItem, Switch, SwitchCell, Tab, Tabbar, TabbarItem, Table, Tabs, Tag, TextEllipsis, Timeline, Toast, Uploader];
|
|
82
82
|
components.forEach(function (item) {
|
package/es/media-picker/index.js
CHANGED
|
@@ -56,6 +56,10 @@ export default createComponent({
|
|
|
56
56
|
type: Boolean,
|
|
57
57
|
default: false
|
|
58
58
|
},
|
|
59
|
+
keepFileType: {
|
|
60
|
+
type: Boolean,
|
|
61
|
+
default: false
|
|
62
|
+
},
|
|
59
63
|
mediaList: {
|
|
60
64
|
type: Array,
|
|
61
65
|
default: function _default() {
|
|
@@ -568,6 +572,21 @@ export default createComponent({
|
|
|
568
572
|
}
|
|
569
573
|
return validFiles;
|
|
570
574
|
},
|
|
575
|
+
/**
|
|
576
|
+
* 根据 MIME 类型获取文件扩展名
|
|
577
|
+
*/
|
|
578
|
+
getExtensionFromMimeType: function getExtensionFromMimeType(mimeType) {
|
|
579
|
+
var mimeToExt = {
|
|
580
|
+
'image/jpeg': 'jpg',
|
|
581
|
+
'image/jpg': 'jpg',
|
|
582
|
+
'image/png': 'png',
|
|
583
|
+
'image/gif': 'gif',
|
|
584
|
+
'image/webp': 'webp',
|
|
585
|
+
'image/bmp': 'bmp',
|
|
586
|
+
'image/svg+xml': 'svg'
|
|
587
|
+
};
|
|
588
|
+
return mimeToExt[mimeType] || 'jpg';
|
|
589
|
+
},
|
|
571
590
|
/**
|
|
572
591
|
* 转换图片文件,压缩、加水印,返回Media格式的图片
|
|
573
592
|
* @param files 图片文件
|
|
@@ -577,7 +596,7 @@ export default createComponent({
|
|
|
577
596
|
var _this6 = this;
|
|
578
597
|
var promisesTodo = [];
|
|
579
598
|
var resizeOptions = new ResizeOptions(this.maxImageSideLength);
|
|
580
|
-
var compressOptions = new CompressOptions(this.maxImageFileSize);
|
|
599
|
+
var compressOptions = new CompressOptions(this.maxImageFileSize, this.keepFileType);
|
|
581
600
|
var _loop = function _loop() {
|
|
582
601
|
var inputFile = files[i];
|
|
583
602
|
var watermarkEnabled = _this6.watermarkOptions && _this6.watermarkOptions.watermarkConfigString && checkWatermarkConfigSupported(_this6.watermarkOptions.watermarkConfigString);
|
|
@@ -605,7 +624,9 @@ export default createComponent({
|
|
|
605
624
|
return Promise.resolve();
|
|
606
625
|
}
|
|
607
626
|
return file2DataURL(f).then(function (base64) {
|
|
608
|
-
|
|
627
|
+
// 根据 keepFileType 决定使用的扩展名
|
|
628
|
+
var ext = _this6.keepFileType ? _this6.getExtensionFromMimeType(f.type) : 'jpg';
|
|
629
|
+
var uniqueFileName = getUniqueFileName(f, ext);
|
|
609
630
|
return Promise.resolve({
|
|
610
631
|
showSrc: base64,
|
|
611
632
|
type: MediaType.PHOTO,
|
package/lib/index.js
CHANGED
|
@@ -161,7 +161,7 @@ var _toast = _interopRequireDefault(require("./toast"));
|
|
|
161
161
|
exports.Toast = _toast.default;
|
|
162
162
|
var _uploader = _interopRequireDefault(require("./uploader"));
|
|
163
163
|
exports.Uploader = _uploader.default;
|
|
164
|
-
var version = exports.version = '2.1.
|
|
164
|
+
var version = exports.version = '2.1.32';
|
|
165
165
|
function install(Vue) {
|
|
166
166
|
var components = [_actionSheet.default, _area.default, _avatar.default, _backTop.default, _badge.default, _button.default, _calendar.default, _cascader.default, _cell.default, _cellGroup.default, _checkbox.default, _checkboxGroup.default, _col.default, _collapse.default, _collapseItem.default, _countDown.default, _datetimePicker.default, _dialog.default, _divider.default, _dropdownItem.default, _dropdownMenu.default, _empty.default, _field.default, _foldDialog.default, _form.default, _grid.default, _gridItem.default, _hierarchySelect.default, _icon.default, _image.default, _imagePreview.default, _indexAnchor.default, _indexBar.default, _info.default, _lazyload.default, _list.default, _loading.default, _locale.default, _mediaPicker.default, _mediaPlayer.default, _multiplePicker.default, _navBar.default, _noticeBar.default, _numberKeyboard.default, _overlay.default, _passwordInput.default, _picker.default, _popover.default, _popup.default, _pullRefresh.default, _radio.default, _radioGroup.default, _rate.default, _row.default, _search.default, _signature.default, _skeleton.default, _slider.default, _speechRecognizer.default, _step.default, _stepper.default, _steps.default, _sticky.default, _swipe.default, _swipeCell.default, _swipeItem.default, _switch.default, _switchCell.default, _tab.default, _tabbar.default, _tabbarItem.default, _table.default, _tabs.default, _tag.default, _textEllipsis.default, _timeline.default, _toast.default, _uploader.default];
|
|
167
167
|
components.forEach(function (item) {
|
|
@@ -62,6 +62,10 @@ var _default2 = exports.default = createComponent({
|
|
|
62
62
|
type: Boolean,
|
|
63
63
|
default: false
|
|
64
64
|
},
|
|
65
|
+
keepFileType: {
|
|
66
|
+
type: Boolean,
|
|
67
|
+
default: false
|
|
68
|
+
},
|
|
65
69
|
mediaList: {
|
|
66
70
|
type: Array,
|
|
67
71
|
default: function _default() {
|
|
@@ -574,6 +578,21 @@ var _default2 = exports.default = createComponent({
|
|
|
574
578
|
}
|
|
575
579
|
return validFiles;
|
|
576
580
|
},
|
|
581
|
+
/**
|
|
582
|
+
* 根据 MIME 类型获取文件扩展名
|
|
583
|
+
*/
|
|
584
|
+
getExtensionFromMimeType: function getExtensionFromMimeType(mimeType) {
|
|
585
|
+
var mimeToExt = {
|
|
586
|
+
'image/jpeg': 'jpg',
|
|
587
|
+
'image/jpg': 'jpg',
|
|
588
|
+
'image/png': 'png',
|
|
589
|
+
'image/gif': 'gif',
|
|
590
|
+
'image/webp': 'webp',
|
|
591
|
+
'image/bmp': 'bmp',
|
|
592
|
+
'image/svg+xml': 'svg'
|
|
593
|
+
};
|
|
594
|
+
return mimeToExt[mimeType] || 'jpg';
|
|
595
|
+
},
|
|
577
596
|
/**
|
|
578
597
|
* 转换图片文件,压缩、加水印,返回Media格式的图片
|
|
579
598
|
* @param files 图片文件
|
|
@@ -583,7 +602,7 @@ var _default2 = exports.default = createComponent({
|
|
|
583
602
|
var _this6 = this;
|
|
584
603
|
var promisesTodo = [];
|
|
585
604
|
var resizeOptions = new _appMediaUtils.ResizeOptions(this.maxImageSideLength);
|
|
586
|
-
var compressOptions = new _appMediaUtils.CompressOptions(this.maxImageFileSize);
|
|
605
|
+
var compressOptions = new _appMediaUtils.CompressOptions(this.maxImageFileSize, this.keepFileType);
|
|
587
606
|
var _loop = function _loop() {
|
|
588
607
|
var inputFile = files[i];
|
|
589
608
|
var watermarkEnabled = _this6.watermarkOptions && _this6.watermarkOptions.watermarkConfigString && (0, _appMediaUtils.checkWatermarkConfigSupported)(_this6.watermarkOptions.watermarkConfigString);
|
|
@@ -611,7 +630,9 @@ var _default2 = exports.default = createComponent({
|
|
|
611
630
|
return Promise.resolve();
|
|
612
631
|
}
|
|
613
632
|
return (0, _appMediaUtils.file2DataURL)(f).then(function (base64) {
|
|
614
|
-
|
|
633
|
+
// 根据 keepFileType 决定使用的扩展名
|
|
634
|
+
var ext = _this6.keepFileType ? _this6.getExtensionFromMimeType(f.type) : 'jpg';
|
|
635
|
+
var uniqueFileName = (0, _mediaUtil.getUniqueFileName)(f, ext);
|
|
615
636
|
return Promise.resolve({
|
|
616
637
|
showSrc: base64,
|
|
617
638
|
type: _type.MediaType.PHOTO,
|
package/lib/zart.js
CHANGED
|
@@ -19862,7 +19862,7 @@ function drawGroupedWatermarks(canvas, watermarks, groupPosition) {
|
|
|
19862
19862
|
const tile = buildTile(canvas, watermark);
|
|
19863
19863
|
if (tile) {
|
|
19864
19864
|
tiles.push(tile);
|
|
19865
|
-
totalHeight += tile.size.height +
|
|
19865
|
+
totalHeight += tile.size.height + tile.style.paddingTop + tile.style.paddingBottom;
|
|
19866
19866
|
}
|
|
19867
19867
|
}
|
|
19868
19868
|
if (totalHeight <= 0) {
|
|
@@ -19872,19 +19872,15 @@ function drawGroupedWatermarks(canvas, watermarks, groupPosition) {
|
|
|
19872
19872
|
}
|
|
19873
19873
|
const contentPadding = getCanvasScale(canvas, CONTENT_PADDING);
|
|
19874
19874
|
let baseOrigin = new Point(contentPadding, contentPadding);
|
|
19875
|
-
let titlePadding = 0;
|
|
19876
19875
|
if (groupPosition === "center" /* Center */) {
|
|
19877
19876
|
baseOrigin = new Point(
|
|
19878
19877
|
contentPadding,
|
|
19879
19878
|
Math.round((canvas.height - totalHeight) / 2)
|
|
19880
19879
|
);
|
|
19881
19880
|
} else if (groupPosition === "bottom" /* Bottom */) {
|
|
19882
|
-
tiles.forEach((item) => {
|
|
19883
|
-
titlePadding += item.style.paddingTop + item.style.paddingBottom;
|
|
19884
|
-
});
|
|
19885
19881
|
baseOrigin = new Point(
|
|
19886
19882
|
contentPadding,
|
|
19887
|
-
canvas.height - totalHeight - contentPadding
|
|
19883
|
+
canvas.height - totalHeight - contentPadding
|
|
19888
19884
|
);
|
|
19889
19885
|
} else if (groupPosition === "top" /* Top */) {
|
|
19890
19886
|
baseOrigin = new Point(contentPadding, contentPadding);
|
|
@@ -20018,9 +20014,10 @@ function image2Canvas(img, type, width, height) {
|
|
|
20018
20014
|
canvas.height = _height;
|
|
20019
20015
|
const ctx = canvas.getContext("2d");
|
|
20020
20016
|
if (ctx) {
|
|
20021
|
-
|
|
20022
|
-
if (
|
|
20017
|
+
const needWhiteBackground = type === "image/jpeg" || type === "image/jpg" || type === "image/bmp";
|
|
20018
|
+
if (needWhiteBackground) {
|
|
20023
20019
|
ctx.fillStyle = "#fff";
|
|
20020
|
+
ctx.fillRect(0, 0, _width, _height);
|
|
20024
20021
|
}
|
|
20025
20022
|
ctx.drawImage(img, 0, 0, _width, _height);
|
|
20026
20023
|
return Promise.resolve(canvas);
|
|
@@ -20033,18 +20030,20 @@ function canvas2Image(canvas, type = "image/jpeg", quality = 0.8) {
|
|
|
20033
20030
|
image.src = canvas.toDataURL(type, quality);
|
|
20034
20031
|
return Promise.resolve(image);
|
|
20035
20032
|
}
|
|
20036
|
-
function canvas2File(canvas, fileName, lastModified, type = "image/jpeg", quality = 0.8) {
|
|
20033
|
+
function canvas2File(canvas, fileName, lastModified, type = "image/jpeg", quality = 0.8, forceFileType) {
|
|
20037
20034
|
return new Promise((resolve, reject) => {
|
|
20035
|
+
const blobType = type === "image/gif" ? "image/png" : type;
|
|
20038
20036
|
canvas.toBlob(
|
|
20039
20037
|
(blob) => {
|
|
20040
20038
|
if (!blob) {
|
|
20041
20039
|
reject(new Error("canvas文件导出失败"));
|
|
20042
20040
|
} else {
|
|
20043
|
-
const
|
|
20041
|
+
const fileType = forceFileType || type;
|
|
20042
|
+
const file = new File([blob], fileName, { lastModified, type: fileType });
|
|
20044
20043
|
resolve(file);
|
|
20045
20044
|
}
|
|
20046
20045
|
},
|
|
20047
|
-
|
|
20046
|
+
blobType,
|
|
20048
20047
|
quality
|
|
20049
20048
|
);
|
|
20050
20049
|
});
|
|
@@ -20105,13 +20104,14 @@ var ResizeOptions = class {
|
|
|
20105
20104
|
}
|
|
20106
20105
|
};
|
|
20107
20106
|
var CompressOptions = class {
|
|
20108
|
-
//
|
|
20109
|
-
constructor(photoFileSizeLimit) {
|
|
20107
|
+
// 是否保持原始文件类型
|
|
20108
|
+
constructor(photoFileSizeLimit, keepFileType = false) {
|
|
20110
20109
|
if (checkIsUndefinedOrNull(photoFileSizeLimit)) {
|
|
20111
20110
|
this.photoFileSizeLimit = PHOTO_FILE_SIZE_LIMIT;
|
|
20112
20111
|
} else {
|
|
20113
20112
|
this.photoFileSizeLimit = photoFileSizeLimit;
|
|
20114
20113
|
}
|
|
20114
|
+
this.keepFileType = keepFileType;
|
|
20115
20115
|
}
|
|
20116
20116
|
};
|
|
20117
20117
|
var ImageProcessor = class {
|
|
@@ -20125,12 +20125,15 @@ var ImageProcessor = class {
|
|
|
20125
20125
|
process() {
|
|
20126
20126
|
const filename = this.file.name;
|
|
20127
20127
|
const { lastModified } = this.file;
|
|
20128
|
-
|
|
20129
|
-
|
|
20130
|
-
|
|
20131
|
-
|
|
20132
|
-
|
|
20133
|
-
|
|
20128
|
+
const originalFileType = this.file.type;
|
|
20129
|
+
let fileType = originalFileType;
|
|
20130
|
+
if (!this.compressOptions.keepFileType) {
|
|
20131
|
+
if (this.file.size > this.compressOptions.photoFileSizeLimit * 1024) {
|
|
20132
|
+
fileType = "image/jpeg";
|
|
20133
|
+
}
|
|
20134
|
+
if (fileType === "image/gif") {
|
|
20135
|
+
fileType = "image/png";
|
|
20136
|
+
}
|
|
20134
20137
|
}
|
|
20135
20138
|
return file2Image(this.file).then((img) => {
|
|
20136
20139
|
return resize(img, {
|
|
@@ -20142,18 +20145,43 @@ var ImageProcessor = class {
|
|
|
20142
20145
|
const canvas = result;
|
|
20143
20146
|
return yield renderWatermark(canvas, this.watermarkOptions);
|
|
20144
20147
|
})).then((canvas) => {
|
|
20145
|
-
|
|
20148
|
+
let exportFilename;
|
|
20149
|
+
if (this.compressOptions.keepFileType) {
|
|
20150
|
+
const ext = this.getExtensionFromMimeType(fileType);
|
|
20151
|
+
exportFilename = filename.replace(/\.[^.]+$/, "") + "." + ext;
|
|
20152
|
+
} else {
|
|
20153
|
+
exportFilename = filename.replace(/\./g, "-") + ".jpg";
|
|
20154
|
+
}
|
|
20146
20155
|
return this.compress(
|
|
20147
20156
|
canvas,
|
|
20148
20157
|
exportFilename,
|
|
20149
20158
|
lastModified,
|
|
20150
20159
|
fileType,
|
|
20151
|
-
DEFAULT_JPEG_QUALITY
|
|
20160
|
+
DEFAULT_JPEG_QUALITY,
|
|
20161
|
+
-1,
|
|
20162
|
+
originalFileType
|
|
20163
|
+
// 传入原始文件类型,用于GIF等特殊格式
|
|
20152
20164
|
);
|
|
20153
20165
|
});
|
|
20154
20166
|
}
|
|
20155
|
-
|
|
20156
|
-
|
|
20167
|
+
/**
|
|
20168
|
+
* 根据 MIME 类型获取文件扩展名
|
|
20169
|
+
*/
|
|
20170
|
+
getExtensionFromMimeType(mimeType) {
|
|
20171
|
+
const mimeToExt = {
|
|
20172
|
+
"image/jpeg": "jpg",
|
|
20173
|
+
"image/jpg": "jpg",
|
|
20174
|
+
"image/png": "png",
|
|
20175
|
+
"image/gif": "gif",
|
|
20176
|
+
"image/webp": "webp",
|
|
20177
|
+
"image/bmp": "bmp",
|
|
20178
|
+
"image/svg+xml": "svg"
|
|
20179
|
+
};
|
|
20180
|
+
return mimeToExt[mimeType] || "jpg";
|
|
20181
|
+
}
|
|
20182
|
+
compress(canvas, filename, lastModified, type, quality, lastCompressFileSize = -1, originalFileType) {
|
|
20183
|
+
const forceFileType = originalFileType === "image/gif" ? originalFileType : void 0;
|
|
20184
|
+
return canvas2File(canvas, filename, lastModified, type, quality, forceFileType).then(
|
|
20157
20185
|
(file) => {
|
|
20158
20186
|
let qualityStep = JPEG_QUALITY_STEP;
|
|
20159
20187
|
if (file.size > this.compressOptions.photoFileSizeLimit * 1024) {
|
|
@@ -20173,7 +20201,8 @@ var ImageProcessor = class {
|
|
|
20173
20201
|
lastModified,
|
|
20174
20202
|
type,
|
|
20175
20203
|
this.roundToDecimalPlace(nextCompressQuality, 2),
|
|
20176
|
-
file.size
|
|
20204
|
+
file.size,
|
|
20205
|
+
originalFileType
|
|
20177
20206
|
);
|
|
20178
20207
|
} else {
|
|
20179
20208
|
return Promise.resolve(file);
|
|
@@ -24835,6 +24864,10 @@ var media_picker_createNamespace = Object(utils["b" /* createNamespace */])('med
|
|
|
24835
24864
|
type: Boolean,
|
|
24836
24865
|
default: false
|
|
24837
24866
|
},
|
|
24867
|
+
keepFileType: {
|
|
24868
|
+
type: Boolean,
|
|
24869
|
+
default: false
|
|
24870
|
+
},
|
|
24838
24871
|
mediaList: {
|
|
24839
24872
|
type: Array,
|
|
24840
24873
|
default: function _default() {
|
|
@@ -25347,6 +25380,21 @@ var media_picker_createNamespace = Object(utils["b" /* createNamespace */])('med
|
|
|
25347
25380
|
}
|
|
25348
25381
|
return validFiles;
|
|
25349
25382
|
},
|
|
25383
|
+
/**
|
|
25384
|
+
* 根据 MIME 类型获取文件扩展名
|
|
25385
|
+
*/
|
|
25386
|
+
getExtensionFromMimeType: function getExtensionFromMimeType(mimeType) {
|
|
25387
|
+
var mimeToExt = {
|
|
25388
|
+
'image/jpeg': 'jpg',
|
|
25389
|
+
'image/jpg': 'jpg',
|
|
25390
|
+
'image/png': 'png',
|
|
25391
|
+
'image/gif': 'gif',
|
|
25392
|
+
'image/webp': 'webp',
|
|
25393
|
+
'image/bmp': 'bmp',
|
|
25394
|
+
'image/svg+xml': 'svg'
|
|
25395
|
+
};
|
|
25396
|
+
return mimeToExt[mimeType] || 'jpg';
|
|
25397
|
+
},
|
|
25350
25398
|
/**
|
|
25351
25399
|
* 转换图片文件,压缩、加水印,返回Media格式的图片
|
|
25352
25400
|
* @param files 图片文件
|
|
@@ -25356,7 +25404,7 @@ var media_picker_createNamespace = Object(utils["b" /* createNamespace */])('med
|
|
|
25356
25404
|
var _this6 = this;
|
|
25357
25405
|
var promisesTodo = [];
|
|
25358
25406
|
var resizeOptions = new ResizeOptions(this.maxImageSideLength);
|
|
25359
|
-
var compressOptions = new CompressOptions(this.maxImageFileSize);
|
|
25407
|
+
var compressOptions = new CompressOptions(this.maxImageFileSize, this.keepFileType);
|
|
25360
25408
|
var _loop = function _loop() {
|
|
25361
25409
|
var inputFile = files[i];
|
|
25362
25410
|
var watermarkEnabled = _this6.watermarkOptions && _this6.watermarkOptions.watermarkConfigString && checkWatermarkConfigSupported(_this6.watermarkOptions.watermarkConfigString);
|
|
@@ -25384,7 +25432,9 @@ var media_picker_createNamespace = Object(utils["b" /* createNamespace */])('med
|
|
|
25384
25432
|
return Promise.resolve();
|
|
25385
25433
|
}
|
|
25386
25434
|
return file2DataURL(f).then(function (base64) {
|
|
25387
|
-
|
|
25435
|
+
// 根据 keepFileType 决定使用的扩展名
|
|
25436
|
+
var ext = _this6.keepFileType ? _this6.getExtensionFromMimeType(f.type) : 'jpg';
|
|
25437
|
+
var uniqueFileName = getUniqueFileName(f, ext);
|
|
25388
25438
|
return Promise.resolve({
|
|
25389
25439
|
showSrc: base64,
|
|
25390
25440
|
type: MediaType.PHOTO,
|
|
@@ -35625,7 +35675,7 @@ var uploader_createNamespace = Object(utils["b" /* createNamespace */])('uploade
|
|
|
35625
35675
|
|
|
35626
35676
|
|
|
35627
35677
|
|
|
35628
|
-
var es_version = '2.1.
|
|
35678
|
+
var es_version = '2.1.32';
|
|
35629
35679
|
function install(Vue) {
|
|
35630
35680
|
var components = [action_sheet, es_area, avatar, back_top, badge, es_button, calendar, cascader, cell, cell_group, es_checkbox, checkbox_group, col, collapse, collapse_item, count_down, datetime_picker, dialog, divider, dropdown_item, dropdown_menu, empty, es_field, fold_dialog, es_form, grid, grid_item, hierarchy_select, es_icon, es_image, image_preview, index_anchor, index_bar, es_info, lazyload, es_list, es_loading, locale["a" /* default */], media_picker, media_player, multiple_picker, nav_bar, notice_bar, number_keyboard, es_overlay, password_input, es_picker, popover, popup, pull_refresh, es_radio, radio_group, rate, row, search, signature, skeleton, slider, speech_recognizer, es_step, stepper, steps, es_sticky, swipe, swipe_cell, swipe_item, es_switch, switch_cell, tab, tabbar, tabbar_item, table, tabs, es_tag, text_ellipsis, timeline, es_toast, uploader];
|
|
35631
35681
|
components.forEach(function (item) {
|