@arco-design/mobile-react 2.20.0 → 2.21.2

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 (304) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.en-US.md +2 -2
  3. package/README.md +2 -2
  4. package/cjs/avatar/index.d.ts +1 -1
  5. package/cjs/avatar/index.js +1 -1
  6. package/cjs/badge/index.d.ts +1 -1
  7. package/cjs/badge/index.js +1 -1
  8. package/cjs/button/style/css/index.css +64 -64
  9. package/cjs/button/style/index.less +7 -5
  10. package/cjs/carousel/index.d.ts +1 -1
  11. package/cjs/carousel/index.js +1 -1
  12. package/cjs/cell/index.d.ts +1 -1
  13. package/cjs/cell/index.js +1 -1
  14. package/cjs/checkbox/index.d.ts +1 -1
  15. package/cjs/checkbox/index.js +1 -1
  16. package/cjs/collapse/index.d.ts +1 -1
  17. package/cjs/collapse/index.js +1 -1
  18. package/cjs/count-down/index.d.ts +1 -1
  19. package/cjs/count-down/index.js +1 -1
  20. package/cjs/date-picker/index.d.ts +1 -1
  21. package/cjs/date-picker/index.js +1 -1
  22. package/cjs/dropdown/dropdown.js +36 -20
  23. package/cjs/dropdown/style/css/index.css +3 -0
  24. package/cjs/dropdown/style/index.less +2 -0
  25. package/cjs/ellipsis/components/js-ellipsis.js +2 -3
  26. package/cjs/ellipsis/index.d.ts +1 -1
  27. package/cjs/ellipsis/index.js +3 -4
  28. package/cjs/image/index.d.ts +1 -1
  29. package/cjs/image/index.js +1 -1
  30. package/cjs/image-picker/index.d.ts +4 -175
  31. package/cjs/image-picker/index.js +41 -18
  32. package/cjs/image-picker/type.d.ts +174 -0
  33. package/cjs/image-picker/type.js +3 -0
  34. package/cjs/image-preview/index.d.ts +1 -1
  35. package/cjs/image-preview/index.js +1 -1
  36. package/cjs/index.d.ts +2 -0
  37. package/cjs/index.js +9 -1
  38. package/cjs/input/hooks.js +49 -8
  39. package/cjs/input/index.d.ts +1 -1
  40. package/cjs/input/index.js +1 -1
  41. package/cjs/input/props.d.ts +8 -2
  42. package/cjs/notice-bar/index.d.ts +1 -1
  43. package/cjs/notice-bar/index.js +1 -1
  44. package/cjs/picker/index.d.ts +1 -1
  45. package/cjs/picker/index.js +1 -1
  46. package/cjs/picker-view/index.d.ts +1 -1
  47. package/cjs/picker-view/index.js +1 -1
  48. package/cjs/popover/index.d.ts +1 -1
  49. package/cjs/popover/index.js +1 -1
  50. package/cjs/popup-swiper/index.js +3 -2
  51. package/cjs/radio/index.d.ts +1 -1
  52. package/cjs/radio/index.js +1 -1
  53. package/cjs/rate/index.d.ts +1 -1
  54. package/cjs/rate/index.js +1 -1
  55. package/cjs/search-bar/association.d.ts +3 -0
  56. package/cjs/search-bar/association.js +92 -0
  57. package/cjs/search-bar/cancel-button.d.ts +10 -0
  58. package/cjs/search-bar/cancel-button.js +41 -0
  59. package/cjs/search-bar/demo/style/css/mobile.css +5 -0
  60. package/cjs/search-bar/demo/style/mobile.less +9 -0
  61. package/cjs/search-bar/highlight.d.ts +12 -0
  62. package/cjs/search-bar/highlight.js +77 -0
  63. package/cjs/search-bar/index.d.ts +13 -0
  64. package/cjs/search-bar/index.js +231 -0
  65. package/cjs/search-bar/style/css/index.css +148 -0
  66. package/cjs/search-bar/style/css/index.d.ts +2 -0
  67. package/cjs/search-bar/style/css/index.js +5 -0
  68. package/cjs/search-bar/style/index.d.ts +2 -0
  69. package/cjs/search-bar/style/index.js +5 -0
  70. package/cjs/search-bar/style/index.less +111 -0
  71. package/cjs/search-bar/type.d.ts +163 -0
  72. package/cjs/search-bar/type.js +3 -0
  73. package/cjs/slider/index.d.ts +1 -1
  74. package/cjs/slider/index.js +1 -1
  75. package/cjs/steps/index.d.ts +1 -1
  76. package/cjs/steps/index.js +1 -1
  77. package/cjs/sticky/index.d.ts +1 -1
  78. package/cjs/style.d.ts +2 -0
  79. package/cjs/style.js +4 -0
  80. package/cjs/swipe-action/demo/style/css/mobile.css +5 -0
  81. package/cjs/swipe-action/demo/style/mobile.less +9 -0
  82. package/cjs/swipe-action/index.d.ts +12 -0
  83. package/cjs/swipe-action/index.js +337 -0
  84. package/cjs/swipe-action/item.d.ts +11 -0
  85. package/cjs/swipe-action/item.js +52 -0
  86. package/cjs/swipe-action/style/css/index.css +88 -0
  87. package/cjs/swipe-action/style/css/index.d.ts +2 -0
  88. package/cjs/swipe-action/style/css/index.js +5 -0
  89. package/cjs/swipe-action/style/index.d.ts +2 -0
  90. package/cjs/swipe-action/style/index.js +5 -0
  91. package/cjs/swipe-action/style/index.less +89 -0
  92. package/cjs/swipe-action/type.d.ts +123 -0
  93. package/cjs/swipe-action/type.js +3 -0
  94. package/cjs/switch/index.d.ts +1 -1
  95. package/cjs/switch/index.js +1 -1
  96. package/cjs/tabs/tab-pane.js +5 -1
  97. package/cjs/tag/index.d.ts +1 -1
  98. package/cjs/tag/index.js +1 -1
  99. package/cjs/textarea/index.d.ts +1 -1
  100. package/cjs/textarea/index.js +1 -1
  101. package/dist/index.js +7394 -6570
  102. package/dist/index.min.js +6 -6
  103. package/dist/style.css +267 -64
  104. package/dist/style.min.css +1 -1
  105. package/esm/avatar/index.d.ts +1 -1
  106. package/esm/avatar/index.js +1 -1
  107. package/esm/badge/index.d.ts +1 -1
  108. package/esm/badge/index.js +1 -1
  109. package/esm/button/style/css/index.css +64 -64
  110. package/esm/button/style/index.less +7 -5
  111. package/esm/carousel/index.d.ts +1 -1
  112. package/esm/carousel/index.js +1 -1
  113. package/esm/cell/index.d.ts +1 -1
  114. package/esm/cell/index.js +1 -1
  115. package/esm/checkbox/index.d.ts +1 -1
  116. package/esm/checkbox/index.js +1 -1
  117. package/esm/collapse/index.d.ts +1 -1
  118. package/esm/collapse/index.js +1 -1
  119. package/esm/count-down/index.d.ts +1 -1
  120. package/esm/count-down/index.js +1 -1
  121. package/esm/date-picker/index.d.ts +1 -1
  122. package/esm/date-picker/index.js +1 -1
  123. package/esm/dropdown/dropdown.js +36 -20
  124. package/esm/dropdown/style/css/index.css +3 -0
  125. package/esm/dropdown/style/index.less +2 -0
  126. package/esm/ellipsis/components/js-ellipsis.js +2 -3
  127. package/esm/ellipsis/index.d.ts +1 -1
  128. package/esm/ellipsis/index.js +3 -4
  129. package/esm/image/index.d.ts +1 -1
  130. package/esm/image/index.js +1 -1
  131. package/esm/image-picker/index.d.ts +4 -175
  132. package/esm/image-picker/index.js +30 -17
  133. package/esm/image-picker/type.d.ts +174 -0
  134. package/esm/image-picker/type.js +1 -0
  135. package/esm/image-preview/index.d.ts +1 -1
  136. package/esm/image-preview/index.js +1 -1
  137. package/esm/index.d.ts +2 -0
  138. package/esm/index.js +2 -0
  139. package/esm/input/hooks.js +49 -8
  140. package/esm/input/index.d.ts +1 -1
  141. package/esm/input/index.js +1 -1
  142. package/esm/input/props.d.ts +8 -2
  143. package/esm/notice-bar/index.d.ts +1 -1
  144. package/esm/notice-bar/index.js +1 -1
  145. package/esm/picker/index.d.ts +1 -1
  146. package/esm/picker/index.js +1 -1
  147. package/esm/picker-view/index.d.ts +1 -1
  148. package/esm/picker-view/index.js +1 -1
  149. package/esm/popover/index.d.ts +1 -1
  150. package/esm/popover/index.js +1 -1
  151. package/esm/popup-swiper/index.js +3 -2
  152. package/esm/radio/index.d.ts +1 -1
  153. package/esm/radio/index.js +1 -1
  154. package/esm/rate/index.d.ts +1 -1
  155. package/esm/rate/index.js +1 -1
  156. package/esm/search-bar/association.d.ts +3 -0
  157. package/esm/search-bar/association.js +82 -0
  158. package/esm/search-bar/cancel-button.d.ts +10 -0
  159. package/esm/search-bar/cancel-button.js +30 -0
  160. package/esm/search-bar/demo/style/css/mobile.css +5 -0
  161. package/esm/search-bar/demo/style/mobile.less +9 -0
  162. package/esm/search-bar/highlight.d.ts +12 -0
  163. package/esm/search-bar/highlight.js +66 -0
  164. package/esm/search-bar/index.d.ts +13 -0
  165. package/esm/search-bar/index.js +212 -0
  166. package/esm/search-bar/style/css/index.css +148 -0
  167. package/esm/search-bar/style/css/index.d.ts +2 -0
  168. package/esm/search-bar/style/css/index.js +2 -0
  169. package/esm/search-bar/style/index.d.ts +2 -0
  170. package/esm/search-bar/style/index.js +2 -0
  171. package/esm/search-bar/style/index.less +111 -0
  172. package/esm/search-bar/type.d.ts +163 -0
  173. package/esm/search-bar/type.js +1 -0
  174. package/esm/slider/index.d.ts +1 -1
  175. package/esm/slider/index.js +1 -1
  176. package/esm/steps/index.d.ts +1 -1
  177. package/esm/steps/index.js +1 -1
  178. package/esm/sticky/index.d.ts +1 -1
  179. package/esm/style.d.ts +2 -0
  180. package/esm/style.js +2 -0
  181. package/esm/swipe-action/demo/style/css/mobile.css +5 -0
  182. package/esm/swipe-action/demo/style/mobile.less +9 -0
  183. package/esm/swipe-action/index.d.ts +12 -0
  184. package/esm/swipe-action/index.js +320 -0
  185. package/esm/swipe-action/item.d.ts +11 -0
  186. package/esm/swipe-action/item.js +42 -0
  187. package/esm/swipe-action/style/css/index.css +88 -0
  188. package/esm/swipe-action/style/css/index.d.ts +2 -0
  189. package/esm/swipe-action/style/css/index.js +2 -0
  190. package/esm/swipe-action/style/index.d.ts +2 -0
  191. package/esm/swipe-action/style/index.js +2 -0
  192. package/esm/swipe-action/style/index.less +89 -0
  193. package/esm/swipe-action/type.d.ts +123 -0
  194. package/esm/swipe-action/type.js +1 -0
  195. package/esm/switch/index.d.ts +1 -1
  196. package/esm/switch/index.js +1 -1
  197. package/esm/tabs/tab-pane.js +5 -1
  198. package/esm/tag/index.d.ts +1 -1
  199. package/esm/tag/index.js +1 -1
  200. package/esm/textarea/index.d.ts +1 -1
  201. package/esm/textarea/index.js +1 -1
  202. package/package.json +3 -3
  203. package/tokens/app/arcodesign/default/css-variables.less +34 -0
  204. package/tokens/app/arcodesign/default/index.d.ts +34 -0
  205. package/tokens/app/arcodesign/default/index.js +34 -0
  206. package/tokens/app/arcodesign/default/index.json +398 -0
  207. package/tokens/app/arcodesign/default/index.less +34 -0
  208. package/umd/avatar/index.d.ts +1 -1
  209. package/umd/avatar/index.js +1 -1
  210. package/umd/badge/index.d.ts +1 -1
  211. package/umd/badge/index.js +1 -1
  212. package/umd/button/style/css/index.css +64 -64
  213. package/umd/button/style/index.less +7 -5
  214. package/umd/carousel/index.d.ts +1 -1
  215. package/umd/carousel/index.js +1 -1
  216. package/umd/cell/index.d.ts +1 -1
  217. package/umd/cell/index.js +1 -1
  218. package/umd/checkbox/index.d.ts +1 -1
  219. package/umd/checkbox/index.js +1 -1
  220. package/umd/collapse/index.d.ts +1 -1
  221. package/umd/collapse/index.js +1 -1
  222. package/umd/count-down/index.d.ts +1 -1
  223. package/umd/count-down/index.js +1 -1
  224. package/umd/date-picker/index.d.ts +1 -1
  225. package/umd/date-picker/index.js +1 -1
  226. package/umd/dropdown/dropdown.js +36 -20
  227. package/umd/dropdown/style/css/index.css +3 -0
  228. package/umd/dropdown/style/index.less +2 -0
  229. package/umd/ellipsis/components/js-ellipsis.js +2 -3
  230. package/umd/ellipsis/index.d.ts +1 -1
  231. package/umd/ellipsis/index.js +3 -4
  232. package/umd/image/index.d.ts +1 -1
  233. package/umd/image/index.js +1 -1
  234. package/umd/image-picker/index.d.ts +4 -175
  235. package/umd/image-picker/index.js +40 -22
  236. package/umd/image-picker/type.d.ts +174 -0
  237. package/umd/image-picker/type.js +17 -0
  238. package/umd/image-preview/index.d.ts +1 -1
  239. package/umd/image-preview/index.js +1 -1
  240. package/umd/index.d.ts +2 -0
  241. package/umd/index.js +9 -5
  242. package/umd/input/hooks.js +48 -7
  243. package/umd/input/index.d.ts +1 -1
  244. package/umd/input/index.js +1 -1
  245. package/umd/input/props.d.ts +8 -2
  246. package/umd/notice-bar/index.d.ts +1 -1
  247. package/umd/notice-bar/index.js +1 -1
  248. package/umd/picker/index.d.ts +1 -1
  249. package/umd/picker/index.js +1 -1
  250. package/umd/picker-view/index.d.ts +1 -1
  251. package/umd/picker-view/index.js +1 -1
  252. package/umd/popover/index.d.ts +1 -1
  253. package/umd/popover/index.js +1 -1
  254. package/umd/popup-swiper/index.js +3 -2
  255. package/umd/radio/index.d.ts +1 -1
  256. package/umd/radio/index.js +1 -1
  257. package/umd/rate/index.d.ts +1 -1
  258. package/umd/rate/index.js +1 -1
  259. package/umd/search-bar/association.d.ts +3 -0
  260. package/umd/search-bar/association.js +101 -0
  261. package/umd/search-bar/cancel-button.d.ts +10 -0
  262. package/umd/search-bar/cancel-button.js +52 -0
  263. package/umd/search-bar/demo/style/css/mobile.css +5 -0
  264. package/umd/search-bar/demo/style/mobile.less +9 -0
  265. package/umd/search-bar/highlight.d.ts +12 -0
  266. package/umd/search-bar/highlight.js +87 -0
  267. package/umd/search-bar/index.d.ts +13 -0
  268. package/umd/search-bar/index.js +229 -0
  269. package/umd/search-bar/style/css/index.css +148 -0
  270. package/umd/search-bar/style/css/index.d.ts +2 -0
  271. package/umd/search-bar/style/css/index.js +15 -0
  272. package/umd/search-bar/style/index.d.ts +2 -0
  273. package/umd/search-bar/style/index.js +15 -0
  274. package/umd/search-bar/style/index.less +111 -0
  275. package/umd/search-bar/type.d.ts +163 -0
  276. package/umd/search-bar/type.js +17 -0
  277. package/umd/slider/index.d.ts +1 -1
  278. package/umd/slider/index.js +1 -1
  279. package/umd/steps/index.d.ts +1 -1
  280. package/umd/steps/index.js +1 -1
  281. package/umd/sticky/index.d.ts +1 -1
  282. package/umd/style.d.ts +2 -0
  283. package/umd/style.js +4 -4
  284. package/umd/swipe-action/demo/style/css/mobile.css +5 -0
  285. package/umd/swipe-action/demo/style/mobile.less +9 -0
  286. package/umd/swipe-action/index.d.ts +12 -0
  287. package/umd/swipe-action/index.js +342 -0
  288. package/umd/swipe-action/item.d.ts +11 -0
  289. package/umd/swipe-action/item.js +62 -0
  290. package/umd/swipe-action/style/css/index.css +88 -0
  291. package/umd/swipe-action/style/css/index.d.ts +2 -0
  292. package/umd/swipe-action/style/css/index.js +15 -0
  293. package/umd/swipe-action/style/index.d.ts +2 -0
  294. package/umd/swipe-action/style/index.js +15 -0
  295. package/umd/swipe-action/style/index.less +89 -0
  296. package/umd/swipe-action/type.d.ts +123 -0
  297. package/umd/swipe-action/type.js +17 -0
  298. package/umd/switch/index.d.ts +1 -1
  299. package/umd/switch/index.js +1 -1
  300. package/umd/tabs/tab-pane.js +5 -1
  301. package/umd/tag/index.d.ts +1 -1
  302. package/umd/tag/index.js +1 -1
  303. package/umd/textarea/index.d.ts +1 -1
  304. package/umd/textarea/index.js +1 -1
