@rainbow-oh/yee-c 0.9.2 → 0.11.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 (162) hide show
  1. package/dist/cjs/Button/demo/icon.js +1 -1
  2. package/dist/cjs/Input/style/index.less +1 -0
  3. package/dist/cjs/Table/demo/resizable.d.ts +3 -0
  4. package/dist/cjs/Table/demo/resizable.js +143 -0
  5. package/dist/cjs/Table/hooks/useColumnResize.d.ts +30 -0
  6. package/dist/cjs/Table/hooks/useColumnResize.js +217 -0
  7. package/dist/cjs/Table/hooks/useColumns.d.ts +3 -1
  8. package/dist/cjs/Table/hooks/useColumns.js +14 -3
  9. package/dist/cjs/Table/interface.d.ts +49 -0
  10. package/dist/cjs/Table/style/index.less +42 -0
  11. package/dist/cjs/Table/table.js +62 -9
  12. package/dist/cjs/Table/theader/cell.js +46 -4
  13. package/dist/cjs/Table/util/index.d.ts +19 -1
  14. package/dist/cjs/Table/util/index.js +22 -0
  15. package/dist/cjs/Tabs/demo/overflow-center.d.ts +3 -0
  16. package/dist/cjs/Tabs/demo/overflow-center.js +54 -0
  17. package/dist/cjs/Tabs/hooks/useNavListMove.d.ts +2 -1
  18. package/dist/cjs/Tabs/hooks/useNavListMove.js +51 -16
  19. package/dist/cjs/Tabs/hooks/useTabScroll.d.ts +1 -0
  20. package/dist/cjs/Tabs/hooks/useTabScroll.js +5 -1
  21. package/dist/cjs/Tabs/interface.d.ts +10 -1
  22. package/dist/cjs/Tabs/style/index.less +5 -0
  23. package/dist/cjs/Tabs/tab-header/index.d.ts +1 -0
  24. package/dist/cjs/Tabs/tab-header/index.js +11 -3
  25. package/dist/cjs/Tabs/tabs.js +4 -1
  26. package/dist/cjs/Upload/demo/auto-upload.d.ts +3 -0
  27. package/dist/cjs/Upload/demo/auto-upload.js +65 -0
  28. package/dist/cjs/Upload/demo/basic.js +5 -10
  29. package/dist/cjs/Upload/demo/controlled.js +4 -4
  30. package/dist/cjs/Upload/demo/pictureWall.js +14 -13
  31. package/dist/cjs/Upload/dragger.d.ts +2 -1
  32. package/dist/cjs/Upload/dragger.js +32 -21
  33. package/dist/cjs/Upload/index.d.ts +1 -1
  34. package/dist/cjs/Upload/interface.d.ts +67 -120
  35. package/dist/cjs/Upload/style/index.less +40 -13
  36. package/dist/cjs/Upload/upload.d.ts +2 -2
  37. package/dist/cjs/Upload/upload.js +435 -185
  38. package/dist/cjs/Upload/uploaded-list/index.d.ts +2 -1
  39. package/dist/cjs/Upload/uploaded-list/index.js +6 -3
  40. package/dist/cjs/Upload/uploaded-list/uploaded-item.d.ts +6 -3
  41. package/dist/cjs/Upload/uploaded-list/uploaded-item.js +127 -138
  42. package/dist/cjs/locale/interface.d.ts +1 -0
  43. package/dist/cjs/locale/lang/en_US.js +2 -1
  44. package/dist/cjs/locale/lang/ja_JP.js +2 -1
  45. package/dist/cjs/locale/lang/zh_CN.js +2 -1
  46. package/dist/cjs/locale/lang/zh_TW.js +2 -1
  47. package/dist/cjs/style/size.css +2 -1
  48. package/dist/cjs/style/themes.css +1 -1
  49. package/dist/cjs/style/variables.css +3 -2
  50. package/dist/cjs/utils/ax/core.d.ts +3 -1
  51. package/dist/cjs/utils/ax/core.js +24 -37
  52. package/dist/cjs/utils/ax/index.d.ts +3 -1
  53. package/dist/cjs/utils/folder-scanner.d.ts +1 -1
  54. package/dist/cjs/utils/folder-scanner.js +43 -34
  55. package/dist/cjs/version.d.ts +1 -1
  56. package/dist/cjs/version.js +1 -1
  57. package/dist/esm/Button/demo/icon.js +7 -4
  58. package/dist/esm/Input/style/index.less +1 -0
  59. package/dist/esm/Table/demo/resizable.d.ts +3 -0
  60. package/dist/esm/Table/demo/resizable.js +110 -0
  61. package/dist/esm/Table/hooks/useColumnResize.d.ts +30 -0
  62. package/dist/esm/Table/hooks/useColumnResize.js +206 -0
  63. package/dist/esm/Table/hooks/useColumns.d.ts +3 -1
  64. package/dist/esm/Table/hooks/useColumns.js +9 -4
  65. package/dist/esm/Table/interface.d.ts +49 -0
  66. package/dist/esm/Table/style/index.less +42 -0
  67. package/dist/esm/Table/table.js +83 -13
  68. package/dist/esm/Table/theader/cell.js +38 -3
  69. package/dist/esm/Table/util/index.d.ts +19 -1
  70. package/dist/esm/Table/util/index.js +37 -0
  71. package/dist/esm/Tabs/demo/overflow-center.d.ts +3 -0
  72. package/dist/esm/Tabs/demo/overflow-center.js +61 -0
  73. package/dist/esm/Tabs/hooks/useNavListMove.d.ts +2 -1
  74. package/dist/esm/Tabs/hooks/useNavListMove.js +62 -25
  75. package/dist/esm/Tabs/hooks/useTabScroll.d.ts +1 -0
  76. package/dist/esm/Tabs/hooks/useTabScroll.js +9 -0
  77. package/dist/esm/Tabs/interface.d.ts +10 -1
  78. package/dist/esm/Tabs/style/index.less +5 -0
  79. package/dist/esm/Tabs/tab-header/index.d.ts +1 -0
  80. package/dist/esm/Tabs/tab-header/index.js +15 -3
  81. package/dist/esm/Tabs/tabs.js +4 -2
  82. package/dist/esm/Upload/demo/auto-upload.d.ts +3 -0
  83. package/dist/esm/Upload/demo/auto-upload.js +42 -0
  84. package/dist/esm/Upload/demo/basic.js +5 -11
  85. package/dist/esm/Upload/demo/controlled.js +8 -6
  86. package/dist/esm/Upload/demo/pictureWall.js +17 -14
  87. package/dist/esm/Upload/dragger.d.ts +2 -1
  88. package/dist/esm/Upload/dragger.js +10 -5
  89. package/dist/esm/Upload/index.d.ts +1 -1
  90. package/dist/esm/Upload/interface.d.ts +67 -120
  91. package/dist/esm/Upload/style/index.less +40 -13
  92. package/dist/esm/Upload/upload.d.ts +2 -2
  93. package/dist/esm/Upload/upload.js +573 -271
  94. package/dist/esm/Upload/uploaded-list/index.d.ts +2 -1
  95. package/dist/esm/Upload/uploaded-list/index.js +9 -4
  96. package/dist/esm/Upload/uploaded-list/uploaded-item.d.ts +6 -3
  97. package/dist/esm/Upload/uploaded-list/uploaded-item.js +145 -150
  98. package/dist/esm/locale/interface.d.ts +1 -0
  99. package/dist/esm/locale/lang/en_US.js +2 -1
  100. package/dist/esm/locale/lang/ja_JP.js +2 -1
  101. package/dist/esm/locale/lang/zh_CN.js +2 -1
  102. package/dist/esm/locale/lang/zh_TW.js +2 -1
  103. package/dist/esm/style/size.css +2 -1
  104. package/dist/esm/style/themes.css +1 -1
  105. package/dist/esm/style/variables.css +3 -2
  106. package/dist/esm/utils/ax/core.d.ts +3 -1
  107. package/dist/esm/utils/ax/core.js +32 -40
  108. package/dist/esm/utils/ax/index.d.ts +3 -1
  109. package/dist/esm/utils/folder-scanner.d.ts +1 -1
  110. package/dist/esm/utils/folder-scanner.js +76 -75
  111. package/dist/esm/version.d.ts +1 -1
  112. package/dist/esm/version.js +1 -1
  113. package/dist/umd/yee-c.min.css +2 -2
  114. package/dist/umd/yee-c.min.js +1 -1
  115. package/package.json +1 -1
  116. package/src/Button/demo/icon.tsx +5 -3
  117. package/src/Input/style/index.less +1 -0
  118. package/src/Table/demo/resizable.tsx +106 -0
  119. package/src/Table/hooks/useColumnResize.ts +224 -0
  120. package/src/Table/hooks/useColumns.ts +18 -3
  121. package/src/Table/index.en-US.md +7 -0
  122. package/src/Table/index.zh-CN.md +7 -0
  123. package/src/Table/interface.ts +52 -0
  124. package/src/Table/style/index.less +42 -0
  125. package/src/Table/table-resize.test.tsx +234 -0
  126. package/src/Table/table.tsx +90 -13
  127. package/src/Table/theader/cell.tsx +52 -2
  128. package/src/Table/util/index.ts +44 -1
  129. package/src/Tabs/demo/overflow-center.tsx +35 -0
  130. package/src/Tabs/hooks/useNavListMove.ts +60 -18
  131. package/src/Tabs/hooks/useTabScroll.ts +7 -1
  132. package/src/Tabs/index.en-US.md +33 -31
  133. package/src/Tabs/index.zh-CN.md +33 -31
  134. package/src/Tabs/interface.ts +10 -1
  135. package/src/Tabs/style/index.less +5 -0
  136. package/src/Tabs/tab-header/index.tsx +14 -3
  137. package/src/Tabs/tabs.tsx +2 -0
  138. package/src/Upload/demo/auto-upload.tsx +35 -0
  139. package/src/Upload/demo/basic.tsx +7 -11
  140. package/src/Upload/demo/controlled.tsx +12 -8
  141. package/src/Upload/demo/directory.tsx +3 -4
  142. package/src/Upload/demo/drag.tsx +5 -12
  143. package/src/Upload/demo/multiple.tsx +3 -4
  144. package/src/Upload/demo/pictureWall.tsx +22 -21
  145. package/src/Upload/dragger.tsx +47 -34
  146. package/src/Upload/index.en-US.md +63 -43
  147. package/src/Upload/index.ts +8 -1
  148. package/src/Upload/index.zh-CN.md +62 -42
  149. package/src/Upload/interface.ts +68 -120
  150. package/src/Upload/style/index.less +40 -13
  151. package/src/Upload/upload.tsx +546 -215
  152. package/src/Upload/uploaded-list/index.tsx +9 -5
  153. package/src/Upload/uploaded-list/uploaded-item.tsx +199 -228
  154. package/src/locale/interface.ts +1 -0
  155. package/src/locale/lang/en_US.ts +1 -0
  156. package/src/locale/lang/ja_JP.ts +1 -0
  157. package/src/locale/lang/zh_CN.ts +1 -0
  158. package/src/locale/lang/zh_TW.ts +1 -0
  159. package/src/style/size.css +2 -1
  160. package/src/utils/ax/core.ts +28 -41
  161. package/src/utils/folder-scanner.ts +51 -37
  162. package/src/version.ts +1 -1
