@qn-pandora/pandora-component 4.0.2 → 4.0.4

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.
Files changed (71) hide show
  1. package/CHANGELOG.json +43 -0
  2. package/CHANGELOG.md +17 -1
  3. package/es/components/AutoComplete/index.js +21 -1
  4. package/es/components/DateTimePicker/transform.d.ts +4 -1
  5. package/es/components/DateTimePicker/transform.js +2 -2
  6. package/es/components/Drawer/index.d.ts +30 -2
  7. package/es/components/Drawer/index.js +165 -5
  8. package/es/components/Drawer/style.css +18 -1
  9. package/es/components/Drawer/style.less +23 -1
  10. package/es/components/FileResumable/constants.d.ts +33 -0
  11. package/es/components/FileResumable/constants.js +0 -0
  12. package/es/components/FileResumable/index.d.ts +13 -0
  13. package/es/components/FileResumable/index.js +327 -0
  14. package/es/components/FileResumable/style.css +777 -0
  15. package/es/components/FileResumable/style.less +94 -0
  16. package/es/components/FileResumable/utils.d.ts +1 -0
  17. package/es/components/FileResumable/utils.js +17 -0
  18. package/es/components/Selector/SelectorWidthChildren.d.ts +15 -0
  19. package/es/components/Selector/SelectorWidthChildren.js +59 -0
  20. package/es/components/Selector/index.d.ts +2 -0
  21. package/es/components/Selector/index.js +17 -3
  22. package/es/components/TreeSelector/index.js +1 -1
  23. package/es/constants/language/en.js +3 -1
  24. package/es/constants/language/type.d.ts +2 -0
  25. package/es/constants/language/upload/en.d.ts +3 -0
  26. package/es/constants/language/upload/en.js +20 -0
  27. package/es/constants/language/upload/type.d.ts +20 -0
  28. package/es/constants/language/upload/type.js +4 -0
  29. package/es/constants/language/upload/zh.d.ts +3 -0
  30. package/es/constants/language/upload/zh.js +20 -0
  31. package/es/constants/language/zh.js +3 -1
  32. package/es/index.css +1282 -498
  33. package/es/index.d.ts +2 -0
  34. package/es/index.js +2 -0
  35. package/es/index.less +12 -11
  36. package/es/style/theme.less +1 -0
  37. package/lib/components/AutoComplete/index.js +21 -1
  38. package/lib/components/DateTimePicker/transform.d.ts +4 -1
  39. package/lib/components/DateTimePicker/transform.js +2 -0
  40. package/lib/components/Drawer/index.d.ts +30 -2
  41. package/lib/components/Drawer/index.js +164 -12
  42. package/lib/components/Drawer/style.css +18 -1
  43. package/lib/components/Drawer/style.less +23 -1
  44. package/lib/components/FileResumable/constants.d.ts +33 -0
  45. package/lib/components/FileResumable/constants.js +2 -0
  46. package/lib/components/FileResumable/index.d.ts +13 -0
  47. package/lib/components/FileResumable/index.js +340 -0
  48. package/lib/components/FileResumable/style.css +777 -0
  49. package/lib/components/FileResumable/style.less +94 -0
  50. package/lib/components/FileResumable/utils.d.ts +1 -0
  51. package/lib/components/FileResumable/utils.js +19 -0
  52. package/lib/components/Selector/SelectorWidthChildren.d.ts +15 -0
  53. package/lib/components/Selector/SelectorWidthChildren.js +72 -0
  54. package/lib/components/Selector/index.d.ts +2 -0
  55. package/lib/components/Selector/index.js +16 -2
  56. package/lib/components/TreeSelector/index.js +1 -1
  57. package/lib/constants/language/en.js +6 -1
  58. package/lib/constants/language/type.d.ts +2 -0
  59. package/lib/constants/language/upload/en.d.ts +3 -0
  60. package/lib/constants/language/upload/en.js +22 -0
  61. package/lib/constants/language/upload/type.d.ts +20 -0
  62. package/lib/constants/language/upload/type.js +9 -0
  63. package/lib/constants/language/upload/zh.d.ts +3 -0
  64. package/lib/constants/language/upload/zh.js +22 -0
  65. package/lib/constants/language/zh.js +6 -1
  66. package/lib/index.css +977 -193
  67. package/lib/index.d.ts +2 -0
  68. package/lib/index.js +4 -0
  69. package/lib/index.less +9 -8
  70. package/lib/style/theme.less +1 -0
  71. package/package.json +6 -4