@@ -0,0 +1,320 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React, { useRef, forwardRef, useImperativeHandle, useEffect, useMemo, useContext, useState } from 'react';
3
+ import { nextTick, cls } from '@arco-design/mobile-utils';
4
+ import { GlobalContext } from '../context-provider';
5
+ import RenderAction from './item';
6
+ import { getStyleWithVendor, useLatestRef, useRefState } from '../_helpers';
7
+ /**
8
+ * 滑动操作组件,左右滑动拉出菜单栏
9
+ * @en SwipeAction component, slide left and right to pull out the menu bar
10
+ * @type 反馈
11
+ * @type_en FeedBack
12
+ * @name 滑动操作
13
+ * @name_en SwipeAction
14
+ */
15
+
16
+ var SwipeAction = /*#__PURE__*/forwardRef(function (props, ref) {
17
+ var _props$className = props.className,
18
+ className = _props$className === void 0 ? '' : _props$className,
19
+ style = props.style,
20
+ children = props.children,
21
+ leftActions = props.leftActions,
22
+ rightActions = props.rightActions,
23
+ _props$disabled = props.disabled,
24
+ disabled = _props$disabled === void 0 ? false : _props$disabled,
25
+ _props$threshold = props.threshold,
26
+ threshold = _props$threshold === void 0 ? 0.15 : _props$threshold,
27
+ closeOnTouchOutside = props.closeOnTouchOutside,
28
+ _props$transitionDura = props.transitionDuration,
29
+ transitionDuration = _props$transitionDura === void 0 ? 300 : _props$transitionDura,
30
+ _props$dampRate = props.dampRate,
31
+ dampRate = _props$dampRate === void 0 ? 15 : _props$dampRate,
32
+ _props$openStyleType = props.openStyleType,
33
+ openStyleType = _props$openStyleType === void 0 ? 'layer' : _props$openStyleType,
34
+ onClose = props.onClose,
35
+ onOpen = props.onOpen;
36
+ var domRef = useRef(null);
37
+ var leftRef = useRef(null);
38
+ var rightRef = useRef(null);
39
+ var isOpen = useRef(false);
40
+ var leftMenuWidthRef = useRef(0);
41
+
42
+ var _useState = useState([]),
43
+ leftMenuWidthArr = _useState[0],
44
+ setLeftMenuWidthArr = _useState[1];
45
+
46
+ var rightMenuWidthRef = useRef(0);
47
+
48
+ var _useState2 = useState([]),
49
+ rightMenuWidthArr = _useState2[0],
50
+ setRightMenuWidthArr = _useState2[1];
51
+
52
+ var dampRateRef = useLatestRef(dampRate);
53
+ var forbidClick = useRef(false);
54
+
55
+ var _useRefState = useRefState(false),
56
+ moving = _useRefState[0],
57
+ movingRef = _useRefState[1],
58
+ setMoving = _useRefState[2];
59
+
60
+ var _useRefState2 = useRefState(0),
61
+ offset = _useRefState2[0],
62
+ offsetRef = _useRefState2[1],
63
+ setOffset = _useRefState2[2];
64
+
65
+ var _useContext = useContext(GlobalContext),
66
+ prefixCls = _useContext.prefixCls;
67
+
68
+ var startRef = useRef(0);
69
+ var startX = useRef(0);
70
+ var slideX = useRef(0);
71
+ var isLayer = openStyleType === 'layer';
72
+ var transitionStyle = useMemo(function () {
73
+ return getStyleWithVendor({
74
+ transitionDuration: moving ? '0ms' : transitionDuration + "ms"
75
+ });
76
+ }, [moving, transitionDuration]);
77
+
78
+ function resetMoveData() {
79
+ startX.current = 0;
80
+ slideX.current = 0;
81
+ }
82
+
83
+ function getMenuCurrentWidth(a, min, max) {
84
+ var buffer = Math.abs(a) / dampRateRef.current;
85
+ return Math.min(Math.max(a, min - buffer), max + buffer);
86
+ }
87
+
88
+ function touchstart(e) {
89
+ startRef.current = offsetRef.current;
90
+ resetMoveData();
91
+ startX.current = e.touches[0].pageX;
92
+ }
93
+
94
+ function touchmove(e) {
95
+ e.preventDefault();
96
+ slideX.current = e.touches[0].pageX - startX.current;
97
+ forbidClick.current = true;
98
+ setMoving(true);
99
+ setOffset(getMenuCurrentWidth(slideX.current + startRef.current, -rightMenuWidthRef.current, leftMenuWidthRef.current));
100
+ }
101
+
102
+ function touchend() {
103
+ if (movingRef.current) {
104
+ var currentMenu = offsetRef.current > 0 ? 'left' : 'right';
105
+ changeMenu(currentMenu);
106
+ setMoving(false);
107
+ nextTick(function () {
108
+ forbidClick.current = false;
109
+ });
110
+ }
111
+ }
112
+
113
+ function changeMenu(dir) {
114
+ var cookedThreshold = isOpen.current ? 1 - threshold : threshold;
115
+ var width = dir === 'left' ? leftMenuWidthRef.current : rightMenuWidthRef.current;
116
+
117
+ if (width && Math.abs(offsetRef.current) > width * cookedThreshold) {
118
+ open(dir);
119
+ } else {
120
+ close(dir);
121
+ }
122
+ }
123
+
124
+ function getWidthByRef(widthRef) {
125
+ if (!widthRef.current) {
126
+ return {
127
+ totalWidth: 0,
128
+ widthArr: []
129
+ };
130
+ }
131
+
132
+ var totalWidth = 0;
133
+ var widthArr = [];
134
+ var allEle = widthRef.current.getElementsByClassName(prefixCls + "-swipe-action-menu-action-info-container");
135
+ Array.prototype.forEach.call(allEle, function (ele) {
136
+ var _ele$getBoundingClien;
137
+
138
+ var w = (_ele$getBoundingClien = ele.getBoundingClientRect().width) != null ? _ele$getBoundingClien : 0;
139
+ totalWidth += w;
140
+ widthArr.push(w);
141
+ });
142
+ return {
143
+ totalWidth: totalWidth,
144
+ widthArr: widthArr
145
+ };
146
+ }
147
+
148
+ useEffect(function () {
149
+ var container = domRef.current;
150
+
151
+ if (!disabled && container) {
152
+ container.addEventListener('touchstart', touchstart);
153
+ container.addEventListener('touchmove', touchmove);
154
+ container.addEventListener('touchend', touchend);
155
+ }
156
+
157
+ return function () {
158
+ if (!disabled && container) {
159
+ container.removeEventListener('touchstart', touchstart);
160
+ container.removeEventListener('touchmove', touchmove);
161
+ container.removeEventListener('touchend', touchend);
162
+ }
163
+ };
164
+ }, [disabled]); // 获取左右菜单的宽度
165
+ // @en Get the width of the left and right menu
166
+
167
+ useEffect(function () {
168
+ var _getWidthByRef = getWidthByRef(leftRef),
169
+ leftTotalWidth = _getWidthByRef.totalWidth,
170
+ leftWidthArr = _getWidthByRef.widthArr;
171
+
172
+ leftMenuWidthRef.current = leftTotalWidth;
173
+ setLeftMenuWidthArr(leftWidthArr);
174
+
175
+ var _getWidthByRef2 = getWidthByRef(rightRef),
176
+ rightTotalWidth = _getWidthByRef2.totalWidth,
177
+ rightWidthArr = _getWidthByRef2.widthArr;
178
+
179
+ rightMenuWidthRef.current = rightTotalWidth;
180
+ setRightMenuWidthArr(rightWidthArr);
181
+ }, [leftActions, rightActions]); // 点击外部区域事件
182
+ // @en Event when clicking outside of the element
183
+
184
+ useEffect(function () {
185
+ var handle = function handle(e) {
186
+ var _domRef$current;
187
+
188
+ if (!((_domRef$current = domRef.current) != null && _domRef$current.contains(e.target)) && isOpen.current) {
189
+ close();
190
+ }
191
+ };
192
+
193
+ closeOnTouchOutside && document.addEventListener('touchstart', handle);
194
+ return function () {
195
+ closeOnTouchOutside && document.removeEventListener('touchstart', handle);
196
+ };
197
+ }, [closeOnTouchOutside]);
198
+ useImperativeHandle(ref, function () {
199
+ return {
200
+ dom: domRef.current,
201
+ close: close,
202
+ open: open
203
+ };
204
+ });
205
+
206
+ function close(dir) {
207
+ setOffset(0);
208
+
209
+ if (isOpen.current) {
210
+ isOpen.current = false;
211
+
212
+ if (!dir && offsetRef.current !== 0) {
213
+ var noDir = offsetRef.current > 0 ? 'left' : 'right';
214
+ handleClose(noDir);
215
+ return;
216
+ }
217
+
218
+ handleClose(dir);
219
+ }
220
+ }
221
+
222
+ function open(dir) {
223
+ if (dir === void 0) {
224
+ dir = 'right';
225
+ }
226
+
227
+ if (!isOpen.current) {
228
+ isOpen.current = true;
229
+ handleOpen(dir);
230
+ }
231
+
232
+ setOffset(dir === 'left' ? leftMenuWidthRef.current : -rightMenuWidthRef.current);
233
+ }
234
+
235
+ function handleOpen(dir) {
236
+ setTimeout(function () {
237
+ onOpen == null ? void 0 : onOpen(dir);
238
+ }, transitionDuration);
239
+ }
240
+
241
+ function handleClose(dir) {
242
+ setTimeout(function () {
243
+ onClose == null ? void 0 : onClose(dir);
244
+ }, transitionDuration);
245
+ }
246
+
247
+ function actionClick(e) {
248
+ var _leftRef$current, _rightRef$current;
249
+
250
+ if (isOpen.current && !forbidClick.current && !((_leftRef$current = leftRef.current) != null && _leftRef$current.contains(e.target)) && !((_rightRef$current = rightRef.current) != null && _rightRef$current.contains(e.target))) {
251
+ close();
252
+ }
253
+ }
254
+
255
+ function getActionRightByIndex(index) {
256
+ var preWidth = leftMenuWidthArr.slice(index + 1).reduce(function (acc, cur) {
257
+ return acc + cur;
258
+ }, 0);
259
+ return (preWidth / leftMenuWidthRef.current || 0) * 100 + "%";
260
+ }
261
+
262
+ function getActionLeftByIndex(index) {
263
+ var preWidth = rightMenuWidthArr.slice(0, index).reduce(function (acc, cur) {
264
+ return acc + cur;
265
+ }, 0);
266
+ return (preWidth / rightMenuWidthRef.current || 0) * 100 + "%";
267
+ }
268
+
269
+ return /*#__PURE__*/React.createElement("div", {
270
+ className: cls(prefixCls + "-swipe-action", className, offset === 0 ? 'action-close' : 'action-open'),
271
+ style: getStyleWithVendor(_extends({}, style || {}, transitionStyle, {
272
+ transform: "translateX(" + offset + "px)"
273
+ })),
274
+ ref: domRef,
275
+ onClick: actionClick
276
+ }, /*#__PURE__*/React.createElement("div", {
277
+ className: cls(prefixCls + "-swipe-action-menu-left", prefixCls + "-swipe-action-menu", offset > 0 ? 'action-open' : 'action-close'),
278
+ ref: leftRef,
279
+ style: isLayer && offset >= 0 ? _extends({
280
+ width: offset
281
+ }, transitionStyle) : {}
282
+ }, leftActions == null ? void 0 : leftActions.map(function (action, index) {
283
+ return /*#__PURE__*/React.createElement(RenderAction, {
284
+ action: _extends({}, action || {}, {
285
+ style: _extends({}, isLayer ? {
286
+ right: getActionRightByIndex(index)
287
+ } : {}, action.style || {}),
288
+ className: cls(action.className, "open-style-" + openStyleType)
289
+ }),
290
+ prefixCls: prefixCls + "-swipe-action-menu-action",
291
+ index: leftActions.length - index,
292
+ type: "left",
293
+ close: close,
294
+ key: index
295
+ });
296
+ })), /*#__PURE__*/React.createElement("div", {
297
+ className: prefixCls + "-swipe-action-content"
298
+ }, children), /*#__PURE__*/React.createElement("div", {
299
+ className: cls(prefixCls + "-swipe-action-menu-right", prefixCls + "-swipe-action-menu", offset < 0 ? 'action-open' : 'action-close'),
300
+ ref: rightRef,
301
+ style: isLayer && offset <= 0 ? _extends({
302
+ width: -1 * offset
303
+ }, transitionStyle) : {}
304
+ }, rightActions == null ? void 0 : rightActions.map(function (action, index) {
305
+ return /*#__PURE__*/React.createElement(RenderAction, {
306
+ action: _extends({}, action || {}, {
307
+ style: _extends({}, isLayer ? {
308
+ left: getActionLeftByIndex(index)
309
+ } : {}, action.style || {}),
310
+ className: cls(action.className, "open-style-" + openStyleType)
311
+ }),
312
+ prefixCls: prefixCls + "-swipe-action-menu-action",
313
+ index: index + 1,
314
+ type: "right",
315
+ close: close,
316
+ key: index
317
+ });
318
+ })));
319
+ });
320
+ export default SwipeAction;
@@ -0,0 +1,11 @@
1
+ /// <reference types="react" />
2
+ import { Action } from './type';
3
+ interface IProps {
4
+ action: Action;
5
+ prefixCls: string;
6
+ index: number;
7
+ type: 'left' | 'right';
8
+ close: () => void;
9
+ }
10
+ export default function renderAction({ action, prefixCls, index, type, close }: IProps): JSX.Element;
11
+ export {};
@@ -0,0 +1,42 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React from 'react';
3
+ import { cls } from '@arco-design/mobile-utils';
4
+ export default function renderAction(_ref) {
5
+ var action = _ref.action,
6
+ prefixCls = _ref.prefixCls,
7
+ index = _ref.index,
8
+ type = _ref.type,
9
+ close = _ref.close;
10
+ var text = action.text,
11
+ actionStyle = action.style,
12
+ className = action.className,
13
+ onClick = action.onClick,
14
+ icon = action.icon,
15
+ children = action.children;
16
+
17
+ function click() {
18
+ var result = (onClick == null ? void 0 : onClick()) || null;
19
+
20
+ if (!result || typeof result === 'boolean') {
21
+ !result && close();
22
+ } else if (result && result.then) {
23
+ result.then(function (res) {
24
+ return !res && close();
25
+ });
26
+ }
27
+ }
28
+
29
+ return /*#__PURE__*/React.createElement("div", {
30
+ className: cls(prefixCls + "-" + type + " " + prefixCls + "-info-container", className),
31
+ style: _extends({
32
+ zIndex: index
33
+ }, actionStyle),
34
+ onClick: click
35
+ }, children || /*#__PURE__*/React.createElement("div", {
36
+ className: prefixCls + "-info"
37
+ }, icon ? /*#__PURE__*/React.createElement("div", {
38
+ className: prefixCls + "-info-icon"
39
+ }, icon) : null, text ? /*#__PURE__*/React.createElement("div", {
40
+ className: prefixCls + "-info-text"
41
+ }, text) : null));
42
+ }
@@ -0,0 +1,88 @@
1
+ .arco-swipe-action {
2
+ position: relative;
3
+ -webkit-transition: -webkit-transform 0s;
4
+ transition: -webkit-transform 0s;
5
+ transition: transform 0s;
6
+ transition: transform 0s, -webkit-transform 0s;
7
+ font-size: 0.32rem ;
8
+ }
9
+ .arco-swipe-action.action-open,
10
+ .arco-swipe-action-menu.action-open {
11
+ -webkit-transition-timing-function: cubic-bezier(0.2, 0.8, 0.32, 1.28) ;
12
+ transition-timing-function: cubic-bezier(0.2, 0.8, 0.32, 1.28) ;
13
+ }
14
+ .arco-swipe-action.action-close,
15
+ .arco-swipe-action-menu.action-close {
16
+ -webkit-transition-timing-function: cubic-bezier(0.34, 0.69, 0.1, 1) ;
17
+ transition-timing-function: cubic-bezier(0.34, 0.69, 0.1, 1) ;
18
+ }
19
+ .arco-swipe-action-content {
20
+ width: 100%;
21
+ }
22
+ .arco-swipe-action-menu {
23
+ display: -webkit-box;
24
+ display: -webkit-flex;
25
+ display: flex;
26
+ position: absolute;
27
+ height: 100%;
28
+ overflow: visible;
29
+ -webkit-flex-wrap: nowrap;
30
+ flex-wrap: nowrap;
31
+ top: 0;
32
+ -webkit-transition: width 0s;
33
+ transition: width 0s;
34
+ }
35
+ .arco-swipe-action-menu-left {
36
+ right: 100%;
37
+ }
38
+ .arco-swipe-action-menu-right {
39
+ left: 100%;
40
+ }
41
+ .arco-swipe-action-menu-action-left::after {
42
+ right: 100%;
43
+ margin-right: -1PX;
44
+ }
45
+ .arco-swipe-action-menu-action-right::after {
46
+ left: 100%;
47
+ margin-left: -1PX;
48
+ }
49
+ .arco-swipe-action-menu-action-info {
50
+ height: 100%;
51
+ padding: 0.32rem ;
52
+ display: -webkit-box;
53
+ display: -webkit-flex;
54
+ display: flex;
55
+ -webkit-box-pack: center;
56
+ -webkit-justify-content: center;
57
+ justify-content: center;
58
+ -webkit-box-align: center;
59
+ -webkit-align-items: center;
60
+ align-items: center;
61
+ }
62
+ .arco-swipe-action-menu-action-info-container {
63
+ position: relative;
64
+ }
65
+ .arco-swipe-action-menu-action-info-container.open-style-layer {
66
+ position: absolute;
67
+ height: 100%;
68
+ }
69
+ .arco-swipe-action-menu-action-info-container::after {
70
+ content: " ";
71
+ position: absolute;
72
+ top: 0;
73
+ height: 100%;
74
+ width: 0.6rem ;
75
+ background: inherit;
76
+ }
77
+ .arco-swipe-action-menu-action-info-text {
78
+ white-space: nowrap;
79
+ font-size: 0.32rem ;
80
+ line-height: 0.44rem ;
81
+ color: #ffffff ;
82
+ }
83
+ .arco-swipe-action-menu-action-info-icon {
84
+ margin-right: 0.08rem ;
85
+ height: 0.4rem ;
86
+ width: 0.4rem ;
87
+ color: #ffffff ;
88
+ }
@@ -0,0 +1,2 @@
1
+ import '../../../../style/css/public.css';
2
+ import './index.css';
@@ -0,0 +1,2 @@
1
+ import '../../../../style/css/public.css';
2
+ import './index.css';
@@ -0,0 +1,2 @@
1
+ import '../../../style/public.less';
2
+ import './index.less';
@@ -0,0 +1,2 @@
1
+ import '../../../style/public.less';
2
+ import './index.less';
@@ -0,0 +1,89 @@
1
+ @import '../../../style/mixin.less';
2
+
3
+ .@{prefix}-swipe-action {
4
+ position: relative;
5
+ transition: transform 0s;
6
+ .use-var(font-size,swipe-action-text-font-size);
7
+
8
+ &, &-menu {
9
+ &.action-open {
10
+ .use-var(transition-timing-function, swipe-action-open-transition);
11
+ }
12
+ &.action-close {
13
+ .use-var(transition-timing-function, swipe-action-close-transition);
14
+ }
15
+ }
16
+
17
+ &-content {
18
+ width: 100%;
19
+ }
20
+
21
+ &-menu {
22
+ display: flex;
23
+ position: absolute;
24
+ height: 100%;
25
+ overflow: visible;
26
+ flex-wrap: nowrap;
27
+ top: 0;
28
+ transition: width 0s;
29
+
30
+ &-left {
31
+ right: 100%;
32
+ }
33
+
34
+ &-right {
35
+ left: 100%;
36
+ }
37
+ &-action {
38
+ &-left {
39
+ &::after {
40
+ right: 100%;
41
+ margin-right: -1PX;
42
+ }
43
+ }
44
+ &-right {
45
+ &::after {
46
+ left: 100%;
47
+ margin-left: -1PX;
48
+ }
49
+ }
50
+ &-info {
51
+ height: 100%;
52
+ .use-var(padding, swipe-action-info-padding);
53
+ display: flex;
54
+ justify-content: center;
55
+ align-items: center;
56
+
57
+ &-container {
58
+ position: relative;
59
+ &.open-style-layer {
60
+ position: absolute;
61
+ height: 100%;
62
+ }
63
+ &::after {
64
+ content: " ";
65
+ position: absolute;
66
+ top: 0;
67
+ height: 100%;
68
+ .use-var(width, swipe-action-info-bounce-buffer);
69
+ background: inherit;
70
+ }
71
+ }
72
+
73
+ &-text {
74
+ white-space: nowrap;
75
+ .use-var(font-size,swipe-action-text-font-size);
76
+ .use-var(line-height,swipe-action-text-line-height);
77
+ .use-var(color, swipe-action-text-color);
78
+ }
79
+
80
+ &-icon {
81
+ .use-var(margin-right,swipe-action-icon-margin-right);
82
+ .use-var(height, swipe-action-icon-height);
83
+ .use-var(width, swipe-action-icon-width);
84
+ .use-var(color, swipe-action-text-color);
85
+ }
86
+ }
87
+ }
88
+ }
89
+ }
@@ -0,0 +1,123 @@
1
+ import { CSSProperties, ReactNode } from 'react';
2
+ export interface SwipeActionProps {
3
+ /**
4
+ * 自定义类名
5
+ * @en Custom classname
6
+ */
7
+ className?: string;
8
+ /**
9
+ * 自定义样式
10
+ * @en Custom style
11
+ */
12
+ style?: React.CSSProperties;
13
+ /**
14
+ * 子元素
15
+ * @en Inner Content
16
+ */
17
+ children: ReactNode;
18
+ /**
19
+ * 右侧菜单
20
+ * @en right Menu
21
+ */
22
+ rightActions?: Action[];
23
+ /**
24
+ * 左侧菜单
25
+ * @en left Menu
26
+ */
27
+ leftActions?: Action[];
28
+ /**
29
+ * 点击外部是否自动归位
30
+ * @en Click outside for auto return
31
+ * @default false
32
+ */
33
+ closeOnTouchOutside?: boolean;
34
+ /**
35
+ * 菜单滑出多少距离后自动滑出/关闭的系数 范围 0-1
36
+ * @en How far the menu slides off/off automatically ranges from 0 to 1
37
+ * @default 0.15
38
+ */
39
+ threshold?: number;
40
+ /**
41
+ * 是否禁用
42
+ * @en Whether to disable
43
+ * @default false
44
+ */
45
+ disabled?: boolean;
46
+ /**
47
+ * 动画的执行时间 (单位ms)
48
+ * @en Animation execution time in ms
49
+ * @default 300
50
+ */
51
+ transitionDuration?: number;
52
+ /**
53
+ * 阻尼系数
54
+ * @en Damping coefficient
55
+ * @default 15
56
+ */
57
+ dampRate?: number;
58
+ /**
59
+ * 菜单滑入时的样式类型,layer - 分层堆叠进入,push - 直接依次推入
60
+ * @en The style type when the menu slides in. layer - the menu is stacked in layers; push - the menu is pushed directly in sequence
61
+ * @default "layer"
62
+ */
63
+ openStyleType?: 'layer' | 'push';
64
+ /**
65
+ * 滑出动画结束后触发
66
+ * @en Triggered when the slide out animation ends
67
+ */
68
+ onOpen?: (direction: 'left' | 'right') => void;
69
+ /**
70
+ * 滑入动画结束后触发
71
+ * @en Triggered when the slide in animation ends
72
+ */
73
+ onClose?: (direction: 'left' | 'right') => void;
74
+ }
75
+ export interface SwipeActionRef {
76
+ /**
77
+ * 最外层元素 DOM
78
+ * @en The outermost element DOM
79
+ */
80
+ dom: HTMLDivElement | null;
81
+ /**
82
+ * 使滑动条归位
83
+ * @en Bring the slider back into position
84
+ */
85
+ close: () => void;
86
+ /**
87
+ * 打开滑动条,默认打开右边
88
+ * @en Open the slider, the right by default
89
+ */
90
+ open: (direction: 'left' | 'right') => void;
91
+ }
92
+ export interface Action {
93
+ /**
94
+ * 自定义内容
95
+ * @en Custom Content
96
+ */
97
+ text?: ReactNode;
98
+ /**
99
+ * 自定义图标
100
+ * @en Custom Icon
101
+ */
102
+ icon?: ReactNode;
103
+ /**
104
+ * 自定义样式
105
+ * @en Custom Style
106
+ */
107
+ style?: CSSProperties;
108
+ /**
109
+ * 自定义类名
110
+ * @en Custom Style
111
+ */
112
+ className?: string;
113
+ /**
114
+ * 点击事件 返回true可以阻止菜单的关闭
115
+ * @en Clicking the event to return true prevents the menu from closing
116
+ */
117
+ onClick?: () => (void | boolean) | Promise<void | boolean>;
118
+ /**
119
+ * 子元素没有text或者icon的传递children
120
+ * @en Child elements do not pass children with text or icon
121
+ */
122
+ children?: ReactNode;
123
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -93,7 +93,7 @@ export interface SwitchRef {
93
93
  /**
94
94
  * 开关组件,支持点击和滑动触发开关动作。
95
95
  * @en A switch component that supports click and slide trigger switch actions.
96
- * @type 数据输入
96
+ * @type 数据录入
97
97
  * @type_en Data Entry
98
98
  * @name 开关
99
99
  * @name_en Switch