@@ -1,18 +1,17 @@
1
- var _excluded = ["prefixCls", "name", "action", "children", "data", "headers", "defaultFileList", "fileList", "withCredentials", "className", "style", "disabled", "listType", "type", "directory", "multiple", "accept", "showUploadList", "progress", "maxFileSize", "maxCount", "customRequest", "onChange", "beforeUpload", "onPreview", "onRemove", "itemRender"];
1
+ var _excluded = ["prefixCls", "name", "action", "children", "data", "headers", "defaultFileList", "fileList", "withCredentials", "className", "style", "disabled", "listType", "type", "directory", "multiple", "accept", "showUploadList", "progress", "autoUpload", "maxFileSize", "maxCount", "customRequest", "onChange", "beforeUpload", "onPreview", "onRemove", "itemRender"];
2
2
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3
3
  function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
4
4
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
5
5
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
6
- function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
7
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
8
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
10
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
11
6
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
7
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
8
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
14
9
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
15
10
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
11
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
12
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
13
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
14
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
16
15
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
17
16
  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."); }
18
17
  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); }
@@ -21,33 +20,104 @@ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" !=
21
20
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
22
21
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
23
22
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
23
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
24
24
  import clsx from 'clsx';
25
25
  import { Plus } from 'lucide-react';
26
- import React, { forwardRef, useContext, useRef, useState } from 'react';
26
+ import React, { forwardRef, useContext, useEffect, useImperativeHandle, useRef, useState } from 'react';
27
27
  import { v4 as uuidv4 } from 'uuid';
