@nutui/nutui 3.1.22-beta.3 → 3.1.23-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.
Files changed (207) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +3 -4
  3. package/dist/nutui.es.js +20426 -4050
  4. package/dist/nutui.umd.js +20529 -4049
  5. package/dist/packages/_es/ActionSheet.js +149 -36
  6. package/dist/packages/_es/Address.js +535 -129
  7. package/dist/packages/_es/AddressList.js +615 -113
  8. package/dist/packages/_es/Animate.js +64 -0
  9. package/dist/packages/_es/Audio.js +257 -72
  10. package/dist/packages/_es/AudioOperate.js +100 -32
  11. package/dist/packages/_es/Avatar.js +162 -54
  12. package/dist/packages/_es/AvatarGroup.js +73 -14
  13. package/dist/packages/_es/BackTop.js +156 -43
  14. package/dist/packages/_es/Badge.js +86 -14
  15. package/dist/packages/_es/Barrage.js +120 -41
  16. package/dist/packages/_es/Button.js +128 -23
  17. package/dist/packages/_es/Calendar.js +246 -24
  18. package/dist/packages/_es/CalendarItem.js +2 -1
  19. package/dist/packages/_es/Card.js +107 -10
  20. package/dist/packages/_es/Cascader.js +496 -179
  21. package/dist/packages/_es/Category.js +58 -15
  22. package/dist/packages/_es/CategoryPane.js +111 -11
  23. package/dist/packages/_es/Cell.js +108 -21
  24. package/dist/packages/_es/CellGroup.js +44 -9
  25. package/dist/packages/_es/Checkbox.js +134 -29
  26. package/dist/packages/_es/CheckboxGroup.js +79 -29
  27. package/dist/packages/_es/CircleProgress.js +150 -28
  28. package/dist/packages/_es/Col.js +56 -14
  29. package/dist/packages/_es/Collapse.js +110 -24
  30. package/dist/packages/_es/CollapseItem.js +252 -80
  31. package/dist/packages/_es/Comment.js +434 -64
  32. package/dist/packages/_es/ConfigProvider.js +25 -0
  33. package/dist/packages/_es/CountDown.js +238 -75
  34. package/dist/packages/_es/CountUp.js +539 -159
  35. package/dist/packages/_es/DatePicker.js +315 -117
  36. package/dist/packages/_es/Dialog.js +289 -79
  37. package/dist/packages/_es/Divider.js +65 -32
  38. package/dist/packages/_es/Drag.js +197 -56
  39. package/dist/packages/_es/Ecard.js +159 -24
  40. package/dist/packages/_es/Elevator.js +255 -77
  41. package/dist/packages/_es/Ellipsis.js +206 -0
  42. package/dist/packages/_es/Empty.js +71 -12
  43. package/dist/packages/_es/FixedNav.js +122 -15
  44. package/dist/packages/_es/Form.js +151 -64
  45. package/dist/packages/_es/FormItem.js +114 -15
  46. package/dist/packages/_es/Grid.js +6 -5
  47. package/dist/packages/_es/GridItem.js +144 -33
  48. package/dist/packages/_es/Icon.js +40 -15
  49. package/dist/packages/_es/Image.js +142 -0
  50. package/dist/packages/_es/ImagePreview.js +547 -84
  51. package/dist/packages/_es/Indicator.js +62 -15
  52. package/dist/packages/_es/InfiniteLoading.js +249 -76
  53. package/dist/packages/_es/Input.js +433 -51
  54. package/dist/packages/_es/InputNumber.js +160 -41
  55. package/dist/packages/_es/Layout.js +5 -4
  56. package/dist/packages/_es/List.js +106 -37
  57. package/dist/packages/_es/Menu.js +168 -29
  58. package/dist/packages/_es/MenuItem.js +173 -34
  59. package/dist/packages/_es/Navbar.js +192 -30
  60. package/dist/packages/_es/NoticeBar.js +380 -93
  61. package/dist/packages/_es/Notify.js +227 -91
  62. package/dist/packages/_es/NumberKeyboard.js +272 -41
  63. package/dist/packages/_es/OldPicker.js +457 -149
  64. package/dist/packages/_es/OverLay.js +98 -40
  65. package/dist/packages/_es/Pagination.js +157 -39
  66. package/dist/packages/_es/Picker.js +460 -148
  67. package/dist/packages/_es/Popover.js +957 -337
  68. package/dist/packages/_es/Popup.js +299 -74
  69. package/dist/packages/_es/Price.js +118 -16
  70. package/dist/packages/_es/Progress.js +146 -14
  71. package/dist/packages/_es/PullRefresh.js +339 -100
  72. package/dist/packages/_es/Radio.js +90 -22
  73. package/dist/packages/_es/RadioGroup.js +37 -8
  74. package/dist/packages/_es/Range.js +408 -102
  75. package/dist/packages/_es/Rate.js +193 -16
  76. package/dist/packages/_es/Row.js +64 -22
  77. package/dist/packages/_es/SearchBar.js +238 -56
  78. package/dist/packages/_es/ShortPassword.js +225 -35
  79. package/dist/packages/_es/SideNavBar.js +81 -43
  80. package/dist/packages/_es/SideNavBarItem.js +46 -11
  81. package/dist/packages/_es/Signature.js +160 -60
  82. package/dist/packages/_es/Skeleton.js +136 -20
  83. package/dist/packages/_es/Sku.js +491 -103
  84. package/dist/packages/_es/Step.js +115 -39
  85. package/dist/packages/_es/Steps.js +53 -18
  86. package/dist/packages/_es/Sticky.js +138 -53
  87. package/dist/packages/_es/SubSideNavBar.js +82 -36
  88. package/dist/packages/_es/Swipe.js +178 -60
  89. package/dist/packages/_es/Swiper.js +433 -121
  90. package/dist/packages/_es/SwiperItem.js +53 -22
  91. package/dist/packages/_es/Switch.js +116 -21
  92. package/dist/packages/_es/TabPane.js +39 -12
  93. package/dist/packages/_es/Tabbar.js +72 -17
  94. package/dist/packages/_es/TabbarItem.js +151 -29
  95. package/dist/packages/_es/Table.js +178 -37
  96. package/dist/packages/_es/Tabs.js +202 -59
  97. package/dist/packages/_es/Tag.js +97 -20
  98. package/dist/packages/_es/TextArea.js +160 -42
  99. package/dist/packages/_es/TimeDetail.js +79 -37
  100. package/dist/packages/_es/TimePannel.js +48 -33
  101. package/dist/packages/_es/TimeSelect.js +112 -15
  102. package/dist/packages/_es/Toast.js +310 -90
  103. package/dist/packages/_es/Uploader.js +455 -120
  104. package/dist/packages/_es/Video.js +332 -93
  105. package/dist/packages/_es/common.js +128 -38
  106. package/dist/packages/_es/component.js +76 -35
  107. package/dist/packages/_es/index.js +6 -5
  108. package/dist/packages/_es/index2.js +30 -9
  109. package/dist/packages/_es/index3.js +8 -6
  110. package/dist/packages/_es/index4.js +64 -13
  111. package/dist/packages/_es/index5.js +783 -130
  112. package/dist/packages/_es/plugin-vue_export-helper.js +8 -7
  113. package/dist/packages/_es/pxCheck.js +5 -3
  114. package/dist/packages/_es/raf.js +15 -8
  115. package/dist/packages/animate/index.scss +299 -0
  116. package/dist/packages/cell/index.scss +7 -1
  117. package/dist/packages/checkbox/index.scss +10 -0
  118. package/dist/packages/configprovider/index.scss +2 -0
  119. package/dist/packages/ellipsis/index.scss +12 -0
  120. package/dist/packages/formitem/index.scss +12 -0
  121. package/dist/packages/griditem/index.scss +11 -0
  122. package/dist/packages/image/index.scss +39 -0
  123. package/dist/packages/imagepreview/index.scss +26 -2
  124. package/dist/packages/input/index.scss +13 -0
  125. package/dist/packages/inputnumber/index.scss +21 -0
  126. package/dist/packages/locale/lang/baseLang.js +3 -3
  127. package/dist/packages/locale/lang/en-US.js +105 -5
  128. package/dist/packages/locale/lang/id-ID.js +105 -5
  129. package/dist/packages/locale/lang/index.js +38 -16
  130. package/dist/packages/locale/lang/zh-CN.js +105 -5
  131. package/dist/packages/locale/lang/zh-TW.js +105 -5
  132. package/dist/packages/menu/index.scss +45 -36
  133. package/dist/packages/menuitem/index.scss +4 -0
  134. package/dist/packages/navbar/index.scss +9 -0
  135. package/dist/packages/pagination/index.scss +19 -0
  136. package/dist/packages/radio/index.scss +18 -0
  137. package/dist/packages/range/index.scss +19 -0
  138. package/dist/packages/rate/index.scss +1 -1
  139. package/dist/packages/searchbar/index.scss +21 -0
  140. package/dist/packages/switch/index.scss +1 -0
  141. package/dist/packages/tabbar/index.scss +5 -0
  142. package/dist/packages/tabbaritem/index.scss +7 -0
  143. package/dist/packages/tabpane/index.scss +5 -0
  144. package/dist/packages/tabs/index.scss +22 -0
  145. package/dist/packages/textarea/index.scss +8 -0
  146. package/dist/smartips/attributes.json +140 -4
  147. package/dist/smartips/tags.json +55 -6
  148. package/dist/smartips/web-types.json +6963 -0
  149. package/dist/style.css +1 -1
  150. package/dist/style.es.js +1 -1
  151. package/dist/styles/font/config.json +3 -1
  152. package/dist/styles/font/demo_index.html +49 -3
  153. package/dist/styles/font/iconfont.css +11 -3
  154. package/dist/styles/font/iconfont.js +15 -15
  155. package/dist/styles/font/iconfont.json +14 -0
  156. package/dist/styles/font/iconfont.ttf +0 -0
  157. package/dist/styles/font/iconfont.woff +0 -0
  158. package/dist/styles/font/iconfont.woff2 +0 -0
  159. package/dist/styles/themes/default.scss +54 -50
  160. package/dist/styles/themes/jdb.scss +54 -50
  161. package/dist/styles/themes/jdt.scss +54 -50
  162. package/dist/styles/variables-jdb.scss +12 -0
  163. package/dist/styles/variables-jdt.scss +12 -0
  164. package/dist/styles/variables.scss +12 -0
  165. package/dist/types/__VUE/actionsheet/index.vue.d.ts +3 -3
  166. package/dist/types/__VUE/address/index.vue.d.ts +7 -7
  167. package/dist/types/__VUE/animate/index.vue.d.ts +48 -0
  168. package/dist/types/__VUE/animate/type.d.ts +6 -0
  169. package/dist/types/__VUE/avatar/index.vue.d.ts +3 -3
  170. package/dist/types/__VUE/calendar/index.vue.d.ts +1 -1
  171. package/dist/types/__VUE/calendaritem/index.vue.d.ts +10 -2
  172. package/dist/types/__VUE/cascader/index.vue.d.ts +2 -2
  173. package/dist/types/__VUE/circleprogress/index.vue.d.ts +2 -2
  174. package/dist/types/__VUE/collapse/index.vue.d.ts +3 -1
  175. package/dist/types/__VUE/configprovider/common.d.ts +20 -0
  176. package/dist/types/__VUE/configprovider/index.vue.d.ts +33 -0
  177. package/dist/types/__VUE/datepicker/index.vue.d.ts +2 -2
  178. package/dist/types/__VUE/dialog/index.vue.d.ts +2 -2
  179. package/dist/types/__VUE/ellipsis/index.vue.d.ts +72 -0
  180. package/dist/types/__VUE/fixednav/index.vue.d.ts +2 -2
  181. package/dist/types/__VUE/grid/index.vue.d.ts +2 -2
  182. package/dist/types/__VUE/image/index.vue.d.ts +105 -0
  183. package/dist/types/__VUE/image/type.d.ts +6 -0
  184. package/dist/types/__VUE/imagepreview/imagePreviewItem.vue.d.ts +95 -0
  185. package/dist/types/__VUE/imagepreview/index.vue.d.ts +56 -24
  186. package/dist/types/__VUE/menu/index.vue.d.ts +31 -4
  187. package/dist/types/__VUE/menuitem/index.vue.d.ts +12 -3
  188. package/dist/types/__VUE/noticebar/index.vue.d.ts +1 -1
  189. package/dist/types/__VUE/numberkeyboard/index.vue.d.ts +2 -2
  190. package/dist/types/__VUE/oldpicker/index.vue.d.ts +4 -4
  191. package/dist/types/__VUE/picker/index.vue.d.ts +4 -4
  192. package/dist/types/__VUE/popover/index.vue.d.ts +8 -8
  193. package/dist/types/__VUE/popup/index.vue.d.ts +4 -4
  194. package/dist/types/__VUE/range/index.vue.d.ts +1 -1
  195. package/dist/types/__VUE/rate/common.d.ts +149 -0
  196. package/dist/types/__VUE/rate/index.vue.d.ts +17 -7
  197. package/dist/types/__VUE/row/index.vue.d.ts +2 -2
  198. package/dist/types/__VUE/shortpassword/index.vue.d.ts +2 -2
  199. package/dist/types/__VUE/sku/index.vue.d.ts +3 -3
  200. package/dist/types/__VUE/swipe/index.vue.d.ts +2 -2
  201. package/dist/types/__VUE/swiper/index.vue.d.ts +2 -2
  202. package/dist/types/__VUE/switch/index.vue.d.ts +2 -2
  203. package/dist/types/__VUE/timeselect/index.vue.d.ts +3 -2
  204. package/dist/types/__VUE/uploader/uploader.d.ts +1 -0
  205. package/dist/types/index.d.ts +1 -1
  206. package/dist/types/nutui.d.ts +5 -1
  207. package/package.json +5 -4