@@ -0,0 +1,94 @@
1
+ @import 'antd/lib/upload/style/index.less';
2
+ @import '../../style/theme.less';
3
+
4
+ .@{sdk-prefix}-file-resumable {
5
+ cursor: pointer;
6
+ }
7
+
8
+ .@{sdk-prefix}-file-resumable-run-container {
9
+ text-align: right;
10
+ .@{sdk-prefix}-file-resumable-run-container-icon {
11
+ color: @theme-color;
12
+ cursor: pointer;
13
+ font-size: 14px;
14
+ margin: 0 6px;
15
+ }
16
+
17
+ .@{sdk-prefix}-file-resumable-run-container-icon-disabled {
18
+ color: @font-disable-color;
19
+ &:hover {
20
+ cursor: not-allowed;
21
+ }
22
+ }
23
+ }
24
+
25
+ .@{sdk-prefix}-file-resumable-upload-icon {
26
+ font-size: 50px;
27
+ color: @icon-color;
28
+ }
29
+
30
+ .downloadIcon {
31
+ color: @theme-color;
32
+ cursor: pointer;
33
+ font-size: 20px;
34
+ }
35
+
36
+ .@{sdk-prefix}-file-resumable:hover {
37
+ border-color: @theme-color;
38
+ }
39
+
40
+ .@{sdk-prefix}-file-resumable-img-container {
41
+ background: @normal-color;
42
+ border: 1px dashed @border-color-1;
43
+ width: 50px;
44
+ height: 50px;
45
+ padding: 4px;
46
+ border-radius: 2px;
47
+ align-items: center;
48
+ cursor: pointer;
49
+ position: relative;
50
+ font-size: 16px;
51
+ display: flex;
52
+ justify-content: center;
53
+ .@{sdk-prefix}-file-resumable-img-operator {
54
+ display: flex;
55
+ justify-content: center;
56
+ align-items: center;
57
+ position: absolute;
58
+ top: 4px;
59
+ left: 4px;
60
+ right: 4px;
61
+ bottom: 4px;
62
+ .anticon {
63
+ font-size: 16px;
64
+ }
65
+ }
66
+ .@{sdk-prefix}-file-resumable-img-hidden-plus-icon {
67
+ display: none;
68
+ }
69
+
70
+ .@{sdk-prefix}-file-resumable-img-box {
71
+ max-width: 100%;
72
+ max-height: 100%;
73
+ padding: 4px;
74
+ }
75
+
76
+ &:hover {
77
+ .@{sdk-prefix}-file-resumable-img-operator {
78
+ background: @image-operator-hover-bg;
79
+ display: flex;
80
+ .anticon {
81
+ font-size: 16px;
82
+ color: @normal-color;
83
+ }
84
+ }
85
+ }
86
+ }
87
+ .@{sdk-prefix}-file-resumable-img.ant-upload.ant-upload-drag {
88
+ width: 50px;
89
+ height: 50px;
90
+ border: none;
91
+ .@{ant-prefix}-upload-btn {
92
+ padding: 0;
93
+ }
94
+ }
@@ -0,0 +1 @@
1
+ export declare const isJpgOrPngOrSvg: (type?: string, hexValue?: string) => boolean;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var lodash_1 = require("lodash");
4
+ var MIME_IMAGE_TYPE = [
5
+ 'image/png',
6
+ 'image/jpeg',
7
+ 'image/jpeg',
8
+ 'image/svg+xml',
9
+ 'image/vnd.microsoft.icon'
10
+ ];
11
+ exports.isJpgOrPngOrSvg = function (type, hexValue) {
12
+ if (type === void 0) { type = ''; }
13
+ if (hexValue === void 0) { hexValue = ''; }
14
+ return (lodash_1.includes(MIME_IMAGE_TYPE, type.toLocaleLowerCase()) &&
15
+ (lodash_1.includes(hexValue.toLowerCase(), '100') || // ico
16
+ lodash_1.includes(hexValue.toLowerCase(), 'ffd8ff') ||
17
+ lodash_1.includes(hexValue.toLowerCase(), '3c3f786d') || // svg
18
+ lodash_1.includes(hexValue.toLowerCase(), '89504e47')));
19
+ };
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { ISelectorProps, SelectValue } from './index';
3
+ declare type IValue = string | number;
4
+ export interface ISelectorOption {
5
+ key?: string;
6
+ text: string | React.ReactNode;
7
+ value: IValue;
8
+ disabled?: boolean;
9
+ filterText?: string;
10
+ }
11
+ export interface ISelectorWidthChildrenProps<VT> extends ISelectorProps<VT> {
12
+ options?: ISelectorOption[];
13
+ }
14
+ export default function SelectorWidthChildren<VT extends SelectValue>(props: ISelectorWidthChildrenProps<VT>): JSX.Element;
15
+ export {};
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __rest = (this && this.__rest) || function (s, e) {
14
+ var t = {};
15
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
+ t[p] = s[p];
17
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
+ t[p[i]] = s[p[i]];
21
+ }
22
+ return t;
23
+ };
24
+ var __read = (this && this.__read) || function (o, n) {
25
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
26
+ if (!m) return o;
27
+ var i = m.call(o), r, ar = [], e;
28
+ try {
29
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
30
+ }
31
+ catch (error) { e = { error: error }; }
32
+ finally {
33
+ try {
34
+ if (r && !r.done && (m = i["return"])) m.call(i);
35
+ }
36
+ finally { if (e) throw e.error; }
37
+ }
38
+ return ar;
39
+ };
40
+ var __importStar = (this && this.__importStar) || function (mod) {
41
+ if (mod && mod.__esModule) return mod;
42
+ var result = {};
43
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
44
+ result["default"] = mod;
45
+ return result;
46
+ };
47
+ var __importDefault = (this && this.__importDefault) || function (mod) {
48
+ return (mod && mod.__esModule) ? mod : { "default": mod };
49
+ };
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ var react_1 = __importStar(require("react"));
52
+ var lodash_1 = require("lodash");
53
+ var index_1 = __importDefault(require("./index"));
54
+ // 下拉选项的是element时用于筛选过滤options
55
+ function SelectorWidthChildren(props) {
56
+ var _a = __read(react_1.useState(''), 2), prefix = _a[0], setPrefix = _a[1];
57
+ var options = props.options, rest = __rest(props, ["options"]);
58
+ react_1.useEffect(function () {
59
+ setPrefix('');
60
+ }, []);
61
+ var filterOptions = react_1.useMemo(function () {
62
+ var search = prefix.toLowerCase();
63
+ return prefix && options
64
+ ? options.filter(function (option) {
65
+ return option.filterText &&
66
+ lodash_1.includes(option.filterText.toLowerCase(), search);
67
+ })
68
+ : options;
69
+ }, [prefix, options]);
70
+ return (react_1.default.createElement(index_1.default, __assign({}, rest, { onSearch: setPrefix, searchValue: prefix, options: filterOptions, isCustomFilter: true })));
71
+ }
72
+ exports.default = SelectorWidthChildren;
@@ -52,6 +52,7 @@ export interface ISelectorProps<VT> extends Omit<SelectProps<VT>, 'options'> {
52
52
  * 下拉选项超出时用 '...' 来表示,默认 true
53
53
  */
54
54
  ellipsis?: boolean;
55
+ isCustomFilter?: boolean;
55
56
  }