28
28
  import Button from "../Button";
29
29
  import { GlobalContext } from "../Config-Provider";
30
- import mergeContextToProps from "../utils/mergeContextToProps";
31
- import UploadList from "./uploaded-list/index";
32
30
  import useMergedState from "../hooks/useMergedState";
33
31
  import ax from "../utils/ax";
34
32
  import folderScanner from "../utils/folder-scanner";
33
+ import mergeContextToProps from "../utils/mergeContextToProps";
35
34
  import "./style/index.less";
35
+ import UploadList from "./uploaded-list/index";
36
+ var getFileExtension = function getFileExtension(fileName) {
37
+ var dotIndex = fileName.lastIndexOf('.');
38
+ return dotIndex > -1 ? fileName.slice(dotIndex + 1).toLowerCase() : '';
39
+ };
36
40
  var wrapFile = function wrapFile(file) {
37
41
  return {
38
42
  uid: uuidv4(),
39
43
  name: file.name,
40
44
  size: file.size,
41
- type: typeof (file === null || file === void 0 ? void 0 : file.name) === 'string' ? file.name.split('.')[1] : '',
45
+ type: file.type || getFileExtension(file.name),
42
46
  percent: 0,
43
47
  status: 'ready',
44
48
  raw: file
45
49
  };
46
50
  };
