@arco-design/mobile-react 2.30.10 → 2.31.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/README.en-US.md +2 -2
- package/README.md +2 -2
- package/cjs/action-sheet/style/css/index.css +50 -34
- package/cjs/avatar/style/css/index.css +50 -34
- package/cjs/badge/style/css/index.css +50 -34
- package/cjs/button/style/css/index.css +50 -34
- package/cjs/carousel/style/css/index.css +50 -34
- package/cjs/cell/style/css/index.css +50 -34
- package/cjs/cell/style/index.less +2 -2
- package/cjs/checkbox/style/css/index.css +50 -34
- package/cjs/circle-progress/style/css/index.css +50 -34
- package/cjs/collapse/style/css/index.css +50 -34
- package/cjs/count-down/style/css/index.css +50 -34
- package/cjs/date-picker/style/css/index.css +50 -34
- package/cjs/dialog/style/css/index.css +50 -34
- package/cjs/divider/style/css/index.css +50 -34
- package/cjs/dropdown/style/css/index.css +50 -34
- package/cjs/dropdown-menu/style/css/index.css +50 -34
- package/cjs/ellipsis/style/css/index.css +50 -34
- package/cjs/form/form-item.d.ts +3 -0
- package/cjs/form/form-item.js +38 -10
- package/cjs/form/style/css/index.css +63 -34
- package/cjs/form/style/index.less +18 -0
- package/cjs/grid/style/css/index.css +50 -34
- package/cjs/icon/IconCheck/index.js +1 -2
- package/cjs/icon/IconDownload/index.d.ts +7 -0
- package/cjs/icon/IconDownload/index.js +41 -0
- package/cjs/icon/IconFile/index.d.ts +7 -0
- package/cjs/icon/IconFile/index.js +41 -0
- package/cjs/icon/IconKeyboard/index.js +1 -0
- package/cjs/icon/IconQuestionCircle/index.js +1 -2
- package/cjs/icon/IconUpload/index.js +6 -4
- package/cjs/icon/IconUserFill/index.js +1 -2
- package/cjs/icon/index.d.ts +3 -1
- package/cjs/icon/index.js +17 -7
- package/cjs/icon/type.d.ts +3 -1
- package/cjs/image/style/css/index.css +50 -34
- package/cjs/image-picker/index.js +15 -161
- package/cjs/image-picker/style/css/index.css +50 -34
- package/cjs/image-picker/type.d.ts +4 -73
- package/cjs/image-preview/style/css/index.css +50 -34
- package/cjs/index-bar/style/css/index.css +50 -34
- package/cjs/index.d.ts +1 -0
- package/cjs/index.js +6 -2
- package/cjs/input/hooks.js +2 -2
- package/cjs/input/props.d.ts +2 -2
- package/cjs/input/style/css/index.css +50 -34
- package/cjs/keyboard/style/css/index.css +50 -34
- package/cjs/load-more/style/css/index.css +50 -34
- package/cjs/loading/style/css/index.css +50 -34
- package/cjs/masking/style/css/index.css +50 -34
- package/cjs/nav-bar/style/css/index.css +50 -34
- package/cjs/notice-bar/style/css/index.css +50 -34
- package/cjs/notice-bar/style/index.less +2 -2
- package/cjs/notify/style/css/index.css +50 -34
- package/cjs/pagination/style/css/index.css +50 -34
- package/cjs/pagination/style/index.less +4 -4
- package/cjs/picker/index.js +59 -19
- package/cjs/picker/style/css/index.css +50 -34
- package/cjs/picker/type.d.ts +6 -1
- package/cjs/picker-view/style/css/index.css +50 -34
- package/cjs/popover/style/css/index.css +50 -34
- package/cjs/popover/style/css/menu.css +50 -34
- package/cjs/popup/style/css/index.css +50 -34
- package/cjs/popup-swiper/style/css/index.css +50 -34
- package/cjs/progress/style/css/index.css +50 -34
- package/cjs/pull-refresh/style/css/index.css +50 -34
- package/cjs/radio/style/css/index.css +50 -34
- package/cjs/rate/style/css/index.css +50 -34
- package/cjs/rate/style/index.less +2 -2
- package/cjs/search-bar/style/css/index.css +50 -34
- package/cjs/skeleton/style/css/index.css +50 -34
- package/cjs/skeleton/style/index.less +2 -2
- package/cjs/slider/style/css/index.css +50 -34
- package/cjs/slider/style/index.less +6 -6
- package/cjs/stepper/style/css/index.css +50 -34
- package/cjs/steps/style/css/index.css +50 -34
- package/cjs/sticky/style/css/index.css +50 -34
- package/cjs/style.d.ts +1 -0
- package/cjs/style.js +3 -1
- package/cjs/swipe-action/style/css/index.css +50 -34
- package/cjs/swipe-load/style/css/index.css +50 -34
- package/cjs/switch/style/css/index.css +50 -34
- package/cjs/switch/style/index.less +8 -8
- package/cjs/tab-bar/style/css/index.css +50 -34
- package/cjs/tabs/style/css/index.css +50 -34
- package/cjs/tabs/tab-cell.js +1 -1
- package/cjs/tag/style/css/index.css +50 -34
- package/cjs/textarea/style/css/index.css +50 -34
- package/cjs/toast/style/css/index.css +50 -34
- package/cjs/transition/style/css/index.css +50 -34
- package/cjs/uploader/index.d.ts +16 -0
- package/cjs/uploader/index.js +180 -0
- package/cjs/uploader/style/css/index.css +666 -0
- package/cjs/uploader/style/css/index.d.ts +4 -0
- package/cjs/uploader/style/css/index.js +9 -0
- package/cjs/uploader/style/index.d.ts +4 -0
- package/cjs/uploader/style/index.js +9 -0
- package/cjs/uploader/style/index.less +161 -0
- package/cjs/uploader/type.d.ts +108 -0
- package/cjs/uploader/type.js +3 -0
- package/cjs/uploader/upload/index.d.ts +2 -0
- package/cjs/uploader/upload/index.js +19 -0
- package/cjs/uploader/upload/type.d.ts +107 -0
- package/cjs/uploader/upload/type.js +3 -0
- package/cjs/uploader/upload/upload.d.ts +20 -0
- package/cjs/uploader/upload/upload.js +189 -0
- package/dist/index.js +589 -273
- package/dist/index.min.js +5 -5
- package/dist/style.css +3811 -2306
- package/dist/style.min.css +1 -1
- package/esm/action-sheet/style/css/index.css +50 -34
- package/esm/avatar/style/css/index.css +50 -34
- package/esm/badge/style/css/index.css +50 -34
- package/esm/button/style/css/index.css +50 -34
- package/esm/carousel/style/css/index.css +50 -34
- package/esm/cell/style/css/index.css +50 -34
- package/esm/cell/style/index.less +2 -2
- package/esm/checkbox/style/css/index.css +50 -34
- package/esm/circle-progress/style/css/index.css +50 -34
- package/esm/collapse/style/css/index.css +50 -34
- package/esm/count-down/style/css/index.css +50 -34
- package/esm/date-picker/style/css/index.css +50 -34
- package/esm/dialog/style/css/index.css +50 -34
- package/esm/divider/style/css/index.css +50 -34
- package/esm/dropdown/style/css/index.css +50 -34
- package/esm/dropdown-menu/style/css/index.css +50 -34
- package/esm/ellipsis/style/css/index.css +50 -34
- package/esm/form/form-item.d.ts +3 -0
- package/esm/form/form-item.js +36 -10
- package/esm/form/style/css/index.css +63 -34
- package/esm/form/style/index.less +18 -0
- package/esm/grid/style/css/index.css +50 -34
- package/esm/icon/IconCheck/index.js +1 -2
- package/esm/icon/IconDownload/index.d.ts +7 -0
- package/esm/icon/IconDownload/index.js +30 -0
- package/esm/icon/IconFile/index.d.ts +7 -0
- package/esm/icon/IconFile/index.js +30 -0
- package/esm/icon/IconKeyboard/index.js +1 -0
- package/esm/icon/IconQuestionCircle/index.js +1 -2
- package/esm/icon/IconUpload/index.js +6 -4
- package/esm/icon/IconUserFill/index.js +1 -2
- package/esm/icon/index.d.ts +3 -1
- package/esm/icon/index.js +3 -1
- package/esm/icon/type.d.ts +3 -1
- package/esm/image/style/css/index.css +50 -34
- package/esm/image-picker/index.js +14 -160
- package/esm/image-picker/style/css/index.css +50 -34
- package/esm/image-picker/type.d.ts +4 -73
- package/esm/image-preview/style/css/index.css +50 -34
- package/esm/index-bar/style/css/index.css +50 -34
- package/esm/index.d.ts +1 -0
- package/esm/index.js +2 -1
- package/esm/input/hooks.js +2 -2
- package/esm/input/props.d.ts +2 -2
- package/esm/input/style/css/index.css +50 -34
- package/esm/keyboard/style/css/index.css +50 -34
- package/esm/load-more/style/css/index.css +50 -34
- package/esm/loading/style/css/index.css +50 -34
- package/esm/masking/style/css/index.css +50 -34
- package/esm/nav-bar/style/css/index.css +50 -34
- package/esm/notice-bar/style/css/index.css +50 -34
- package/esm/notice-bar/style/index.less +2 -2
- package/esm/notify/style/css/index.css +50 -34
- package/esm/pagination/style/css/index.css +50 -34
- package/esm/pagination/style/index.less +4 -4
- package/esm/picker/index.js +60 -20
- package/esm/picker/style/css/index.css +50 -34
- package/esm/picker/type.d.ts +6 -1
- package/esm/picker-view/style/css/index.css +50 -34
- package/esm/popover/style/css/index.css +50 -34
- package/esm/popover/style/css/menu.css +50 -34
- package/esm/popup/style/css/index.css +50 -34
- package/esm/popup-swiper/style/css/index.css +50 -34
- package/esm/progress/style/css/index.css +50 -34
- package/esm/pull-refresh/style/css/index.css +50 -34
- package/esm/radio/style/css/index.css +50 -34
- package/esm/rate/style/css/index.css +50 -34
- package/esm/rate/style/index.less +2 -2
- package/esm/search-bar/style/css/index.css +50 -34
- package/esm/skeleton/style/css/index.css +50 -34
- package/esm/skeleton/style/index.less +2 -2
- package/esm/slider/style/css/index.css +50 -34
- package/esm/slider/style/index.less +6 -6
- package/esm/stepper/style/css/index.css +50 -34
- package/esm/steps/style/css/index.css +50 -34
- package/esm/sticky/style/css/index.css +50 -34
- package/esm/style.d.ts +1 -0
- package/esm/style.js +2 -1
- package/esm/swipe-action/style/css/index.css +50 -34
- package/esm/swipe-load/style/css/index.css +50 -34
- package/esm/switch/style/css/index.css +50 -34
- package/esm/switch/style/index.less +8 -8
- package/esm/tab-bar/style/css/index.css +50 -34
- package/esm/tabs/style/css/index.css +50 -34
- package/esm/tabs/tab-cell.js +2 -2
- package/esm/tag/style/css/index.css +50 -34
- package/esm/textarea/style/css/index.css +50 -34
- package/esm/toast/style/css/index.css +50 -34
- package/esm/transition/style/css/index.css +50 -34
- package/esm/uploader/index.d.ts +16 -0
- package/esm/uploader/index.js +150 -0
- package/esm/uploader/style/css/index.css +666 -0
- package/esm/uploader/style/css/index.d.ts +4 -0
- package/esm/uploader/style/css/index.js +4 -0
- package/esm/uploader/style/index.d.ts +4 -0
- package/esm/uploader/style/index.js +4 -0
- package/esm/uploader/style/index.less +161 -0
- package/esm/uploader/type.d.ts +108 -0
- package/esm/uploader/type.js +1 -0
- package/esm/uploader/upload/index.d.ts +2 -0
- package/esm/uploader/upload/index.js +2 -0
- package/esm/uploader/upload/type.d.ts +107 -0
- package/esm/uploader/upload/type.js +1 -0
- package/esm/uploader/upload/upload.d.ts +20 -0
- package/esm/uploader/upload/upload.js +175 -0
- package/package.json +3 -6
- package/style/css/public.css +50 -34
- package/tokens/app/arcodesign/default/css-variables.less +27 -0
- package/tokens/app/arcodesign/default/index.d.ts +27 -0
- package/tokens/app/arcodesign/default/index.js +28 -1
- package/tokens/app/arcodesign/default/index.json +292 -0
- package/tokens/app/arcodesign/default/index.less +27 -0
- package/tokens/mixin/index.less +80 -3
- package/tokens/mixin/vars-switch.less +1 -0
- package/umd/action-sheet/style/css/index.css +50 -34
- package/umd/avatar/style/css/index.css +50 -34
- package/umd/badge/style/css/index.css +50 -34
- package/umd/button/style/css/index.css +50 -34
- package/umd/carousel/style/css/index.css +50 -34
- package/umd/cell/style/css/index.css +50 -34
- package/umd/cell/style/index.less +2 -2
- package/umd/checkbox/style/css/index.css +50 -34
- package/umd/circle-progress/style/css/index.css +50 -34
- package/umd/collapse/style/css/index.css +50 -34
- package/umd/count-down/style/css/index.css +50 -34
- package/umd/date-picker/style/css/index.css +50 -34
- package/umd/dialog/style/css/index.css +50 -34
- package/umd/divider/style/css/index.css +50 -34
- package/umd/dropdown/style/css/index.css +50 -34
- package/umd/dropdown-menu/style/css/index.css +50 -34
- package/umd/ellipsis/style/css/index.css +50 -34
- package/umd/form/form-item.d.ts +3 -0
- package/umd/form/form-item.js +38 -10
- package/umd/form/style/css/index.css +63 -34
- package/umd/form/style/index.less +18 -0
- package/umd/grid/style/css/index.css +50 -34
- package/umd/icon/IconCheck/index.js +1 -2
- package/umd/icon/IconDownload/index.d.ts +7 -0
- package/umd/icon/IconDownload/index.js +49 -0
- package/umd/icon/IconFile/index.d.ts +7 -0
- package/umd/icon/IconFile/index.js +49 -0
- package/umd/icon/IconKeyboard/index.js +1 -0
- package/umd/icon/IconQuestionCircle/index.js +1 -2
- package/umd/icon/IconUpload/index.js +6 -4
- package/umd/icon/IconUserFill/index.js +1 -2
- package/umd/icon/index.d.ts +3 -1
- package/umd/icon/index.js +15 -9
- package/umd/icon/type.d.ts +3 -1
- package/umd/image/style/css/index.css +50 -34
- package/umd/image-picker/index.js +17 -163
- package/umd/image-picker/style/css/index.css +50 -34
- package/umd/image-picker/type.d.ts +4 -73
- package/umd/image-preview/style/css/index.css +50 -34
- package/umd/index-bar/style/css/index.css +50 -34
- package/umd/index.d.ts +1 -0
- package/umd/index.js +7 -5
- package/umd/input/hooks.js +2 -2
- package/umd/input/props.d.ts +2 -2
- package/umd/input/style/css/index.css +50 -34
- package/umd/keyboard/style/css/index.css +50 -34
- package/umd/load-more/style/css/index.css +50 -34
- package/umd/loading/style/css/index.css +50 -34
- package/umd/masking/style/css/index.css +50 -34
- package/umd/nav-bar/style/css/index.css +50 -34
- package/umd/notice-bar/style/css/index.css +50 -34
- package/umd/notice-bar/style/index.less +2 -2
- package/umd/notify/style/css/index.css +50 -34
- package/umd/pagination/style/css/index.css +50 -34
- package/umd/pagination/style/index.less +4 -4
- package/umd/picker/index.js +59 -19
- package/umd/picker/style/css/index.css +50 -34
- package/umd/picker/type.d.ts +6 -1
- package/umd/picker-view/style/css/index.css +50 -34
- package/umd/popover/style/css/index.css +50 -34
- package/umd/popover/style/css/menu.css +50 -34
- package/umd/popup/style/css/index.css +50 -34
- package/umd/popup-swiper/style/css/index.css +50 -34
- package/umd/progress/style/css/index.css +50 -34
- package/umd/pull-refresh/style/css/index.css +50 -34
- package/umd/radio/style/css/index.css +50 -34
- package/umd/rate/style/css/index.css +50 -34
- package/umd/rate/style/index.less +2 -2
- package/umd/search-bar/style/css/index.css +50 -34
- package/umd/skeleton/style/css/index.css +50 -34
- package/umd/skeleton/style/index.less +2 -2
- package/umd/slider/style/css/index.css +50 -34
- package/umd/slider/style/index.less +6 -6
- package/umd/stepper/style/css/index.css +50 -34
- package/umd/steps/style/css/index.css +50 -34
- package/umd/sticky/style/css/index.css +50 -34
- package/umd/style.d.ts +1 -0
- package/umd/style.js +4 -4
- package/umd/swipe-action/style/css/index.css +50 -34
- package/umd/swipe-load/style/css/index.css +50 -34
- package/umd/switch/style/css/index.css +50 -34
- package/umd/switch/style/index.less +8 -8
- package/umd/tab-bar/style/css/index.css +50 -34
- package/umd/tabs/style/css/index.css +50 -34
- package/umd/tabs/tab-cell.js +1 -1
- package/umd/tag/style/css/index.css +50 -34
- package/umd/textarea/style/css/index.css +50 -34
- package/umd/toast/style/css/index.css +50 -34
- package/umd/transition/style/css/index.css +50 -34
- package/umd/uploader/index.d.ts +16 -0
- package/umd/uploader/index.js +178 -0
- package/umd/uploader/style/css/index.css +666 -0
- package/umd/uploader/style/css/index.d.ts +4 -0
- package/umd/uploader/style/css/index.js +15 -0
- package/umd/uploader/style/index.d.ts +4 -0
- package/umd/uploader/style/index.js +15 -0
- package/umd/uploader/style/index.less +161 -0
- package/umd/uploader/type.d.ts +108 -0
- package/umd/uploader/type.js +17 -0
- package/umd/uploader/upload/index.d.ts +2 -0
- package/umd/uploader/upload/index.js +27 -0
- package/umd/uploader/upload/type.d.ts +107 -0
- package/umd/uploader/upload/type.js +17 -0
- package/umd/uploader/upload/upload.d.ts +20 -0
- package/umd/uploader/upload/upload.js +200 -0
@@ -0,0 +1,161 @@
|
|
1
|
+
@import '../../../style/mixin.less';
|
2
|
+
|
3
|
+
.@{prefix}-uploader {
|
4
|
+
&-container {
|
5
|
+
display: flex;
|
6
|
+
flex-wrap: wrap;
|
7
|
+
}
|
8
|
+
&-add {
|
9
|
+
position: relative;
|
10
|
+
input {
|
11
|
+
position: absolute;
|
12
|
+
opacity: 0;
|
13
|
+
left: 0;
|
14
|
+
top: 0;
|
15
|
+
width: 100%;
|
16
|
+
height: 100%;
|
17
|
+
display: none;
|
18
|
+
}
|
19
|
+
}
|
20
|
+
&-list {
|
21
|
+
width: 100%;
|
22
|
+
&-item {
|
23
|
+
display: flex;
|
24
|
+
align-items: center;
|
25
|
+
.use-var(height, uploader-item-height);
|
26
|
+
.use-var(margin-top, uploader-item-margin-top);
|
27
|
+
&-container {
|
28
|
+
flex: 1;
|
29
|
+
display: flex;
|
30
|
+
align-items: center;
|
31
|
+
height: 100%;
|
32
|
+
.use-var(border-radius, uploader-item-border-radius);
|
33
|
+
.use-var(background-color, uploader-item-background-color);
|
34
|
+
.use-var(padding, uploader-item-padding);
|
35
|
+
}
|
36
|
+
&-wrapper {
|
37
|
+
display: flex;
|
38
|
+
flex: 1;
|
39
|
+
align-items: center;
|
40
|
+
}
|
41
|
+
&-file {
|
42
|
+
display: flex;
|
43
|
+
.use-var(font-size, uploader-file-icon-font-size);
|
44
|
+
.use-var-with-rtl(margin-right, uploader-file-icon-margin-right);
|
45
|
+
&-icon {
|
46
|
+
.use-var(color, uploader-file-icon-color);
|
47
|
+
}
|
48
|
+
}
|
49
|
+
&-text {
|
50
|
+
font-weight: 400;
|
51
|
+
.use-var(font-size, uploader-item-text-font-size);
|
52
|
+
.use-var(color, uploader-item-text-color);
|
53
|
+
&-error {
|
54
|
+
.use-var(color, uploader-item-text-error-color);
|
55
|
+
}
|
56
|
+
}
|
57
|
+
&-loaded {
|
58
|
+
display: flex;
|
59
|
+
.use-var(font-size, uploader-loaded-icon-font-size);
|
60
|
+
.use-var(color, uploader-loaded-icon-color);
|
61
|
+
}
|
62
|
+
&-error {
|
63
|
+
font-weight: 400;
|
64
|
+
.use-var(font-size, uploader-error-text-font-size);
|
65
|
+
.use-var(color, uploader-error-text-color);
|
66
|
+
}
|
67
|
+
&-delete {
|
68
|
+
display: flex;
|
69
|
+
height: 100%;
|
70
|
+
align-items: center;
|
71
|
+
.use-var-with-rtl(padding-left, uploader-delete-icon-padding-left);
|
72
|
+
.use-var(font-size, uploader-delete-icon-font-size);
|
73
|
+
&-icon {
|
74
|
+
.use-var(color, uploader-delete-icon-color);
|
75
|
+
&-disabled {
|
76
|
+
.use-var(color, uploader-disabled-delete-icon-color);
|
77
|
+
}
|
78
|
+
}
|
79
|
+
}
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
.@{prefix}-uploader-disabled {
|
85
|
+
pointer-events: none;
|
86
|
+
}
|
87
|
+
|
88
|
+
/***************************************************
|
89
|
+
* *
|
90
|
+
* Arco Theme Style *
|
91
|
+
* *
|
92
|
+
***************************************************/
|
93
|
+
& when (@use-dark-mode = 1) {
|
94
|
+
|
95
|
+
.process-bg-color-with-config,
|
96
|
+
.process-custom-icon-bg-color-with-config {
|
97
|
+
@{arco-dark-mode-selector} & {
|
98
|
+
.use-var(color, dark-steps-process-with-config-item-icon-color);
|
99
|
+
.use-var(color, dark-steps-process-with-config-item-icon-color);
|
100
|
+
}
|
101
|
+
}
|
102
|
+
.wait-custom-icon-bg-color-with-config {
|
103
|
+
@{arco-dark-mode-selector} & {
|
104
|
+
.use-var(background, dark-steps-wait-icon-num-background);
|
105
|
+
.use-var(color, dark-sub-info-font-color);
|
106
|
+
.use-var(background, dark-steps-wait-icon-num-background);
|
107
|
+
.use-var(color, dark-sub-info-font-color);
|
108
|
+
}
|
109
|
+
}
|
110
|
+
.@{prefix}-uploader {
|
111
|
+
&-list {
|
112
|
+
&-item {
|
113
|
+
&-container {
|
114
|
+
@{arco-dark-mode-selector} & {
|
115
|
+
.use-var(background-color, dark-uploader-item-background-color);
|
116
|
+
}
|
117
|
+
}
|
118
|
+
&-file {
|
119
|
+
&-icon {
|
120
|
+
@{arco-dark-mode-selector} & {
|
121
|
+
.use-var(color, dark-uploader-file-icon-color);
|
122
|
+
}
|
123
|
+
}
|
124
|
+
}
|
125
|
+
&-text {
|
126
|
+
@{arco-dark-mode-selector} & {
|
127
|
+
.use-var(color, dark-uploader-item-text-color);
|
128
|
+
}
|
129
|
+
&-error {
|
130
|
+
@{arco-dark-mode-selector} & {
|
131
|
+
.use-var(color, dark-uploader-item-text-error-color);
|
132
|
+
}
|
133
|
+
}
|
134
|
+
}
|
135
|
+
&-loaded {
|
136
|
+
@{arco-dark-mode-selector} & {
|
137
|
+
.use-var(color, dark-uploader-loaded-icon-color);
|
138
|
+
}
|
139
|
+
}
|
140
|
+
&-error {
|
141
|
+
@{arco-dark-mode-selector} & {
|
142
|
+
.use-var(color, dark-uploader-error-text-color);
|
143
|
+
}
|
144
|
+
}
|
145
|
+
&-delete {
|
146
|
+
&-icon {
|
147
|
+
@{arco-dark-mode-selector} & {
|
148
|
+
.use-var(color, dark-uploader-delete-icon-color);
|
149
|
+
}
|
150
|
+
&-disabled {
|
151
|
+
@{arco-dark-mode-selector} & {
|
152
|
+
.use-var(color, dark-uploader-disabled-delete-icon-color);
|
153
|
+
}
|
154
|
+
}
|
155
|
+
}
|
156
|
+
}
|
157
|
+
}
|
158
|
+
}
|
159
|
+
}
|
160
|
+
}
|
161
|
+
/********************* End *************************/
|
@@ -0,0 +1,108 @@
|
|
1
|
+
import { InputHTMLAttributes } from 'react';
|
2
|
+
import { UploadCommonProps, CommonFileItem } from './upload/type';
|
3
|
+
export interface FileItem extends CommonFileItem {
|
4
|
+
/**
|
5
|
+
* 文件
|
6
|
+
* @en File
|
7
|
+
*/
|
8
|
+
file: File;
|
9
|
+
}
|
10
|
+
export interface UploaderProps extends UploadCommonProps {
|
11
|
+
/**
|
12
|
+
* 自定义类名
|
13
|
+
* @en Custom className
|
14
|
+
*/
|
15
|
+
className?: string;
|
16
|
+
/**
|
17
|
+
* 自定义样式
|
18
|
+
* @en Custom stylesheet
|
19
|
+
*/
|
20
|
+
style?: React.CSSProperties;
|
21
|
+
/**
|
22
|
+
* 可以选择的文件类型
|
23
|
+
* @en Available file types
|
24
|
+
* @default undefined
|
25
|
+
*/
|
26
|
+
accept?: InputHTMLAttributes<unknown>['accept'];
|
27
|
+
/**
|
28
|
+
* 是否支持多选
|
29
|
+
* @en Whether to support multiple selection
|
30
|
+
*/
|
31
|
+
multiple?: boolean;
|
32
|
+
/**
|
33
|
+
* 文件选取模式 File selection mode [capture MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture)
|
34
|
+
* @en Whether To Support Multiple Selection [capture MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/capture)
|
35
|
+
*/
|
36
|
+
capture?: InputHTMLAttributes<unknown>['capture'];
|
37
|
+
/**
|
38
|
+
* 是否隐藏文件上传状态
|
39
|
+
* @en Whether to hide file upload status
|
40
|
+
* @default false
|
41
|
+
*/
|
42
|
+
hideStatus?: boolean;
|
43
|
+
/**
|
44
|
+
* 是否总是展示选择Icon,默认情况下当文件数量超出limit值时会自动隐藏选择Icon
|
45
|
+
* @en Whether to always show Select Icon
|
46
|
+
* @default false
|
47
|
+
*/
|
48
|
+
alwaysShowSelect?: boolean;
|
49
|
+
/**
|
50
|
+
* 禁用选择和删除图片
|
51
|
+
* @en Disable select & delete image
|
52
|
+
*/
|
53
|
+
disabled?: boolean;
|
54
|
+
/**
|
55
|
+
* 自定义删除区域
|
56
|
+
* @en Defined delete area
|
57
|
+
*/
|
58
|
+
renderDeleteArea?: (fileItem: FileItem, index: number) => React.ReactNode;
|
59
|
+
/**
|
60
|
+
* 自定义上传成功区域
|
61
|
+
* @en Defined loaded area
|
62
|
+
*/
|
63
|
+
renderLoadedArea?: (fileItem: FileItem, index: number) => React.ReactNode;
|
64
|
+
/**
|
65
|
+
* 自定义上传中区域
|
66
|
+
* @en Defined loading area
|
67
|
+
*/
|
68
|
+
renderLoadingArea?: (fileItem: FileItem, index: number) => React.ReactNode;
|
69
|
+
/**
|
70
|
+
* 自定义上传失败区域
|
71
|
+
* @en Defined error area
|
72
|
+
*/
|
73
|
+
renderErrorArea?: (fileItem: FileItem, index: number) => React.ReactNode;
|
74
|
+
/**
|
75
|
+
* 自定义文件索引区域
|
76
|
+
* @en Defined file index area
|
77
|
+
*/
|
78
|
+
renderFileIndexArea?: (fileItem: FileItem, index: number) => React.ReactNode;
|
79
|
+
/**
|
80
|
+
* 自定义上传按钮区域
|
81
|
+
* @en Defined upload button area
|
82
|
+
*/
|
83
|
+
renderUploadArea?: () => React.ReactNode;
|
84
|
+
/**
|
85
|
+
* 自定义上传文件列表展示
|
86
|
+
* @en Defined file list display
|
87
|
+
*/
|
88
|
+
renderFileList?: (methods: FileListMethods) => React.ReactNode;
|
89
|
+
}
|
90
|
+
export interface UploaderRef {
|
91
|
+
/**
|
92
|
+
* 最外层 DOM 元素
|
93
|
+
* @en The outer DOM element of the component
|
94
|
+
*/
|
95
|
+
dom: HTMLDivElement | null;
|
96
|
+
}
|
97
|
+
export interface FileListMethods {
|
98
|
+
/**
|
99
|
+
* 重新上传
|
100
|
+
* @en Retry to upload
|
101
|
+
*/
|
102
|
+
retryUpload: (index: number) => void;
|
103
|
+
/**
|
104
|
+
* 删除文件
|
105
|
+
* @en Delete file
|
106
|
+
*/
|
107
|
+
deleteFile: (index: number) => void;
|
108
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
(function (global, factory) {
|
2
|
+
if (typeof define === "function" && define.amd) {
|
3
|
+
define(["exports"], factory);
|
4
|
+
} else if (typeof exports !== "undefined") {
|
5
|
+
factory(exports);
|
6
|
+
} else {
|
7
|
+
var mod = {
|
8
|
+
exports: {}
|
9
|
+
};
|
10
|
+
factory(mod.exports);
|
11
|
+
global.type = mod.exports;
|
12
|
+
}
|
13
|
+
})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports) {
|
14
|
+
"use strict";
|
15
|
+
|
16
|
+
_exports.__esModule = true;
|
17
|
+
});
|
@@ -0,0 +1,27 @@
|
|
1
|
+
(function (global, factory) {
|
2
|
+
if (typeof define === "function" && define.amd) {
|
3
|
+
define(["exports", "./type", "./upload"], factory);
|
4
|
+
} else if (typeof exports !== "undefined") {
|
5
|
+
factory(exports, require("./type"), require("./upload"));
|
6
|
+
} else {
|
7
|
+
var mod = {
|
8
|
+
exports: {}
|
9
|
+
};
|
10
|
+
factory(mod.exports, global.type, global.upload);
|
11
|
+
global.index = mod.exports;
|
12
|
+
}
|
13
|
+
})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _type, _upload) {
|
14
|
+
"use strict";
|
15
|
+
|
16
|
+
_exports.__esModule = true;
|
17
|
+
Object.keys(_type).forEach(function (key) {
|
18
|
+
if (key === "default" || key === "__esModule") return;
|
19
|
+
if (key in _exports && _exports[key] === _type[key]) return;
|
20
|
+
_exports[key] = _type[key];
|
21
|
+
});
|
22
|
+
Object.keys(_upload).forEach(function (key) {
|
23
|
+
if (key === "default" || key === "__esModule") return;
|
24
|
+
if (key in _exports && _exports[key] === _upload[key]) return;
|
25
|
+
_exports[key] = _upload[key];
|
26
|
+
});
|
27
|
+
});
|
@@ -0,0 +1,107 @@
|
|
1
|
+
/// <reference types="react" />
|
2
|
+
export interface AdapterFile {
|
3
|
+
/**
|
4
|
+
* 文件 url
|
5
|
+
* @en Url of file
|
6
|
+
*/
|
7
|
+
url?: string;
|
8
|
+
/**
|
9
|
+
* 文件大小
|
10
|
+
* @en File size
|
11
|
+
*/
|
12
|
+
size: number;
|
13
|
+
/**
|
14
|
+
* 文件名
|
15
|
+
* @en File name
|
16
|
+
*/
|
17
|
+
name: string;
|
18
|
+
}
|
19
|
+
export interface SelectCallback {
|
20
|
+
/**
|
21
|
+
* 文件列表
|
22
|
+
* @en File list
|
23
|
+
*/
|
24
|
+
files: AdapterFile[];
|
25
|
+
}
|
26
|
+
export interface CommonFileItem {
|
27
|
+
/**
|
28
|
+
* 文件地址
|
29
|
+
* @en file Url
|
30
|
+
*/
|
31
|
+
url?: string;
|
32
|
+
/**
|
33
|
+
* 文件
|
34
|
+
* @en File
|
35
|
+
*/
|
36
|
+
file?: File;
|
37
|
+
/**
|
38
|
+
* 文件状态
|
39
|
+
* @en Image Status
|
40
|
+
* @default 以文件自身加载状态而定
|
41
|
+
* @default_en According to inner status of the image
|
42
|
+
*/
|
43
|
+
status?: 'loaded' | 'loading' | 'error';
|
44
|
+
}
|
45
|
+
export interface UploadCommonProps<FileItem extends CommonFileItem = CommonFileItem> {
|
46
|
+
/**
|
47
|
+
* 上传方法
|
48
|
+
* @en Upload function
|
49
|
+
*/
|
50
|
+
upload?: (file: FileItem) => Promise<FileItem | null>;
|
51
|
+
/**
|
52
|
+
* 已选文件列表发生变化
|
53
|
+
* @en The list of selected files changes
|
54
|
+
*/
|
55
|
+
onChange?: (fileList: FileItem[]) => void;
|
56
|
+
/**
|
57
|
+
* 文件大小限制,单位为K
|
58
|
+
* @en File size limit, in K
|
59
|
+
*/
|
60
|
+
maxSize?: number;
|
61
|
+
/**
|
62
|
+
* 文件超过限制大小
|
63
|
+
* @en Image exceeds size limit
|
64
|
+
*/
|
65
|
+
onMaxSizeExceed?: (file: File) => void;
|
66
|
+
/**
|
67
|
+
* 最多选择文件数,超出数量自动隐藏上传按钮,0表示不做限制
|
68
|
+
* @en Max pictures can choose, 0 means no restriction
|
69
|
+
* @default 0
|
70
|
+
*/
|
71
|
+
limit?: number;
|
72
|
+
/**
|
73
|
+
* 选择文件数超过限制
|
74
|
+
* @en The number of pictures exceeds the limit
|
75
|
+
*/
|
76
|
+
onLimitExceed?: (files: File[]) => void;
|
77
|
+
/**
|
78
|
+
* 已选择文件列表
|
79
|
+
* @en Selected files list
|
80
|
+
*/
|
81
|
+
files: FileItem[];
|
82
|
+
/**
|
83
|
+
* 删除点击事件
|
84
|
+
* @en Delete area click event
|
85
|
+
*/
|
86
|
+
onDeleteClick?: (index: number) => void;
|
87
|
+
/**
|
88
|
+
* 上传文件点击事件
|
89
|
+
* @en Upload area click event
|
90
|
+
*/
|
91
|
+
onUploadClick?: () => void;
|
92
|
+
/**
|
93
|
+
* 文件选择适配器
|
94
|
+
* @en Select adaptor
|
95
|
+
*/
|
96
|
+
selectAdapter?: () => Promise<SelectCallback>;
|
97
|
+
/**
|
98
|
+
* 文件点击
|
99
|
+
* @en click event
|
100
|
+
*/
|
101
|
+
onClick?: (e: React.MouseEvent<HTMLElement, MouseEvent>, file: FileItem, index: number) => void;
|
102
|
+
/**
|
103
|
+
* 文件长按事件
|
104
|
+
* @en long press event
|
105
|
+
*/
|
106
|
+
onLongPress?: (e: React.TouchEvent<HTMLElement>, file: FileItem, index: number) => void;
|
107
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
(function (global, factory) {
|
2
|
+
if (typeof define === "function" && define.amd) {
|
3
|
+
define(["exports"], factory);
|
4
|
+
} else if (typeof exports !== "undefined") {
|
5
|
+
factory(exports);
|
6
|
+
} else {
|
7
|
+
var mod = {
|
8
|
+
exports: {}
|
9
|
+
};
|
10
|
+
factory(mod.exports);
|
11
|
+
global.type = mod.exports;
|
12
|
+
}
|
13
|
+
})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports) {
|
14
|
+
"use strict";
|
15
|
+
|
16
|
+
_exports.__esModule = true;
|
17
|
+
});
|
@@ -0,0 +1,20 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
import React from 'react';
|
3
|
+
import { Promise } from 'es6-promise';
|
4
|
+
import { AdapterFile, CommonFileItem, UploadCommonProps } from './type';
|
5
|
+
export declare class Upload<FileItem extends CommonFileItem = CommonFileItem> {
|
6
|
+
props: UploadCommonProps<FileItem>;
|
7
|
+
fileRef: React.MutableRefObject<HTMLInputElement | null>;
|
8
|
+
cacheRef: React.MutableRefObject<FileItem[]>;
|
9
|
+
timeOutEvent: NodeJS.Timeout | number;
|
10
|
+
constructor(props: UploadCommonProps<FileItem>, fileRef: React.MutableRefObject<HTMLInputElement | null>, cacheRef: React.MutableRefObject<FileItem[]>);
|
11
|
+
init(): void;
|
12
|
+
handleFile: (newFiles: File[]) => void;
|
13
|
+
handleChange: (event: any, fromAdapter?: boolean | undefined) => void;
|
14
|
+
deleteFile: (index: number) => void;
|
15
|
+
retryUpload: (index: number) => void;
|
16
|
+
handleSelect: (e: React.MouseEvent) => void;
|
17
|
+
handleClick: (e: React.MouseEvent<HTMLDivElement, MouseEvent>, file: FileItem, index: number) => void;
|
18
|
+
handleTouchStart: (e: React.TouchEvent<HTMLDivElement>, image: FileItem, index: number) => void;
|
19
|
+
}
|
20
|
+
export declare const parseFile: (file: AdapterFile) => Promise<unknown>;
|
@@ -0,0 +1,200 @@
|
|
1
|
+
(function (global, factory) {
|
2
|
+
if (typeof define === "function" && define.amd) {
|
3
|
+
define(["exports", "@babel/runtime/helpers/extends", "es6-promise"], factory);
|
4
|
+
} else if (typeof exports !== "undefined") {
|
5
|
+
factory(exports, require("@babel/runtime/helpers/extends"), require("es6-promise"));
|
6
|
+
} else {
|
7
|
+
var mod = {
|
8
|
+
exports: {}
|
9
|
+
};
|
10
|
+
factory(mod.exports, global._extends, global.es6Promise);
|
11
|
+
global.upload = mod.exports;
|
12
|
+
}
|
13
|
+
})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _extends2, _es6Promise) {
|
14
|
+
"use strict";
|
15
|
+
|
16
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
17
|
+
|
18
|
+
_exports.__esModule = true;
|
19
|
+
_exports.parseFile = _exports.Upload = void 0;
|
20
|
+
_extends2 = _interopRequireDefault(_extends2);
|
21
|
+
|
22
|
+
var Upload = /*#__PURE__*/function () {
|
23
|
+
// click && longPress
|
24
|
+
function Upload(props, fileRef, cacheRef) {
|
25
|
+
var _this = this;
|
26
|
+
|
27
|
+
this.props = void 0;
|
28
|
+
this.fileRef = void 0;
|
29
|
+
this.cacheRef = void 0;
|
30
|
+
this.timeOutEvent = void 0;
|
31
|
+
|
32
|
+
this.handleFile = function (newFiles) {
|
33
|
+
_es6Promise.Promise.all(newFiles.map(function (file) {
|
34
|
+
return parseFile(file);
|
35
|
+
})).then(function (parseFiles) {
|
36
|
+
var res = parseFiles.map(function (url, index) {
|
37
|
+
return {
|
38
|
+
url: url,
|
39
|
+
status: typeof _this.props.upload === 'function' ? 'loading' : 'loaded',
|
40
|
+
file: newFiles[index]
|
41
|
+
};
|
42
|
+
});
|
43
|
+
_this.cacheRef.current = [].concat(_this.cacheRef.current, res);
|
44
|
+
|
45
|
+
_this.props.onChange([].concat(_this.cacheRef.current)); // 执行upload
|
46
|
+
|
47
|
+
|
48
|
+
if (typeof _this.props.upload === 'function') {
|
49
|
+
newFiles.forEach(function (_file) {
|
50
|
+
_this.props.upload(_this.cacheRef.current.find(function (_ref) {
|
51
|
+
var file = _ref.file;
|
52
|
+
return file === _file;
|
53
|
+
})).then(function (data) {
|
54
|
+
var index = _this.cacheRef.current.findIndex(function (_ref2) {
|
55
|
+
var file = _ref2.file;
|
56
|
+
return file === _file;
|
57
|
+
});
|
58
|
+
|
59
|
+
if (index !== -1) {
|
60
|
+
_this.cacheRef.current[index] = (0, _extends2.default)({}, _this.cacheRef.current[index], data, {
|
61
|
+
status: 'loaded'
|
62
|
+
});
|
63
|
+
}
|
64
|
+
}).catch(function () {
|
65
|
+
var index = _this.cacheRef.current.findIndex(function (_ref3) {
|
66
|
+
var file = _ref3.file;
|
67
|
+
return file === _file;
|
68
|
+
});
|
69
|
+
|
70
|
+
if (index !== -1) {
|
71
|
+
_this.cacheRef.current[index].status = 'error';
|
72
|
+
}
|
73
|
+
}).finally(function () {
|
74
|
+
_this.props.onChange([].concat(_this.cacheRef.current));
|
75
|
+
});
|
76
|
+
});
|
77
|
+
}
|
78
|
+
});
|
79
|
+
};
|
80
|
+
|
81
|
+
this.handleChange = function (event, fromAdapter) {
|
82
|
+
var newFiles = Array.prototype.filter.call(event.target.files || [], function (file) {
|
83
|
+
// 过滤maxSize
|
84
|
+
if (_this.props.maxSize && file.size > _this.props.maxSize * 1024) {
|
85
|
+
_this.props.onMaxSizeExceed && _this.props.onMaxSizeExceed(file);
|
86
|
+
return false;
|
87
|
+
}
|
88
|
+
|
89
|
+
return true;
|
90
|
+
}) || [];
|
91
|
+
|
92
|
+
if (!fromAdapter) {
|
93
|
+
event.target.value = '';
|
94
|
+
} // 截断limit
|
95
|
+
|
96
|
+
|
97
|
+
if (_this.props.limit !== 0 && newFiles.length + _this.props.files.length > _this.props.limit) {
|
98
|
+
_this.props.onLimitExceed && _this.props.onLimitExceed(newFiles);
|
99
|
+
newFiles.length = _this.props.limit - _this.props.files.length;
|
100
|
+
}
|
101
|
+
|
102
|
+
_this.handleFile(newFiles);
|
103
|
+
};
|
104
|
+
|
105
|
+
this.deleteFile = function (index) {
|
106
|
+
_this.props.onDeleteClick && _this.props.onDeleteClick(index);
|
107
|
+
|
108
|
+
_this.props.onChange(_this.props.files.filter(function (_i, j) {
|
109
|
+
return j !== index;
|
110
|
+
}));
|
111
|
+
};
|
112
|
+
|
113
|
+
this.retryUpload = function (index) {
|
114
|
+
_this.deleteFile(index);
|
115
|
+
|
116
|
+
_this.handleFile([_this.props.files[index].file]);
|
117
|
+
};
|
118
|
+
|
119
|
+
this.handleSelect = function (e) {
|
120
|
+
if (e.target !== _this.fileRef.current) {
|
121
|
+
var _this$fileRef$current;
|
122
|
+
|
123
|
+
_this.props.onUploadClick && _this.props.onUploadClick();
|
124
|
+
_this.props.selectAdapter ? _this.props.selectAdapter().then(function (value) {
|
125
|
+
return _this.handleChange({
|
126
|
+
target: {
|
127
|
+
files: value.files
|
128
|
+
}
|
129
|
+
}, true);
|
130
|
+
}) : (_this$fileRef$current = _this.fileRef.current) == null ? void 0 : _this$fileRef$current.click();
|
131
|
+
}
|
132
|
+
};
|
133
|
+
|
134
|
+
this.handleClick = function (e, file, index) {
|
135
|
+
clearTimeout(_this.timeOutEvent);
|
136
|
+
|
137
|
+
if (_this.timeOutEvent !== 0) {
|
138
|
+
_this.props.onClick == null ? void 0 : _this.props.onClick(e, file, index);
|
139
|
+
}
|
140
|
+
};
|
141
|
+
|
142
|
+
this.handleTouchStart = function (e, image, index) {
|
143
|
+
_this.timeOutEvent = setTimeout(function () {
|
144
|
+
_this.timeOutEvent = 0;
|
145
|
+
_this.props.onLongPress == null ? void 0 : _this.props.onLongPress(e, image, index);
|
146
|
+
}, 750);
|
147
|
+
};
|
148
|
+
|
149
|
+
this.props = (0, _extends2.default)({}, props);
|
150
|
+
this.fileRef = fileRef;
|
151
|
+
this.cacheRef = cacheRef;
|
152
|
+
this.init();
|
153
|
+
}
|
154
|
+
|
155
|
+
var _proto = Upload.prototype;
|
156
|
+
|
157
|
+
_proto.init = function init() {
|
158
|
+
!this.props.files && (this.props.files = []);
|
159
|
+
!this.props.limit && (this.props.limit = 0);
|
160
|
+
!this.props.onChange && (this.props.onChange = function () {
|
161
|
+
return null;
|
162
|
+
});
|
163
|
+
} // 解析文件生成预览
|
164
|
+
;
|
165
|
+
|
166
|
+
return Upload;
|
167
|
+
}();
|
168
|
+
|
169
|
+
_exports.Upload = Upload;
|
170
|
+
|
171
|
+
var parseFile = function parseFile(file) {
|
172
|
+
return new _es6Promise.Promise(function (resolve, reject) {
|
173
|
+
if (file.url) {
|
174
|
+
resolve(file.url);
|
175
|
+
} else {
|
176
|
+
var reader = new FileReader();
|
177
|
+
|
178
|
+
reader.onload = function (e) {
|
179
|
+
var _e$target;
|
180
|
+
|
181
|
+
var dataURL = (_e$target = e.target) == null ? void 0 : _e$target.result;
|
182
|
+
|
183
|
+
if (!dataURL) {
|
184
|
+
reject(new Error('file parse error'));
|
185
|
+
}
|
186
|
+
|
187
|
+
resolve(dataURL);
|
188
|
+
};
|
189
|
+
|
190
|
+
reader.onerror = function () {
|
191
|
+
reject(new Error('file parse error'));
|
192
|
+
};
|
193
|
+
|
194
|
+
reader.readAsDataURL(file);
|
195
|
+
}
|
196
|
+
});
|
197
|
+
};
|
198
|
+
|
199
|
+
_exports.parseFile = parseFile;
|
200
|
+
});
|