56
57
  /**
57
58
  * 下拉选择组件封装
@@ -64,5 +65,6 @@ export default class Selector<VT extends SelectValue> extends React.Component<IS
64
65
  ellipsis: boolean;
65
66
  };
66
67
  handleCreateClick(e: any): void;
68
+ handleFilter(inputValue: string, option: any): boolean;
67
69
  render(): JSX.Element;
68
70
  }
@@ -129,10 +129,18 @@ var Selector = /** @class */ (function (_super) {
129
129
  createOptionClick();
130
130
  }
131
131
  };
132
+ Selector.prototype.handleFilter = function (inputValue, option) {
133
+ if (this.props.isCustomFilter) {
134
+ return true;
135
+ }
136
+ return lodash_1.isString(option === null || option === void 0 ? void 0 : option.children)
137
+ ? (option === null || option === void 0 ? void 0 : option.children.toLowerCase().indexOf(inputValue.toLowerCase())) >= 0
138
+ : true;
139
+ };
132
140
  Selector.prototype.render = function () {
133
141
  var _a;
134
- var _b = this.props, options = _b.options, groupOptions = _b.groupOptions, createOptionText = _b.createOptionText, selectAllOptionText = _b.selectAllOptionText, className = _b.className, dropdownClassName = _b.dropdownClassName, getPopupContainer = _b.getPopupContainer, ellipsis = _b.ellipsis, _c = _b.showArrow, showArrow = _c === void 0 ? true : _c, otherProps = __rest(_b, ["options", "groupOptions", "createOptionText", "selectAllOptionText", "className", "dropdownClassName", "getPopupContainer", "ellipsis", "showArrow"]);
135
- return (React.createElement(antd_1.Select, __assign({ className: classnames_1.default(style_1.SDK_PREFIX + "-selector", className), dropdownClassName: classnames_1.default(style_1.SDK_PREFIX + "-selector-dropdown", (_a = {}, _a[style_1.SDK_PREFIX + "-selector-no-ellipsis"] = !ellipsis, _a), dropdownClassName), getPopupContainer: getPopupContainer || this.context.getPopupContainer }, otherProps, { removeIcon: React.createElement(compatible_1.Icon, { type: "close-circle", theme: "filled", className: style_1.SDK_PREFIX + "-close-icon" }), showArrow: showArrow }),
142
+ var _b = this.props, options = _b.options, groupOptions = _b.groupOptions, createOptionText = _b.createOptionText, selectAllOptionText = _b.selectAllOptionText, className = _b.className, dropdownClassName = _b.dropdownClassName, getPopupContainer = _b.getPopupContainer, ellipsis = _b.ellipsis, _c = _b.showArrow, showArrow = _c === void 0 ? true : _c, isCustomFilter = _b.isCustomFilter, otherProps = __rest(_b, ["options", "groupOptions", "createOptionText", "selectAllOptionText", "className", "dropdownClassName", "getPopupContainer", "ellipsis", "showArrow", "isCustomFilter"]);
143
+ return (React.createElement(antd_1.Select, __assign({ className: classnames_1.default(style_1.SDK_PREFIX + "-selector", className), dropdownClassName: classnames_1.default(style_1.SDK_PREFIX + "-selector-dropdown", (_a = {}, _a[style_1.SDK_PREFIX + "-selector-no-ellipsis"] = !ellipsis, _a), dropdownClassName), getPopupContainer: getPopupContainer || this.context.getPopupContainer, filterOption: this.handleFilter }, otherProps, { removeIcon: React.createElement(compatible_1.Icon, { type: "close-circle", theme: "filled", className: style_1.SDK_PREFIX + "-close-icon" }), showArrow: showArrow, showSearch: true }),
136
144
  createOptionText && (React.createElement(antd_1.Select.Option, __assign({}, { className: style_1.SDK_PREFIX + "-selector-create-option" }, { key: "selector_create", disabled: true }, noneValueOption),
137
145
  React.createElement("a", { className: style_1.SDK_PREFIX + "-selector-create-lint", onClick: this.handleCreateClick }, createOptionText))),
138
146
  selectAllOptionText && (React.createElement(antd_1.Select.Option, __assign({}, { className: style_1.SDK_PREFIX + "-selector-create-option" }, { key: "selector_select_all", disabled: true }, noneValueOption),
@@ -151,6 +159,12 @@ var Selector = /** @class */ (function (_super) {
151
159
  __metadata("design:paramtypes", [Object]),
152
160
  __metadata("design:returntype", void 0)
153
161
  ], Selector.prototype, "handleCreateClick", null);
162
+ __decorate([
163
+ bind_1.default,
164
+ __metadata("design:type", Function),
165
+ __metadata("design:paramtypes", [String, Object]),
166
+ __metadata("design:returntype", void 0)
167
+ ], Selector.prototype, "handleFilter", null);
154
168
  return Selector;
155
169
  }(React.Component));
156
170
  exports.default = Selector;
@@ -38,7 +38,7 @@ var antd_1 = require("antd");
38
38
  var style_1 = require("../../constants/style");
39
39
  function TreeSelector(props) {
40
40
  var className = props.className, dropdownClassName = props.dropdownClassName, restProps = __rest(props, ["className", "dropdownClassName"]);
41
- return (React.createElement(antd_1.TreeSelect, __assign({ className: classnames_1.default(style_1.SDK_PREFIX + "-tree-select", className), dropdownClassName: classnames_1.default(style_1.SDK_PREFIX + "-tree-select-dropdown", dropdownClassName) }, restProps)));
41
+ return (React.createElement(antd_1.TreeSelect, __assign({ className: classnames_1.default(style_1.SDK_PREFIX + "-tree-select", className), dropdownClassName: classnames_1.default(style_1.SDK_PREFIX + "-tree-select-dropdown", dropdownClassName), showSearch: true, treeNodeFilterProp: "title" }, restProps)));
42
42
  }
43
43
  exports.TreeSelector = TreeSelector;
44
44
  exports.default = TreeSelector;
@@ -1,4 +1,7 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  var en_1 = require("./check_transform_list/en");
4
7
  var en_2 = require("./datetime/en");
@@ -6,11 +9,13 @@ var en_3 = require("./range_input/en");
6
9
  var en_4 = require("./steps/en");
7
10
  var en_5 = require("./table/en");
8
11
  var en_6 = require("./transfer/en");
12
+ var en_7 = __importDefault(require("./upload/en"));
9
13
  exports.component_en = {
10
14
  check_transform_list: en_1.check_transform_list_en,
11
15
  datetime: en_2.datetime_en,
12
16
  range_input: en_3.range_input_en,
13
17
  steps: en_4.steps_en,
14
18
  table: en_5.table_en,
15
- transfer: en_6.transfer_en
19
+ transfer: en_6.transfer_en,
20
+ upload: en_7.default
16
21
  };
@@ -4,6 +4,7 @@ import { IRangeInputLocale } from './range_input/type';
4
4
  import { IStepsLocale } from './steps/type';
5
5
  import { ITableLocale } from './table/type';
6
6
  import { ITransferLocale } from './transfer/type';
7
+ import { IUploadLocale } from './upload/type';
7
8
  export interface IComponentLocal {
8
9
  check_transform_list: ICheckTransformListLocale;
9
10
  datetime: IDateTimeLocale;
@@ -11,5 +12,6 @@ export interface IComponentLocal {
11
12
  steps: IStepsLocale;
12
13
  table: ITableLocale;
13
14
  transfer: ITransferLocale;
15
+ upload: IUploadLocale;
14
16
  }
15
17
  export declare const ComponentLocale: IComponentLocal;
@@ -0,0 +1,3 @@
1
+ import { IUploadLocale } from './type';
2
+ declare const upload_en: IUploadLocale;
3
+ export default upload_en;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var upload_en = {
4
+ play: 'Play',
5
+ pause: 'Pause',
6
+ stop: 'Stop',
7
+ error: 'Upload failed, try again later',
8
+ text: 'Drop file here to upload',
9
+ file: {
10
+ content: 'Drop your data file here',
11
+ steps: {
12
+ upload: 'Uploading',
13
+ complete: 'Done'
14
+ }
15
+ },
16
+ select_file: 'Selected',
17
+ min_size_error_msg: 'File size cannot be smaller than',
18
+ max_size_error_msg: 'File size cannot be larger than',
19
+ empty_file_error_msg: 'Cannot upload empty files',
20
+ byte: 'bytes'
21
+ };
22
+ exports.default = upload_en;
@@ -0,0 +1,20 @@
1
+ export interface IUploadLocale {
2
+ text: string;
3
+ play: string;
4
+ pause: string;
5
+ stop: string;
6
+ error: string;
7
+ file: {
8
+ content: string;
9
+ steps: {
10
+ upload: string;
11
+ complete: string;
12
+ };
13
+ };
14
+ select_file: string;
15
+ min_size_error_msg: string;
16
+ max_size_error_msg: string;
17
+ empty_file_error_msg: string;
18
+ byte: string;
19
+ }
20
+ export declare const UploadLocale: IUploadLocale;
@@ -0,0 +1,9 @@
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
+ var languageLocale_1 = require("../../../utils/languageLocale");
7
+ var zh_1 = __importDefault(require("./zh"));
8
+ var prefix = 'upload.';
9
+ exports.UploadLocale = languageLocale_1.languageLocale(prefix, zh_1.default);
@@ -0,0 +1,3 @@
1
+ import { IUploadLocale } from './type';
2
+ declare const upload_zh: IUploadLocale;
3
+ export default upload_zh;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var upload_zh = {
4
+ play: '恢复',
5
+ pause: '暂停',
6
+ stop: '停止',
7
+ error: '上传文件失败,请稍后重试',
8
+ text: '点击或将配置文件拖拽到这里上传',
9
+ file: {
10
+ content: '点击或将文件拖拽到这里上传',
11
+ steps: {
12
+ upload: '上传文件',
13
+ complete: '完成'
14
+ }
15
+ },
16
+ select_file: '选择文件',
17
+ min_size_error_msg: '文件大小不能小于',
18
+ max_size_error_msg: '文件大小不能大于',
19
+ empty_file_error_msg: '不能上传空文件',
20
+ byte: '字节'
21
+ };
22
+ exports.default = upload_zh;
@@ -1,4 +1,7 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  var zh_1 = require("./check_transform_list/zh");
4
7
  var zh_2 = require("./datetime/zh");
@@ -6,11 +9,13 @@ var zh_3 = require("./range_input/zh");
6
9
  var zh_4 = require("./steps/zh");
7
10
  var zh_5 = require("./table/zh");
8
11
  var zh_6 = require("./transfer/zh");
12
+ var zh_7 = __importDefault(require("./upload/zh"));
9
13
  exports.component_zh = {
10
14
  check_transform_list: zh_1.check_transform_list_zh,
11
15
  datetime: zh_2.datetime_zh,
12
16
  range_input: zh_3.range_input_zh,
13
17
  steps: zh_4.steps_zh,
14
18
  table: zh_5.table_zh,
15
- transfer: zh_6.transfer_zh
19
+ transfer: zh_6.transfer_zh,
20
+ upload: zh_7.default
16
21
  };