51
+ var isSameFile = function isSameFile(left, right) {
52
+ if (left.uid && right.uid) {
53
+ return left.uid === right.uid;
54
+ }
55
+ return left === right;
56
+ };
57
+ var matchesAccept = function matchesAccept(file, accept) {
58
+ if (!accept) {
59
+ return true;
60
+ }
61
+ var fileName = file.name.toLowerCase();
62
+ var mimeType = file.type.toLowerCase();
63
+ return accept.split(',').map(function (item) {
64
+ return item.trim().toLowerCase();
65
+ }).filter(Boolean).some(function (rule) {
66
+ if (rule.startsWith('.')) {
67
+ return fileName.endsWith(rule);
68
+ }
69
+ if (rule.endsWith('/*')) {
70
+ return mimeType.startsWith(rule.slice(0, -1));
71
+ }
72
+ return mimeType === rule;
73
+ });
74
+ };
75
+ var describeErrorDetail = function describeErrorDetail(detail) {
76
+ if (typeof detail === 'string' && detail) {
77
+ return detail;
78
+ }
79
+ try {
80
+ var _JSON$stringify;
81
+ var text = (_JSON$stringify = JSON.stringify(detail)) !== null && _JSON$stringify !== void 0 ? _JSON$stringify : '';
82
+ return text.length > 200 ? "".concat(text.slice(0, 200), "\u2026") : text;
83
+ } catch (_unused) {
84
+ return String(detail);
85
+ }
86
+ };
87
+ var toError = function toError(error) {
88
+ if (error instanceof Error) {
89
+ return error;
90
+ }
91
+ if (_typeof(error) === 'object' && error !== null && 'error' in error) {
92
+ var detail = error.error;
93
+ if (detail instanceof Error) {
94
+ return detail;
95
+ }
96
+ if (detail !== null && detail !== undefined) {
97
+ // e.g. ax rejects { status: 'error', error: xhr.response }
98
+ var message = describeErrorDetail(detail);
99
+ if (message) {
100
+ return new Error(message);
101
+ }
102
+ }
103
+ }
104
+ return new Error(typeof error === 'string' ? error : 'Upload failed');
105
+ };
106
+
107
+ // ax rejects aborts as { status: 'abort', error: event }
108
+ var isAbortRejection = function isAbortRejection(error) {
109
+ return _typeof(error) === 'object' && error !== null && error.status === 'abort';
110
+ };
111
+ var getAbort = function getAbort(request) {
112
+ if (typeof request === 'function') {
113
+ return request;
114
+ }
115
+ return request === null || request === void 0 ? void 0 : request.abort;
116
+ };
47
117
  var Upload = /*#__PURE__*/forwardRef(function (baseprops, ref) {
48
118
  var _useContext = useContext(GlobalContext),
49
- upload = _useContext.upload;
50
- var props = mergeContextToProps(baseprops, upload);
119
+ uploadConfig = _useContext.upload;
120
+ var props = mergeContextToProps(baseprops, uploadConfig);
51
121
  var _props$prefixCls = props.prefixCls,
52
122
  prefixCls = _props$prefixCls === void 0 ? 'yee-upload' : _props$prefixCls,
53
123
  _props$name = props.name,
@@ -72,6 +142,8 @@ var Upload = /*#__PURE__*/forwardRef(function (baseprops, ref) {
72
142
  showUploadList = _props$showUploadList === void 0 ? true : _props$showUploadList,
73
143
  _props$progress = props.progress,
74
144
  progress = _props$progress === void 0 ? true : _props$progress,
145
+ _props$autoUpload = props.autoUpload,
146
+ autoUpload = _props$autoUpload === void 0 ? true : _props$autoUpload,
75
147
  maxFileSize = props.maxFileSize,
76
148
  maxCount = props.maxCount,
77
149
  customRequest = props.customRequest,
@@ -82,6 +154,10 @@ var Upload = /*#__PURE__*/forwardRef(function (baseprops, ref) {
82
154
  itemRender = props.itemRender,
83
155
  rest = _objectWithoutProperties(props, _excluded);
84
156
  var inputRef = useRef(null);
157
+ var rootRef = useRef(null);
158
+ var activeRequestsRef = useRef(new Map());
159
+ var pendingPreparationsRef = useRef(new Map());
160
+ var mountedRef = useRef(true);
85
161
  var _useState = useState(null),
86
162
  _useState2 = _slicedToArray(_useState, 2),
87
163
  dragState = _useState2[0],
@@ -93,333 +169,556 @@ var Upload = /*#__PURE__*/forwardRef(function (baseprops, ref) {
93
169
  _useMergedState2 = _slicedToArray(_useMergedState, 2),
94
170
  mergedFileList = _useMergedState2[0],
95
171
  setMergedFileList = _useMergedState2[1];
96
- var acceptDirectory = {};
97
- if (directory) {
98
- acceptDirectory = {
99
- webkitdirectory: '',
100
- directory: '',
101
- multiple: ''
102
- };
103
- }
104
- var updateFileList = function updateFileList(file) {
105
- setMergedFileList(function (state) {
106
- return state.map(function (item) {
107
- if (item.uid === file.uid) {
108
- return file;
109
- }
110
- return item;
172
+ var fileListRef = useRef(mergedFileList);
173
+ fileListRef.current = mergedFileList;
174
+ useEffect(function () {
175
+ return function () {
176
+ mountedRef.current = false;
177
+ pendingPreparationsRef.current.clear();
178
+ var activeRequests = Array.from(activeRequestsRef.current.values());
179
+ activeRequestsRef.current.clear();
180
+ activeRequests.forEach(function (_ref) {
181
+ var abort = _ref.abort;
182
+ return abort === null || abort === void 0 ? void 0 : abort();
111
183
  });
184
+ };
185
+ }, []);
186
+ var setFileList = function setFileList(nextFileList) {
187
+ fileListRef.current = nextFileList;
188
+ setMergedFileList(nextFileList);
189
+ };
190
+ var emitChange = function emitChange(file, nextFileList, event) {
191
+ setFileList(nextFileList);
192
+ onChange === null || onChange === void 0 || onChange({
193
+ file: file,
194
+ fileList: nextFileList,
195
+ event: event
196
+ });
197
+ };
198
+ var appendFile = function appendFile(file, event) {
199
+ var nextFileList = [].concat(_toConsumableArray(fileListRef.current), [file]);
200
+ emitChange(file, nextFileList, event);
201
+ return file;
202
+ };
203
+ var replaceFile = function replaceFile(target, replacement, event) {
204
+ var index = fileListRef.current.findIndex(function (item) {
205
+ return isSameFile(item, target);
206
+ });
207
+ if (index < 0) {
208
+ return undefined;
209
+ }
210
+ var nextFileList = _toConsumableArray(fileListRef.current);
211
+ nextFileList[index] = replacement;
212
+ emitChange(replacement, nextFileList, event);
213
+ return replacement;
214
+ };
215
+ var updateFile = function updateFile(target, patch, event) {
216
+ var current = fileListRef.current.find(function (item) {
217
+ return isSameFile(item, target);
112
218
  });
219
+ if (!current) {
220
+ return undefined;
221
+ }
222
+ return replaceFile(target, _objectSpread(_objectSpread({}, current), patch), event);
223
+ };
224
+ var abortRequest = function abortRequest(file) {
225
+ if (!file.uid) {
226
+ return;
227
+ }
228
+ var activeRequest = activeRequestsRef.current.get(file.uid);
229
+ if (activeRequest) {
230
+ var _activeRequest$abort;
231
+ activeRequestsRef.current.delete(file.uid);
232
+ (_activeRequest$abort = activeRequest.abort) === null || _activeRequest$abort === void 0 || _activeRequest$abort.call(activeRequest);
233
+ }
113
234
  };
114
- var postFile = function postFile(file) {
115
- var formData = new FormData();
116
- formData.append(name, file.raw);
117
- if (data) {
118
- var extraData = typeof data === 'function' ? data(file.raw) : data;
119
- Object.keys(extraData).forEach(function (key) {
120
- formData.append(key, extraData[key]);
235
+ var postFile = function postFile(sourceFile) {
236
+ var file = sourceFile;
237
+ if (!file.uid) {
238
+ var withUid = _objectSpread(_objectSpread({}, file), {}, {
239
+ uid: uuidv4()
121
240
  });
241
+ file = replaceFile(file, withUid) || withUid;
242
+ }
243
+ var requestKey = file.uid;
244
+ abortRequest(file);
245
+ var token = Symbol(requestKey);
246
+ activeRequestsRef.current.set(requestKey, {
247
+ token: token
248
+ });
249
+ var isActive = function isActive() {
250
+ var _activeRequestsRef$cu;
251
+ return ((_activeRequestsRef$cu = activeRequestsRef.current.get(requestKey)) === null || _activeRequestsRef$cu === void 0 ? void 0 : _activeRequestsRef$cu.token) === token;
252
+ };
253
+ var finish = function finish() {
254
+ if (isActive()) {
255
+ activeRequestsRef.current.delete(requestKey);
256
+ }
257
+ };
258
+ var updateIfActive = function updateIfActive(patch, event) {
259
+ if (!isActive()) {
260
+ return undefined;
261
+ }
262
+ return updateFile(file, patch, event);
263
+ };
264
+ var fail = function fail(error) {
265
+ // Requests aborted outside of remove/retry/unmount (e.g. by the browser)
266
+ // go back to 'ready' instead of showing an error
267
+ if (isAbortRejection(error)) {
268
+ updateIfActive({
269
+ status: 'ready',
270
+ percent: 0
271
+ });
272
+ finish();
273
+ return;
274
+ }
275
+ var normalizedError = toError(error);
276
+ updateIfActive({
277
+ status: 'error',
278
+ error: normalizedError
279
+ }, error);
280
+ finish();
281
+ };
282
+ updateIfActive({
283
+ status: 'uploading',
284
+ percent: 0,
285
+ error: undefined
286
+ });
287
+ if (!file.raw) {
288
+ fail(new Error("File ".concat(file.name, " has no source file to upload")));
289
+ return;
122
290
  }
123
- var url = typeof action === 'function' ? action() : action;
124
-
125
- // Use custom upload
126
291
  if (customRequest) {
127
- customRequest({
128
- file: file.raw,
129
- onProgress: function onProgress(percent) {
130
- var current = _objectSpread(_objectSpread({}, file), {}, {
131
- status: 'uploading',
132
- percent: percent
133
- });
134
- updateFileList(current);
135
- onChange === null || onChange === void 0 || onChange({
136
- file: current,
137
- fileList: mergedFileList,
138
- event: {
139
- percent: percent
140
- }
141
- });
142
- },
143
- onError: function onError(error) {
144
- var current = _objectSpread(_objectSpread({}, file), {}, {
145
- status: 'error',
146
- error: error
147
- });
148
- updateFileList(current);
149
- onChange === null || onChange === void 0 || onChange({
150
- file: current,
151
- fileList: mergedFileList,
152
- event: error
153
- });
154
- },
155
- onSuccess: function onSuccess(response) {
156
- var current = _objectSpread(_objectSpread({}, file), {}, {
157
- status: 'success',
158
- response: response
159
- });
160
- updateFileList(current);
161
- onChange === null || onChange === void 0 || onChange({
162
- file: current,
163
- fileList: mergedFileList,
164
- event: response
165
- });
292
+ try {
293
+ var request = customRequest({
294
+ file: file.raw,
295
+ onProgress: function onProgress(percent) {
296
+ var normalizedPercent = Math.min(100, Math.max(0, percent));
297
+ updateIfActive({
298
+ status: 'uploading',
299
+ percent: normalizedPercent
300
+ }, {
301
+ percent: normalizedPercent
302
+ });
303
+ },
304
+ onError: fail,
305
+ onSuccess: function onSuccess(response) {
306
+ updateIfActive({
307
+ status: 'success',
308
+ percent: 100,
309
+ response: response,
310
+ error: undefined
311
+ }, response);
312
+ finish();
313
+ }
314
+ });
315
+ var activeRequest = activeRequestsRef.current.get(requestKey);
316
+ if ((activeRequest === null || activeRequest === void 0 ? void 0 : activeRequest.token) === token) {
317
+ activeRequest.abort = getAbort(request);
166
318
  }
167
- });
319
+ } catch (error) {
320
+ fail(error);
321
+ }
168
322
  return;
169
323
  }
170
-
171
- // Default upload
172
- // @ts-ignore
173
- ax.post(url, formData, {
174
- withCredentials: withCredentials,
175
- headers: _objectSpread({}, headers),
176
- onUploadProgress: function onUploadProgress(e) {
177
- var percentage = parseInt(e.loaded / e.total * 100 + '');
178
- var current;
179
- if (percentage < 100) {
180
- current = _objectSpread(_objectSpread({}, file), {}, {
324
+ try {
325
+ var url = typeof action === 'function' ? action() : action;
326
+ if (!url) {
327
+ throw new Error('Upload action is required when customRequest is not set');
328
+ }
329
+ var formData = new FormData();
330
+ formData.append(name, file.raw);
331
+ if (data) {
332
+ var extraData = typeof data === 'function' ? data(file.raw) : data;
333
+ Object.keys(extraData).forEach(function (key) {
334
+ formData.append(key, extraData[key]);
335
+ });
336
+ }
337
+ var _request = ax.post(url, formData, {
338
+ withCredentials: withCredentials,
339
+ headers: _objectSpread({}, headers),
340
+ onUploadProgress: function onUploadProgress(event) {
341
+ var percentage = event.total ? Math.round(event.loaded / event.total * 100) : 0;
342
+ updateIfActive({
181
343
  status: 'uploading',
182
344
  percent: percentage
183
- });
184
- } else {
185
- current = _objectSpread(_objectSpread({}, file), {}, {
186
- status: 'success',
187
- percent: 100
188
- });
345
+ }, event);
189
346
  }
190
- updateFileList(current);
191
- onChange === null || onChange === void 0 || onChange({
192
- file: current,
193
- fileList: mergedFileList,
194
- event: e
195
- });
196
- }
197
- }).then(function (res) {
198
- var current = _objectSpread(_objectSpread({}, file), {}, {
199
- status: 'success',
200
- response: res
201
- });
202
- updateFileList(current);
203
- onChange === null || onChange === void 0 || onChange({
204
- file: current,
205
- fileList: mergedFileList,
206
- event: res
207
- });
208
- }).catch(function (err) {
209
- var current = _objectSpread(_objectSpread({}, file), {}, {
210
- status: 'error',
211
- error: err
212
347
  });
213
- updateFileList(current);
214
- onChange === null || onChange === void 0 || onChange({
215
- file: current,
216
- fileList: mergedFileList,
217
- event: err
218
- });
219
- });
220
- };
221
- var post = function post(file) {
222
- setMergedFileList(function (state) {
223
- return [].concat(_toConsumableArray(state), [file]);
224
- });
225
- postFile(file);
348
+ var _activeRequest = activeRequestsRef.current.get(requestKey);
349
+ if ((_activeRequest === null || _activeRequest === void 0 ? void 0 : _activeRequest.token) === token) {
350
+ _activeRequest.abort = _request.abort;
351
+ }
352
+ _request.then(function (response) {
353
+ updateIfActive({
354
+ status: 'success',
355
+ percent: 100,
356
+ response: response,
357
+ error: undefined
358
+ }, response);
359
+ finish();
360
+ }).catch(fail);
361
+ } catch (error) {
362
+ fail(error);
363
+ }
226
364
  };
227
365
  var isValidFile = function isValidFile(file) {
228
- // Check file size
229
366
  if (maxFileSize && file.size > maxFileSize) {
230
367
  console.warn("File ".concat(file.name, " exceeds maximum size limit"));
231
368
  return false;
232
369
  }
233
-
234
- // Check file count
235
- if (maxCount && mergedFileList.length >= maxCount) {
236
- console.warn("Maximum file count (".concat(maxCount, ") exceeded"));
370
+ if (!matchesAccept(file, accept)) {
371
+ console.warn("File ".concat(file.name, " does not match accepted file types"));
237
372
  return false;
238
373
  }
239
374
  return true;
240
375
  };
241
- var uploadFiles = function uploadFiles(files, e) {
242
- var postFiles = Array.from(files);
376
+ var prepareFile = /*#__PURE__*/function () {
377
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(file, wrapped, postFiles, preparationToken, event) {
378
+ var preparationKey, isActive, finish, result, nextFile;
379
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
380
+ while (1) switch (_context.prev = _context.next) {
381
+ case 0:
382
+ preparationKey = wrapped.uid;
383
+ isActive = function isActive() {
384
+ return mountedRef.current && pendingPreparationsRef.current.get(preparationKey) === preparationToken && fileListRef.current.some(function (item) {
385
+ return isSameFile(item, wrapped);
386
+ });
387
+ };
388
+ finish = function finish() {
389
+ if (pendingPreparationsRef.current.get(preparationKey) === preparationToken) {
390
+ pendingPreparationsRef.current.delete(preparationKey);
391
+ }
392
+ };
393
+ _context.prev = 3;
394
+ if (!beforeUpload) {
395
+ _context.next = 10;
396
+ break;
397
+ }
398
+ _context.next = 7;
399
+ return Promise.resolve(beforeUpload(file, postFiles));
400
+ case 7:
401
+ _context.t0 = _context.sent;
402
+ _context.next = 11;
403
+ break;
404
+ case 10:
405
+ _context.t0 = true;
406
+ case 11:
407
+ result = _context.t0;
408
+ if (isActive()) {
409
+ _context.next = 15;
410
+ break;
411
+ }
412
+ finish();
413
+ return _context.abrupt("return");
414
+ case 15:
415
+ if (!(result === false)) {
416
+ _context.next = 19;
417
+ break;
418
+ }
419
+ // beforeUpload rejected the file: drop it from the list
420
+ setFileList(fileListRef.current.filter(function (item) {
421
+ return !isSameFile(item, wrapped);
422
+ }));
423
+ finish();
424
+ return _context.abrupt("return");
425
+ case 19:
426
+ nextFile = wrapped;
427
+ if (!(result instanceof File)) {
428
+ _context.next = 25;
429
+ break;
430
+ }
431
+ nextFile = _objectSpread(_objectSpread({}, wrapFile(result)), {}, {
432
+ uid: wrapped.uid
433
+ });
434
+ if (replaceFile(wrapped, nextFile, event)) {
435
+ _context.next = 25;
436
+ break;
437
+ }
438
+ finish();
439
+ return _context.abrupt("return");
440
+ case 25:
441
+ finish();
442
+ postFile(nextFile);
443
+ _context.next = 33;
444
+ break;
445
+ case 29:
446
+ _context.prev = 29;
447
+ _context.t1 = _context["catch"](3);
448
+ if (isActive()) {
449
+ updateFile(wrapped, {
450
+ status: 'error',
451
+ error: toError(_context.t1)
452
+ }, _context.t1);
453
+ }
454
+ finish();
455
+ case 33:
456
+ case "end":
457
+ return _context.stop();
458
+ }
459
+ }, _callee, null, [[3, 29]]);
460
+ }));
461
+ return function prepareFile(_x, _x2, _x3, _x4, _x5) {
462
+ return _ref2.apply(this, arguments);
463
+ };
464
+ }();
465
+ var uploadFiles = function uploadFiles(files, event) {
466
+ var selectedFiles = Array.from(files);
467
+ var filesAllowedByMultiple = multiple || directory ? selectedFiles : selectedFiles.slice(0, 1);
468
+ var validFiles = filesAllowedByMultiple.filter(isValidFile);
469
+ var remainingCount = typeof maxCount === 'number' ? Math.max(0, maxCount - fileListRef.current.length) : validFiles.length;
470
+ var postFiles = validFiles.slice(0, remainingCount);
471
+ if (postFiles.length < validFiles.length) {
472
+ console.warn("Maximum file count (".concat(maxCount, ") exceeded"));
473
+ }
243
474
  postFiles.forEach(function (file) {
244
- if (!isValidFile(file)) {
475
+ var wrapped = appendFile(wrapFile(file), event);
476
+
477
+ // Manual mode: files only join the list and wait for upload()
478
+ if (!autoUpload) {
245
479
  return;
246
480
  }
247
- var wrapped = wrapFile(file);
248
- onChange === null || onChange === void 0 || onChange({
249
- file: wrapped,
250
- fileList: mergedFileList,
251
- event: e
252
- });
253
- if (beforeUpload) {
254
- var res = beforeUpload(file, postFiles);
255
- if (res && res instanceof Promise) {
256
- res.then(function (progress) {
257
- if (progress === false) {
258
- return;
259
- }
260
- post(_typeof(progress) === 'object' ? wrapFile(progress) : wrapped);
261
- });
262
- } else if (res !== false) {
263
- post(wrapped);
264
- }
265
- } else {
266
- post(wrapped);
481
+ var preparationToken = Symbol(wrapped.uid);
482
+ pendingPreparationsRef.current.set(wrapped.uid, preparationToken);
483
+ void prepareFile(file, wrapped, postFiles, preparationToken, event);
484
+ });
485
+ };
486
+
487
+ // Instance method: upload files waiting in the list (status 'ready')
488
+ var upload = function upload(file) {
489
+ var requested = file === undefined ? fileListRef.current : Array.isArray(file) ? file : [file];
490
+ var readyFiles = requested.filter(function (item) {
491
+ return item.status === 'ready';
492
+ });
493
+ readyFiles.forEach(function (item) {
494
+ var target = item;
495
+ if (!target.uid) {
496
+ var _replaceFile;
497
+ target = (_replaceFile = replaceFile(item, _objectSpread(_objectSpread({}, item), {}, {
498
+ uid: uuidv4()
499
+ }))) !== null && _replaceFile !== void 0 ? _replaceFile : item;
500
+ }
501
+ if (!target.raw) {
502
+ updateFile(target, {
503
+ status: 'error',
504
+ error: new Error("File ".concat(target.name, " has no source file to upload"))
505
+ });
506
+ return;
267
507
  }
508
+ var preparationToken = Symbol(target.uid);
509
+ pendingPreparationsRef.current.set(target.uid, preparationToken);
510
+ void prepareFile(target.raw, target, readyFiles.map(function (ready) {
511
+ return ready.raw;
512
+ }).filter(function (raw) {
513
+ return raw instanceof File;
514
+ }), preparationToken);
268
515
  });
269
516
  };
270
- var handleChange = function handleChange(e) {
271
- var files = e.target.files;
272
- if (!files) return;
273
- uploadFiles(files, e);
274
- if (inputRef.current) {
275
- inputRef.current.value = '';
517
+
518
+ // Expose the root element plus the upload() method on the ref
519
+ useImperativeHandle(ref, function () {
520
+ var _rootRef$current;
521
+ return Object.assign((_rootRef$current = rootRef.current) !== null && _rootRef$current !== void 0 ? _rootRef$current : document.createElement('div'), {
522
+ upload: upload
523
+ });
524
+ }, [upload]);
525
+ var handleChange = function handleChange(event) {
526
+ var files = event.target.files;
527
+ if (!files) {
528
+ return;
276
529
  }
530
+ uploadFiles(files, event);
531
+ event.target.value = '';
277
532
  };
278
- var handleClick = function handleClick() {
533
+ var handleDragOver = function handleDragOver(event) {
534
+ event.preventDefault();
279
535
  if (!disabled) {
280
- var _inputRef$current;
281
- (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.click();
536
+ setDragState('dragover');
282
537
  }
283
538
  };
284
- var handleDragOver = function handleDragOver(e) {
285
- e.preventDefault();
286
- if (disabled) return;
287
- setDragState('dragover');
288
- };
289
- var handleDragLeave = function handleDragLeave(e) {
290
- e.preventDefault();
539
+ var handleDragLeave = function handleDragLeave(event) {
540
+ event.preventDefault();
291
541
  setDragState(null);
292
542
  };
293
543
  var handleDrop = /*#__PURE__*/function () {
294
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(e) {
295
- var _e$dataTransfer, files, items, item, folderFiles;
296
- return _regeneratorRuntime().wrap(function _callee$(_context) {
297
- while (1) switch (_context.prev = _context.next) {
544
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(event) {
545
+ var entries, nestedFiles;
546
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
547
+ while (1) switch (_context2.prev = _context2.next) {
298
548
  case 0:
299
- e.preventDefault();
549
+ event.preventDefault();
300
550
  if (!disabled) {
301
- _context.next = 3;
551
+ _context2.next = 3;
302
552
  break;
303
553
  }
304
- return _context.abrupt("return");
554
+ return _context2.abrupt("return");
305
555
  case 3:
306
556
  setDragState('drop');
307
- _e$dataTransfer = e.dataTransfer, files = _e$dataTransfer.files, items = _e$dataTransfer.items;
308
- if (!(files.length === 1)) {
309
- _context.next = 17;
557
+ _context2.prev = 4;
558
+ entries = Array.from(event.dataTransfer.items).map(function (item) {
559
+ var _item$webkitGetAsEntr;
560
+ return (_item$webkitGetAsEntr = item.webkitGetAsEntry) === null || _item$webkitGetAsEntr === void 0 ? void 0 : _item$webkitGetAsEntr.call(item);
561
+ }).filter(function (entry) {
562
+ return entry !== null && entry !== undefined;
563
+ });
564
+ if (!entries.some(function (entry) {
565
+ return entry.isDirectory;
566
+ })) {
567
+ _context2.next = 13;
310
568
  break;
311
569
  }
312
- item = items[0].webkitGetAsEntry(); // Dropped item is a folder
313
- if (!(item !== null && item !== void 0 && item.isDirectory)) {
314
- _context.next = 14;
315
- break;
316
- }
317
- _context.next = 10;
318
- return folderScanner(item, []);
319
- case 10:
320
- folderFiles = _context.sent;
321
- uploadFiles(folderFiles, e);
322
- _context.next = 15;
570
+ _context2.next = 9;
571
+ return Promise.all(entries.map(function (entry) {
572
+ return folderScanner(entry, []);
573
+ }));
574
+ case 9:
575
+ nestedFiles = _context2.sent;
576
+ uploadFiles(nestedFiles.flat(), event);
577
+ _context2.next = 14;
323
578
  break;
579
+ case 13:
580
+ uploadFiles(event.dataTransfer.files, event);
324
581
  case 14:
325
- if (item !== null && item !== void 0 && item.isFile) {
326
- uploadFiles(files, e);
327
- }
328
- case 15:
329
- _context.next = 18;
582
+ _context2.next = 19;
330
583
  break;
331
- case 17:
332
- if (files.length > 1) {
333
- uploadFiles(files, e);
334
- }
335
- case 18:
584
+ case 16:
585
+ _context2.prev = 16;
586
+ _context2.t0 = _context2["catch"](4);
587
+ console.warn('Failed to scan dropped files', _context2.t0);
588
+ case 19:
589
+ _context2.prev = 19;
590
+ setDragState(null);
591
+ return _context2.finish(19);
592
+ case 22:
336
593
  case "end":
337
- return _context.stop();
594
+ return _context2.stop();
338
595
  }
339
- }, _callee);
596
+ }, _callee2, null, [[4, 16, 19, 22]]);
340
597
  }));
341
- return function handleDrop(_x) {
342
- return _ref.apply(this, arguments);
598
+ return function handleDrop(_x6) {
599
+ return _ref3.apply(this, arguments);
343
600
  };
344
601
  }();
345
- var renderUploadTrigger = function renderUploadTrigger() {
346
- return /*#__PURE__*/React.createElement("span", {
347
- className: clsx("".concat(prefixCls, "-input"), _defineProperty({}, "".concat(prefixCls, "-input-disabled"), disabled)),
348
- onClick: handleClick
349
- }, /*#__PURE__*/React.createElement("input", _extends({
350
- type: "file",
351
- disabled: disabled
352
- }, acceptDirectory, {
353
- multiple: multiple,
354
- accept: accept,
355
- onChange: handleChange,
356
- style: {
357
- display: 'none'
358
- },
359
- ref: inputRef
360
- })), children ? children : listType === 'picture-wall' ? /*#__PURE__*/React.createElement("div", {
361
- className: "".concat(prefixCls, "-picture-wall-trigger")
362
- }, /*#__PURE__*/React.createElement(Plus, null)) : /*#__PURE__*/React.createElement(Button, {
363
- disabled: disabled
364
- }, "Upload"));
365
- };
366
602
  var handleRemove = /*#__PURE__*/function () {
367
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(file) {
368
- var promise, shouldRemove;
369
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
370
- while (1) switch (_context2.prev = _context2.next) {
603
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(file) {
604
+ var shouldRemove;
605
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
606
+ while (1) switch (_context3.prev = _context3.next) {
371
607
  case 0:
372
- promise = onRemove === null || onRemove === void 0 ? void 0 : onRemove(file);
373
- if (!(promise instanceof Promise)) {
374
- _context2.next = 7;
608
+ if (file.uid) {
609
+ pendingPreparationsRef.current.delete(file.uid);
610
+ }
611
+ _context3.prev = 1;
612
+ if (!onRemove) {
613
+ _context3.next = 8;
375
614
  break;
376
615
  }
377
- _context2.next = 4;
378
- return promise;
379
- case 4:
380
- _context2.t0 = _context2.sent;
381
- _context2.next = 8;
616
+ _context3.next = 5;
617
+ return Promise.resolve(onRemove(file));
618
+ case 5:
619
+ _context3.t0 = _context3.sent;
620
+ _context3.next = 9;
382
621
  break;
383
- case 7:
384
- _context2.t0 = promise !== false;
385
622
  case 8:
386
- shouldRemove = _context2.t0;
387
- if (shouldRemove !== false) {
388
- setMergedFileList(function (state) {
389
- return state.filter(function (item) {
390
- return item.uid !== file.uid;
391
- });
392
- });
623
+ _context3.t0 = true;
624
+ case 9:
625
+ shouldRemove = _context3.t0;
626
+ if (!(shouldRemove === false)) {
627
+ _context3.next = 12;
628
+ break;
393
629
  }
394
- case 10:
630
+ return _context3.abrupt("return");
631
+ case 12:
632
+ abortRequest(file);
633
+ setFileList(fileListRef.current.filter(function (item) {
634
+ return !isSameFile(item, file);
635
+ }));
636
+ _context3.next = 19;
637
+ break;
638
+ case 16:
639
+ _context3.prev = 16;
640
+ _context3.t1 = _context3["catch"](1);
641
+ console.warn("Failed to remove file ".concat(file.name), _context3.t1);
642
+ case 19:
395
643
  case "end":
396
- return _context2.stop();
644
+ return _context3.stop();
397
645
  }
398
- }, _callee2);
646
+ }, _callee3, null, [[1, 16]]);
399
647
  }));
400
- return function handleRemove(_x2) {
401
- return _ref2.apply(this, arguments);
648
+ return function handleRemove(_x7) {
649
+ return _ref4.apply(this, arguments);
402
650
  };
403
651
  }();
404
652
  var handleReUpload = function handleReUpload(file) {
405
- var newFile = _objectSpread(_objectSpread({}, file), {}, {
653
+ if (file.uid) {
654
+ pendingPreparationsRef.current.delete(file.uid);
655
+ }
656
+ abortRequest(file);
657
+ var nextFile = updateFile(file, {
658
+ uid: file.uid || uuidv4(),
406
659
  status: 'ready',
407
- percent: 0
660
+ percent: 0,
661
+ error: undefined,
662
+ response: undefined
408
663
  });
409
- updateFileList(newFile);
410
- postFile(newFile);
664
+ if (nextFile) {
665
+ postFile(nextFile);
666
+ }
411
667
  };
412
668
  var handlePreview = function handlePreview(file) {
413
669
  if (onPreview) {
414
670
  onPreview(file);
415
- } else if (file.raw) {
416
- // Default preview behavior: open in new window
417
- var url = URL.createObjectURL(file.raw);
418
- window.open(url);
419
- setTimeout(function () {
420
- return URL.revokeObjectURL(url);
421
- }, 100);
671
+ return;
672
+ }
673
+ if (file.url) {
674
+ window.open(file.url, '_blank', 'noopener,noreferrer');
675
+ return;
422
676
  }
677
+ if (!file.raw) {
678
+ return;
679
+ }
680
+ var url = URL.createObjectURL(file.raw);
681
+ var previewWindow = window.open(url, '_blank');
682
+ if (!previewWindow) {
683
+ URL.revokeObjectURL(url);
684
+ return;
685
+ }
686
+ var cleanup = function cleanup() {
687
+ return URL.revokeObjectURL(url);
688
+ };
689
+ previewWindow.addEventListener('load', cleanup, {
690
+ once: true
691
+ });
692
+ window.setTimeout(cleanup, 60000);
693
+ };
694
+ var renderUploadTrigger = function renderUploadTrigger() {
695
+ var acceptDirectory = directory ? {
696
+ webkitdirectory: '',
697
+ directory: ''
698
+ } : {};
699
+ return /*#__PURE__*/React.createElement("span", {
700
+ className: clsx("".concat(prefixCls, "-input"), _defineProperty({}, "".concat(prefixCls, "-input-disabled"), disabled)),
701
+ onClick: function onClick(event) {
702
+ if (!disabled && event.target !== inputRef.current) {
703
+ var _inputRef$current;
704
+ (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.click();
705
+ }
706
+ }
707
+ }, /*#__PURE__*/React.createElement("input", _extends({
708
+ type: "file",
709
+ "aria-label": "Upload file",
710
+ className: "".concat(prefixCls, "-native-input"),
711
+ disabled: disabled
712
+ }, acceptDirectory, {
713
+ multiple: Boolean(multiple || directory),
714
+ accept: accept,
715
+ onChange: handleChange,
716
+ ref: inputRef
717
+ })), children ? children : listType === 'picture-wall' ? /*#__PURE__*/React.createElement("span", {
718
+ className: "".concat(prefixCls, "-picture-wall-trigger")
719
+ }, /*#__PURE__*/React.createElement(Plus, null)) : /*#__PURE__*/React.createElement(Button, {
720
+ disabled: disabled
721
+ }, "Upload"));
423
722
  };
424
723
  var renderUploadList = function renderUploadList(extraProps) {
425
724
  if (!showUploadList) {
@@ -434,17 +733,20 @@ var Upload = /*#__PURE__*/forwardRef(function (baseprops, ref) {
434
733
  itemRender: itemRender,
435
734
  onRemove: handleRemove,
436
735
  onReUpload: handleReUpload,
437
- onPreview: handlePreview
736
+ onPreview: handlePreview,
737
+ isPreviewable: function isPreviewable(file) {
738
+ return Boolean(onPreview || file.url || file.raw);
739
+ }
438
740
  }, extraProps));
439
741
  };
440
742
  if (type === 'drag') {
441
743
  return /*#__PURE__*/React.createElement("div", _extends({
442
- ref: ref
744
+ ref: rootRef
443
745
  }, rest, {
444
746
  className: clsx(prefixCls, "".concat(prefixCls, "-drag"), _defineProperty(_defineProperty({}, "".concat(prefixCls, "-drag-hover"), dragState === 'dragover'), "".concat(prefixCls, "-disabled"), disabled), className),
445
747
  style: style
446
748
  }), /*#__PURE__*/React.createElement("div", {
447
- className: clsx("".concat(prefixCls, "-drag-container")),
749
+ className: "".concat(prefixCls, "-drag-container"),
448
750
  onDrop: handleDrop,
449
751
  onDragOver: handleDragOver,
450
752
  onDragLeave: handleDragLeave
@@ -454,7 +756,7 @@ var Upload = /*#__PURE__*/forwardRef(function (baseprops, ref) {
454
756
  }
455
757
  if (listType === 'picture-wall') {
456
758
  return /*#__PURE__*/React.createElement("div", _extends({
457
- ref: ref
759
+ ref: rootRef
458
760
  }, rest, {
459
761
  className: clsx(prefixCls, "".concat(prefixCls, "-picture-wall"), className),
460
762
  style: style
@@ -463,7 +765,7 @@ var Upload = /*#__PURE__*/forwardRef(function (baseprops, ref) {
463
765
  }));
464
766
  }
465
767
  return /*#__PURE__*/React.createElement("div", _extends({
466
- ref: ref
768
+ ref: rootRef
467
769
  }, rest, {
468
770
  className: clsx(prefixCls, _defineProperty(_defineProperty({}, "".concat(prefixCls, "-picture-list"), listType === 'picture-list'), "".concat(prefixCls, "-disabled"), disabled), className),
469
771
  style: style