@@ -1,147 +1,482 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
- var __hasOwnProp = Object.prototype.hasOwnProperty;
4
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
- var __spreadValues = (a2, b2) => {
7
- for (var prop in b2 || (b2 = {}))
8
- if (__hasOwnProp.call(b2, prop))
9
- __defNormalProp(a2, prop, b2[prop]);
10
- if (__getOwnPropSymbols)
11
- for (var prop of __getOwnPropSymbols(b2)) {
12
- if (__propIsEnum.call(b2, prop))
13
- __defNormalProp(a2, prop, b2[prop]);
14
- }
15
- return a2;
16
- };
17
1
  /*!
18
- * @nutui/nutui v3.1.22-beta.3 Wed Jun 15 2022 20:12:30 GMT+0800 (中国标准时间)
2
+ * @nutui/nutui v3.1.23-beta.0 Mon Jun 27 2022 17:55:50 GMT+0800 (中国标准时间)
19
3
  * (c) 2022 @jdf2e.
20
4
  * Released under the MIT License.
21
5
  */
22
- import { reactive as e, computed as t, resolveComponent as a, openBlock as l, createElementBlock as s, normalizeClass as i, renderSlot as n, Fragment as o, createCommentVNode as r, renderList as u, createElementVNode as p, toDisplayString as c, createVNode as d, createBlock as m, createTextVNode as f } from "vue";
23
- import { c as g } from "./component.js";
24
- import { _ as h } from "./plugin-vue_export-helper.js";
6
+ import { reactive, computed, resolveComponent, openBlock, createElementBlock, normalizeClass, renderSlot, Fragment, createCommentVNode, renderList, createElementVNode, toDisplayString, createVNode, createBlock, createTextVNode } from "vue";
7
+ import { c as createComponent } from "./component.js";
8
+ import { _ as _export_sfc } from "./plugin-vue_export-helper.js";
25
9
  import "../locale/lang";
26
- class y {
10
+ class UploadOptions {
27
11
  constructor() {
28
- this.url = "", this.name = "file", this.method = "post", this.xhrState = 200, this.timeout = 3e4, this.headers = {}, this.withCredentials = false;
12
+ this.url = "";
13
+ this.name = "file";
14
+ this.fileType = "image";
15
+ this.method = "post";
16
+ this.xhrState = 200;
17
+ this.timeout = 30 * 1e3;
18
+ this.headers = {};
19
+ this.withCredentials = false;
29
20
  }
30
21
  }
31
- class _ {
32
- constructor(e2) {
33
- this.options = e2;
22
+ class Uploader {
23
+ constructor(options) {
24
+ this.options = options;
34
25
  }
35
26
  upload() {
36
27
  var _a;
37
- const e2 = this.options, t2 = new XMLHttpRequest();
38
- if (t2.timeout = e2.timeout, t2.upload) {
39
- t2.upload.addEventListener("progress", (t3) => {
28
+ const options = this.options;
29
+ const xhr = new XMLHttpRequest();
30
+ xhr.timeout = options.timeout;
31
+ if (xhr.upload) {
32
+ xhr.upload.addEventListener("progress", (e) => {
40
33
  var _a2;
41
- (_a2 = e2.onProgress) == null ? void 0 : _a2.call(e2, t3, e2);
42
- }, false), t2.onreadystatechange = () => {
34
+ (_a2 = options.onProgress) == null ? void 0 : _a2.call(options, e, options);
35
+ }, false);
36
+ xhr.onreadystatechange = () => {
43
37
  var _a2, _b;
44
- t2.readyState === 4 && (t2.status == e2.xhrState ? (_a2 = e2.onSuccess) == null ? void 0 : _a2.call(e2, t2.responseText, e2) : (_b = e2.onFailure) == null ? void 0 : _b.call(e2, t2.responseText, e2));
45
- }, t2.withCredentials = e2.withCredentials, t2.open(e2.method, e2.url, true);
46
- for (const [a2, l2] of Object.entries(e2.headers))
47
- t2.setRequestHeader(a2, l2);
48
- (_a = e2.onStart) == null ? void 0 : _a.call(e2, e2), t2.send(e2.formData);
38
+ if (xhr.readyState === 4) {
39
+ if (xhr.status == options.xhrState) {
40
+ (_a2 = options.onSuccess) == null ? void 0 : _a2.call(options, xhr.responseText, options);
41
+ } else {
42
+ (_b = options.onFailure) == null ? void 0 : _b.call(options, xhr.responseText, options);
43
+ }
44
+ }
45
+ };
46
+ xhr.withCredentials = options.withCredentials;
47
+ xhr.open(options.method, options.url, true);
48
+ for (const [key, value] of Object.entries(options.headers)) {
49
+ xhr.setRequestHeader(key, value);
50
+ }
51
+ (_a = options.onStart) == null ? void 0 : _a.call(options, options);
52
+ xhr.send(options.formData);
53
+ } else {
54
+ console.warn("\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 XMLHttpRequest");
49
55
  }
50
56
  }
51
- uploadTaro(e2, t2) {
57
+ uploadTaro(uploadFile, env) {
52
58
  var _a;
53
- const a2 = this.options;
54
- if (t2 === "WEB")
59
+ const options = this.options;
60
+ if (env === "WEB") {
55
61
  this.upload();
56
- else {
57
- const t3 = e2({ url: a2.url, filePath: a2.taroFilePath, header: __spreadValues({ "Content-Type": "multipart/form-data" }, a2.headers), formData: a2.formData, name: a2.name, success(e3) {
58
- var _a2, _b;
59
- a2.xhrState == e3.statusCode ? (_a2 = a2.onSuccess) == null ? void 0 : _a2.call(a2, e3, a2) : (_b = a2.onFailure) == null ? void 0 : _b.call(a2, e3, a2);
60
- }, fail(e3) {
61
- var _a2;
62
- (_a2 = a2.onFailure) == null ? void 0 : _a2.call(a2, e3, a2);
63
- } });
64
- (_a = a2.onStart) == null ? void 0 : _a.call(a2, a2), t3.progress((e3) => {
62
+ } else {
63
+ const uploadTask = uploadFile({
64
+ url: options.url,
65
+ filePath: options.taroFilePath,
66
+ fileType: options.fileType,
67
+ header: {
68
+ "Content-Type": "multipart/form-data",
69
+ ...options.headers
70
+ },
71
+ formData: options.formData,
72
+ name: options.name,
73
+ success(response) {
74
+ var _a2, _b;
75
+ if (options.xhrState == response.statusCode) {
76
+ (_a2 = options.onSuccess) == null ? void 0 : _a2.call(options, response, options);
77
+ } else {
78
+ (_b = options.onFailure) == null ? void 0 : _b.call(options, response, options);
79
+ }
80
+ },
81
+ fail(e) {
82
+ var _a2;
83
+ (_a2 = options.onFailure) == null ? void 0 : _a2.call(options, e, options);
84
+ }
85
+ });
86
+ (_a = options.onStart) == null ? void 0 : _a.call(options, options);
87
+ uploadTask.progress((res) => {
65
88
  var _a2;
66
- (_a2 = a2.onProgress) == null ? void 0 : _a2.call(a2, e3, a2);
89
+ (_a2 = options.onProgress) == null ? void 0 : _a2.call(options, res, options);
67
90
  });
68
91
  }
69
92
  }
70
93
  }
71
- const { translate: w } = g("uploader");
72
- class v {
94
+ const { translate: translate$1 } = createComponent("uploader");
95
+ class FileItem {
73
96
  constructor() {
74
- this.status = "ready", this.message = w("ready"), this.uid = new Date().getTime().toString(), this.percentage = 0, this.formData = {};
97
+ this.status = "ready";
98
+ this.message = translate$1("ready");
99
+ this.uid = new Date().getTime().toString();
100
+ this.percentage = 0;
101
+ this.formData = {};
75
102
  }
76
103
  }
77
- const { componentName: b, create: C, translate: k } = g("uploader"), S = C({ props: { name: { type: String, default: "file" }, url: { type: String, default: "" }, timeout: { type: [Number, String], default: 3e4 }, fileList: { type: Array, default: () => [] }, isPreview: { type: Boolean, default: true }, listType: { type: String, default: "picture" }, isDeletable: { type: Boolean, default: true }, method: { type: String, default: "post" }, capture: { type: Boolean, default: false }, maximize: { type: [Number, String], default: Number.MAX_VALUE }, maximum: { type: [Number, String], default: 1 }, clearInput: { type: Boolean, default: true }, accept: { type: String, default: "*" }, headers: { type: Object, default: {} }, data: { type: Object, default: {} }, uploadIcon: { type: String, default: "photograph" }, uploadIconSize: { type: [String, Number], default: "" }, xhrState: { type: [Number, String], default: 200 }, withCredentials: { type: Boolean, default: false }, multiple: { type: Boolean, default: false }, disabled: { type: Boolean, default: false }, autoUpload: { type: Boolean, default: true }, beforeUpload: { type: Function, default: null }, beforeDelete: { type: Function, default: (e2, t2) => true }, onChange: { type: Function } }, emits: ["start", "progress", "oversize", "success", "failure", "change", "delete", "update:fileList", "file-item-click"], setup(a2, { emit: l2 }) {
78
- const s2 = e(a2.fileList);
79
- let i2 = [];
80
- const n2 = t(() => ({ [b]: true })), o2 = (e2 = -1) => {
81
- e2 > -1 ? i2.splice(e2, 1) : i2 = [];
82
- }, r2 = (t2) => {
83
- t2.forEach((t3, n3) => {
84
- const r3 = new FormData();
85
- for (const [e2, t4] of Object.entries(a2.data))
86
- r3.append(e2, t4);
87
- r3.append(a2.name, t3);
88
- const u3 = e(new v());
89
- if (u3.name = t3.name, u3.status = "ready", u3.type = t3.type, u3.formData = r3, u3.message = k("waitingUpload"), ((e2, t4) => {
90
- const n4 = new y();
91
- n4.url = a2.url, n4.formData = e2.formData, n4.timeout = 1 * a2.timeout, n4.method = a2.method, n4.xhrState = a2.xhrState, n4.headers = a2.headers, n4.withCredentials = a2.withCredentials, n4.onStart = (a3) => {
92
- e2.status = "ready", e2.message = k("readyUpload"), o2(t4), l2("start", a3);
93
- }, n4.onProgress = (t5, a3) => {
94
- e2.status = "uploading", e2.message = k("uploading"), e2.percentage = (t5.loaded / t5.total * 100).toFixed(0), l2("progress", { event: t5, option: a3, percentage: e2.percentage });
95
- }, n4.onSuccess = (t5, a3) => {
96
- e2.status = "success", e2.message = k("success"), l2("success", { responseText: t5, option: a3, fileItem: e2 }), l2("update:fileList", s2);
97
- }, n4.onFailure = (t5, a3) => {
98
- e2.status = "error", e2.message = k("error"), l2("failure", { responseText: t5, option: a3, fileItem: e2 });
99
- };
100
- let r4 = new _(n4);
101
- a2.autoUpload ? r4.upload() : i2.push(new Promise((e3, t5) => {
102
- e3(r4);
103
- }));
104
- })(u3, n3), a2.isPreview && t3.type.includes("image")) {
105
- const e2 = new FileReader();
106
- e2.onload = (e3) => {
107
- u3.url = e3.target.result, s2.push(u3);
108
- }, e2.readAsDataURL(t3);
109
- } else
110
- s2.push(u3);
104
+ const { componentName, create, translate } = createComponent("uploader");
105
+ const _sfc_main = create({
106
+ props: {
107
+ name: { type: String, default: "file" },
108
+ url: { type: String, default: "" },
109
+ timeout: { type: [Number, String], default: 1e3 * 30 },
110
+ fileList: { type: Array, default: () => [] },
111
+ isPreview: { type: Boolean, default: true },
112
+ listType: { type: String, default: "picture" },
113
+ isDeletable: { type: Boolean, default: true },
114
+ method: { type: String, default: "post" },
115
+ capture: { type: Boolean, default: false },
116
+ maximize: { type: [Number, String], default: Number.MAX_VALUE },
117
+ maximum: { type: [Number, String], default: 1 },
118
+ clearInput: { type: Boolean, default: true },
119
+ accept: { type: String, default: "*" },
120
+ headers: { type: Object, default: {} },
121
+ data: { type: Object, default: {} },
122
+ uploadIcon: { type: String, default: "photograph" },
123
+ uploadIconSize: { type: [String, Number], default: "" },
124
+ xhrState: { type: [Number, String], default: 200 },
125
+ withCredentials: { type: Boolean, default: false },
126
+ multiple: { type: Boolean, default: false },
127
+ disabled: { type: Boolean, default: false },
128
+ autoUpload: { type: Boolean, default: true },
129
+ beforeUpload: {
130
+ type: Function,
131
+ default: null
132
+ },
133
+ beforeDelete: {
134
+ type: Function,
135
+ default: (file, files) => {
136
+ return true;
137
+ }
138
+ },
139
+ onChange: { type: Function }
140
+ },
141
+ emits: [
142
+ "start",
143
+ "progress",
144
+ "oversize",
145
+ "success",
146
+ "failure",
147
+ "change",
148
+ "delete",
149
+ "update:fileList",
150
+ "file-item-click"
151
+ ],
152
+ setup(props, { emit }) {
153
+ const fileList = reactive(props.fileList);
154
+ let uploadQueue = [];
155
+ const classes = computed(() => {
156
+ const prefixCls = componentName;
157
+ return {
158
+ [prefixCls]: true
159
+ };
111
160
  });
112
- }, u2 = (e2) => {
113
- const t2 = 1 * a2.maximum, i3 = 1 * a2.maximize, n3 = new Array();
114
- e2 = e2.filter((e3) => !(e3.size > i3) || (n3.push(e3), false)), n3.length && l2("oversize", n3);
115
- let o3 = e2.length + s2.length;
116
- return o3 > t2 && e2.splice(e2.length - (o3 - t2)), e2;
117
- };
118
- return { onChange: (e2) => {
119
- if (a2.disabled)
120
- return;
121
- const t2 = e2.target;
122
- let { files: i3 } = t2;
123
- if (a2.beforeUpload)
124
- a2.beforeUpload(i3).then((e3) => {
125
- const t3 = u2(new Array().slice.call(e3));
126
- r2(t3);
161
+ const clearInput = (el) => {
162
+ el.value = "";
163
+ };
164
+ const fileItemClick = (fileItem) => {
165
+ emit("file-item-click", { fileItem });
166
+ };
167
+ const executeUpload = (fileItem, index2) => {
168
+ const uploadOption = new UploadOptions();
169
+ uploadOption.url = props.url;
170
+ uploadOption.formData = fileItem.formData;
171
+ uploadOption.timeout = props.timeout * 1;
172
+ uploadOption.method = props.method;
173
+ uploadOption.xhrState = props.xhrState;
174
+ uploadOption.headers = props.headers;
175
+ uploadOption.withCredentials = props.withCredentials;
176
+ uploadOption.onStart = (option) => {
177
+ fileItem.status = "ready";
178
+ fileItem.message = translate("readyUpload");
179
+ clearUploadQueue(index2);
180
+ emit("start", option);
181
+ };
182
+ uploadOption.onProgress = (event, option) => {
183
+ fileItem.status = "uploading";
184
+ fileItem.message = translate("uploading");
185
+ fileItem.percentage = (event.loaded / event.total * 100).toFixed(0);
186
+ emit("progress", { event, option, percentage: fileItem.percentage });
187
+ };
188
+ uploadOption.onSuccess = (responseText, option) => {
189
+ fileItem.status = "success";
190
+ fileItem.message = translate("success");
191
+ emit("success", {
192
+ responseText,
193
+ option,
194
+ fileItem
195
+ });
196
+ emit("update:fileList", fileList);
197
+ };
198
+ uploadOption.onFailure = (responseText, option) => {
199
+ fileItem.status = "error";
200
+ fileItem.message = translate("error");
201
+ emit("failure", {
202
+ responseText,
203
+ option,
204
+ fileItem
205
+ });
206
+ };
207
+ let task = new Uploader(uploadOption);
208
+ if (props.autoUpload) {
209
+ task.upload();
210
+ } else {
211
+ uploadQueue.push(new Promise((resolve, reject) => {
212
+ resolve(task);
213
+ }));
214
+ }
215
+ };
216
+ const clearUploadQueue = (index2 = -1) => {
217
+ if (index2 > -1) {
218
+ uploadQueue.splice(index2, 1);
219
+ } else {
220
+ uploadQueue = [];
221
+ }
222
+ };
223
+ const submit = () => {
224
+ Promise.all(uploadQueue).then((res) => {
225
+ res.forEach((i) => i.upload());
127
226
  });
128
- else {
129
- const e3 = u2(new Array().slice.call(i3));
130
- r2(e3);
131
- }
132
- l2("change", { fileList: s2, event: e2 }), a2.clearInput && (t2.value = "");
133
- }, onDelete: (e2, t2) => {
134
- o2(t2), a2.beforeDelete(e2, s2) && (s2.splice(t2, 1), l2("delete", { file: e2, fileList: s2, index: t2 }));
135
- }, fileList: s2, classes: n2, fileItemClick: (e2) => {
136
- l2("file-item-click", { fileItem: e2 });
137
- }, clearUploadQueue: o2, submit: () => {
138
- Promise.all(i2).then((e2) => {
139
- e2.forEach((e3) => e3.upload());
140
- });
141
- } };
142
- } }), x = { key: 0, class: "nut-uploader__slot" }, D = ["accept", "multiple", "name", "disabled"], L = ["accept", "multiple", "name", "disabled"], I = { key: 0, class: "nut-uploader__preview-img" }, T = { key: 0, class: "nut-uploader__preview__progress" }, F = { class: "nut-uploader__preview__progress__msg" }, z = { key: 1, class: "nut-uploader__preview__progress" }, U = { class: "nut-uploader__preview__progress__msg" }, B = ["onClick", "src"], P = { key: 4, class: "nut-uploader__preview-img__file" }, A = ["onClick"], N = { class: "tips" }, j = { key: 1, class: "nut-uploader__preview-list" }, E = ["onClick"], O = ["accept", "multiple", "name", "disabled"], R = ["accept", "multiple", "name", "disabled"];
143
- var $ = h(S, [["render", function(e2, t2, g2, h2, y2, _2) {
144
- const w2 = a("nut-icon"), v2 = a("nut-progress");
145
- return l(), s("view", { class: i(e2.classes) }, [e2.$slots.default ? (l(), s("view", x, [n(e2.$slots, "default"), e2.maximum - e2.fileList.length ? (l(), s(o, { key: 0 }, [e2.capture ? (l(), s("input", { key: 0, class: "nut-uploader__input", type: "file", capture: "camera", accept: e2.accept, multiple: e2.multiple, name: e2.name, disabled: e2.disabled, onChange: t2[0] || (t2[0] = (...t3) => e2.onChange && e2.onChange(...t3)) }, null, 40, D)) : (l(), s("input", { key: 1, class: "nut-uploader__input", type: "file", accept: e2.accept, multiple: e2.multiple, name: e2.name, disabled: e2.disabled, onChange: t2[1] || (t2[1] = (...t3) => e2.onChange && e2.onChange(...t3)) }, null, 40, L))], 64)) : r("", true)])) : r("", true), (l(true), s(o, null, u(e2.fileList, (t3, a2) => (l(), s("view", { class: i(["nut-uploader__preview", [e2.listType]]), key: t3.uid }, [e2.listType != "picture" || e2.$slots.default ? e2.listType == "list" ? (l(), s("view", j, [p("view", { onClick: (a3) => e2.fileItemClick(t3), class: i(["nut-uploader__preview-img__file__name", [t3.status]]) }, [d(w2, { name: "link" }), f("\xA0" + c(t3.name), 1)], 10, E), d(w2, { class: "nut-uploader__preview-img__file__del", onClick: (l2) => e2.onDelete(t3, a2), color: "#808080", name: "del" }, null, 8, ["onClick"]), t3.status == "uploading" ? (l(), m(v2, { key: 0, size: "small", percentage: t3.percentage, "stroke-color": "linear-gradient(270deg, rgba(18,126,255,1) 0%,rgba(32,147,255,1) 32.815625%,rgba(13,242,204,1) 100%)", "show-text": false }, null, 8, ["percentage"])) : r("", true)])) : r("", true) : (l(), s("view", I, [t3.status == "ready" ? (l(), s("view", T, [p("view", F, c(t3.message), 1)])) : t3.status != "success" ? (l(), s("view", z, [d(w2, { color: "#fff", name: t3.status == "error" ? "failure" : "loading" }, null, 8, ["name"]), p("view", U, c(t3.message), 1)])) : r("", true), e2.isDeletable ? (l(), m(w2, { key: 2, color: "rgba(0,0,0,0.6)", onClick: (l2) => e2.onDelete(t3, a2), class: "close", name: "failure" }, null, 8, ["onClick"])) : r("", true), t3.type.includes("image") && t3.url ? (l(), s("img", { key: 3, class: "nut-uploader__preview-img__c", onClick: (a3) => e2.fileItemClick(t3), src: t3.url }, null, 8, B)) : (l(), s("view", P, [p("view", { onClick: (a3) => e2.fileItemClick(t3), class: "nut-uploader__preview-img__file__name" }, [d(w2, { color: "#808080", name: "link" }), f("\xA0" + c(t3.name), 1)], 8, A)])), p("view", N, c(t3.name), 1)]))], 2))), 128)), e2.listType == "picture" && !e2.$slots.default && e2.maximum - e2.fileList.length ? (l(), s("view", { key: 1, class: i(["nut-uploader__upload", [e2.listType]]) }, [d(w2, { size: e2.uploadIconSize, color: "#808080", name: e2.uploadIcon }, null, 8, ["size", "name"]), e2.capture ? (l(), s("input", { key: 0, class: "nut-uploader__input", type: "file", capture: "camera", accept: e2.accept, multiple: e2.multiple, name: e2.name, disabled: e2.disabled, onChange: t2[2] || (t2[2] = (...t3) => e2.onChange && e2.onChange(...t3)) }, null, 40, O)) : (l(), s("input", { key: 1, class: "nut-uploader__input", type: "file", accept: e2.accept, multiple: e2.multiple, name: e2.name, disabled: e2.disabled, onChange: t2[3] || (t2[3] = (...t3) => e2.onChange && e2.onChange(...t3)) }, null, 40, R))], 2)) : r("", true)], 2);
146
- }]]);
147
- export { $ as default };
227
+ };
228
+ const readFile = (files) => {
229
+ files.forEach((file, index2) => {
230
+ const formData = new FormData();
231
+ for (const [key, value] of Object.entries(props.data)) {
232
+ formData.append(key, value);
233
+ }
234
+ formData.append(props.name, file);
235
+ const fileItem = reactive(new FileItem());
236
+ fileItem.name = file.name;
237
+ fileItem.status = "ready";
238
+ fileItem.type = file.type;
239
+ fileItem.formData = formData;
240
+ fileItem.message = translate("waitingUpload");
241
+ executeUpload(fileItem, index2);
242
+ if (props.isPreview && file.type.includes("image")) {
243
+ const reader = new FileReader();
244
+ reader.onload = (event) => {
245
+ fileItem.url = event.target.result;
246
+ fileList.push(fileItem);
247
+ };
248
+ reader.readAsDataURL(file);
249
+ } else {
250
+ fileList.push(fileItem);
251
+ }
252
+ });
253
+ };
254
+ const filterFiles = (files) => {
255
+ const maximum = props.maximum * 1;
256
+ const maximize = props.maximize * 1;
257
+ const oversizes = new Array();
258
+ files = files.filter((file) => {
259
+ if (file.size > maximize) {
260
+ oversizes.push(file);
261
+ return false;
262
+ } else {
263
+ return true;
264
+ }
265
+ });
266
+ if (oversizes.length) {
267
+ emit("oversize", oversizes);
268
+ }
269
+ let currentFileLength = files.length + fileList.length;
270
+ if (currentFileLength > maximum) {
271
+ files.splice(files.length - (currentFileLength - maximum));
272
+ }
273
+ return files;
274
+ };
275
+ const onDelete = (file, index2) => {
276
+ clearUploadQueue(index2);
277
+ if (props.beforeDelete(file, fileList)) {
278
+ fileList.splice(index2, 1);
279
+ emit("delete", {
280
+ file,
281
+ fileList,
282
+ index: index2
283
+ });
284
+ }
285
+ };
286
+ const onChange = (event) => {
287
+ if (props.disabled) {
288
+ return;
289
+ }
290
+ const $el = event.target;
291
+ let { files } = $el;
292
+ if (props.beforeUpload) {
293
+ props.beforeUpload(files).then((f) => {
294
+ const _files = filterFiles(new Array().slice.call(f));
295
+ readFile(_files);
296
+ });
297
+ } else {
298
+ const _files = filterFiles(new Array().slice.call(files));
299
+ readFile(_files);
300
+ }
301
+ emit("change", {
302
+ fileList,
303
+ event
304
+ });
305
+ if (props.clearInput) {
306
+ clearInput($el);
307
+ }
308
+ };
309
+ return {
310
+ onChange,
311
+ onDelete,
312
+ fileList,
313
+ classes,
314
+ fileItemClick,
315
+ clearUploadQueue,
316
+ submit
317
+ };
318
+ }
319
+ });
320
+ const _hoisted_1 = {
321
+ key: 0,
322
+ class: "nut-uploader__slot"
323
+ };
324
+ const _hoisted_2 = ["accept", "multiple", "name", "disabled"];
325
+ const _hoisted_3 = ["accept", "multiple", "name", "disabled"];
326
+ const _hoisted_4 = {
327
+ key: 0,
328
+ class: "nut-uploader__preview-img"
329
+ };
330
+ const _hoisted_5 = {
331
+ key: 0,
332
+ class: "nut-uploader__preview__progress"
333
+ };
334
+ const _hoisted_6 = { class: "nut-uploader__preview__progress__msg" };
335
+ const _hoisted_7 = {
336
+ key: 1,
337
+ class: "nut-uploader__preview__progress"
338
+ };
339
+ const _hoisted_8 = { class: "nut-uploader__preview__progress__msg" };
340
+ const _hoisted_9 = ["onClick", "src"];
341
+ const _hoisted_10 = {
342
+ key: 4,
343
+ class: "nut-uploader__preview-img__file"
344
+ };
345
+ const _hoisted_11 = ["onClick"];
346
+ const _hoisted_12 = { class: "tips" };
347
+ const _hoisted_13 = {
348
+ key: 1,
349
+ class: "nut-uploader__preview-list"
350
+ };
351
+ const _hoisted_14 = ["onClick"];
352
+ const _hoisted_15 = ["accept", "multiple", "name", "disabled"];
353
+ const _hoisted_16 = ["accept", "multiple", "name", "disabled"];
354
+ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
355
+ const _component_nut_icon = resolveComponent("nut-icon");
356
+ const _component_nut_progress = resolveComponent("nut-progress");
357
+ return openBlock(), createElementBlock("view", {
358
+ class: normalizeClass(_ctx.classes)
359
+ }, [
360
+ _ctx.$slots.default ? (openBlock(), createElementBlock("view", _hoisted_1, [
361
+ renderSlot(_ctx.$slots, "default"),
362
+ _ctx.maximum - _ctx.fileList.length ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
363
+ _ctx.capture ? (openBlock(), createElementBlock("input", {
364
+ key: 0,
365
+ class: "nut-uploader__input",
366
+ type: "file",
367
+ capture: "camera",
368
+ accept: _ctx.accept,
369
+ multiple: _ctx.multiple,
370
+ name: _ctx.name,
371
+ disabled: _ctx.disabled,
372
+ onChange: _cache[0] || (_cache[0] = (...args) => _ctx.onChange && _ctx.onChange(...args))
373
+ }, null, 40, _hoisted_2)) : (openBlock(), createElementBlock("input", {
374
+ key: 1,
375
+ class: "nut-uploader__input",
376
+ type: "file",
377
+ accept: _ctx.accept,
378
+ multiple: _ctx.multiple,
379
+ name: _ctx.name,
380
+ disabled: _ctx.disabled,
381
+ onChange: _cache[1] || (_cache[1] = (...args) => _ctx.onChange && _ctx.onChange(...args))
382
+ }, null, 40, _hoisted_3))
383
+ ], 64)) : createCommentVNode("", true)
384
+ ])) : createCommentVNode("", true),
385
+ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.fileList, (item, index2) => {
386
+ return openBlock(), createElementBlock("view", {
387
+ class: normalizeClass(["nut-uploader__preview", [_ctx.listType]]),
388
+ key: item.uid
389
+ }, [
390
+ _ctx.listType == "picture" && !_ctx.$slots.default ? (openBlock(), createElementBlock("view", _hoisted_4, [
391
+ item.status == "ready" ? (openBlock(), createElementBlock("view", _hoisted_5, [
392
+ createElementVNode("view", _hoisted_6, toDisplayString(item.message), 1)
393
+ ])) : item.status != "success" ? (openBlock(), createElementBlock("view", _hoisted_7, [
394
+ createVNode(_component_nut_icon, {
395
+ color: "#fff",
396
+ name: item.status == "error" ? "failure" : "loading"
397
+ }, null, 8, ["name"]),
398
+ createElementVNode("view", _hoisted_8, toDisplayString(item.message), 1)
399
+ ])) : createCommentVNode("", true),
400
+ _ctx.isDeletable ? (openBlock(), createBlock(_component_nut_icon, {
401
+ key: 2,
402
+ color: "rgba(0,0,0,0.6)",
403
+ onClick: ($event) => _ctx.onDelete(item, index2),
404
+ class: "close",
405
+ name: "failure"
406
+ }, null, 8, ["onClick"])) : createCommentVNode("", true),
407
+ item.type.includes("image") && item.url ? (openBlock(), createElementBlock("img", {
408
+ key: 3,
409
+ class: "nut-uploader__preview-img__c",
410
+ onClick: ($event) => _ctx.fileItemClick(item),
411
+ src: item.url
412
+ }, null, 8, _hoisted_9)) : (openBlock(), createElementBlock("view", _hoisted_10, [
413
+ createElementVNode("view", {
414
+ onClick: ($event) => _ctx.fileItemClick(item),
415
+ class: "nut-uploader__preview-img__file__name"
416
+ }, [
417
+ createVNode(_component_nut_icon, {
418
+ color: "#808080",
419
+ name: "link"
420
+ }),
421
+ createTextVNode("\xA0" + toDisplayString(item.name), 1)
422
+ ], 8, _hoisted_11)
423
+ ])),
424
+ createElementVNode("view", _hoisted_12, toDisplayString(item.name), 1)
425
+ ])) : _ctx.listType == "list" ? (openBlock(), createElementBlock("view", _hoisted_13, [
426
+ createElementVNode("view", {
427
+ onClick: ($event) => _ctx.fileItemClick(item),
428
+ class: normalizeClass(["nut-uploader__preview-img__file__name", [item.status]])
429
+ }, [
430
+ createVNode(_component_nut_icon, { name: "link" }),
431
+ createTextVNode("\xA0" + toDisplayString(item.name), 1)
432
+ ], 10, _hoisted_14),
433
+ createVNode(_component_nut_icon, {
434
+ class: "nut-uploader__preview-img__file__del",
435
+ onClick: ($event) => _ctx.onDelete(item, index2),
436
+ color: "#808080",
437
+ name: "del"
438
+ }, null, 8, ["onClick"]),
439
+ item.status == "uploading" ? (openBlock(), createBlock(_component_nut_progress, {
440
+ key: 0,
441
+ size: "small",
442
+ percentage: item.percentage,
443
+ "stroke-color": "linear-gradient(270deg, rgba(18,126,255,1) 0%,rgba(32,147,255,1) 32.815625%,rgba(13,242,204,1) 100%)",
444
+ "show-text": false
445
+ }, null, 8, ["percentage"])) : createCommentVNode("", true)
446
+ ])) : createCommentVNode("", true)
447
+ ], 2);
448
+ }), 128)),
449
+ _ctx.listType == "picture" && !_ctx.$slots.default && _ctx.maximum - _ctx.fileList.length ? (openBlock(), createElementBlock("view", {
450
+ key: 1,
451
+ class: normalizeClass(["nut-uploader__upload", [_ctx.listType]])
452
+ }, [
453
+ createVNode(_component_nut_icon, {
454
+ size: _ctx.uploadIconSize,
455
+ color: "#808080",
456
+ name: _ctx.uploadIcon
457
+ }, null, 8, ["size", "name"]),
458
+ _ctx.capture ? (openBlock(), createElementBlock("input", {
459
+ key: 0,
460
+ class: "nut-uploader__input",
461
+ type: "file",
462
+ capture: "camera",
463
+ accept: _ctx.accept,
464
+ multiple: _ctx.multiple,
465
+ name: _ctx.name,
466
+ disabled: _ctx.disabled,
467
+ onChange: _cache[2] || (_cache[2] = (...args) => _ctx.onChange && _ctx.onChange(...args))
468
+ }, null, 40, _hoisted_15)) : (openBlock(), createElementBlock("input", {
469
+ key: 1,
470
+ class: "nut-uploader__input",
471
+ type: "file",
472
+ accept: _ctx.accept,
473
+ multiple: _ctx.multiple,
474
+ name: _ctx.name,
475
+ disabled: _ctx.disabled,
476
+ onChange: _cache[3] || (_cache[3] = (...args) => _ctx.onChange && _ctx.onChange(...args))
477
+ }, null, 40, _hoisted_16))
478
+ ], 2)) : createCommentVNode("", true)
479
+ ], 2);
480
+ }
481
+ var index = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
482
+ export { index as default };