@fjyueke/arco-mcp 1.0.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 (191) hide show
  1. package/README.md +85 -0
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.js +244 -0
  4. package/metaData/components/action-sheet/doc.md +102 -0
  5. package/metaData/components/action-sheet/example/index.tsx +199 -0
  6. package/metaData/components/action-sheet/example/methods.tsx +6 -0
  7. package/metaData/components/avatar/doc.md +57 -0
  8. package/metaData/components/avatar/example/group.tsx +69 -0
  9. package/metaData/components/avatar/example/index.tsx +196 -0
  10. package/metaData/components/badge/doc.md +28 -0
  11. package/metaData/components/badge/example/index.tsx +128 -0
  12. package/metaData/components/button/doc.md +45 -0
  13. package/metaData/components/button/example/index.tsx +264 -0
  14. package/metaData/components/carousel/doc.md +89 -0
  15. package/metaData/components/carousel/example/index.tsx +1481 -0
  16. package/metaData/components/cell/doc.md +68 -0
  17. package/metaData/components/cell/example/arrow.tsx +13 -0
  18. package/metaData/components/cell/example/cell.tsx +71 -0
  19. package/metaData/components/cell/example/group.tsx +63 -0
  20. package/metaData/components/cell/example/index.tsx +19 -0
  21. package/metaData/components/checkbox/doc.md +91 -0
  22. package/metaData/components/checkbox/example/checkbox.tsx +158 -0
  23. package/metaData/components/checkbox/example/group.tsx +103 -0
  24. package/metaData/components/checkbox/example/index.tsx +25 -0
  25. package/metaData/components/circle-progress/doc.md +40 -0
  26. package/metaData/components/circle-progress/example/index.tsx +323 -0
  27. package/metaData/components/collapse/doc.md +74 -0
  28. package/metaData/components/collapse/example/collapse.tsx +183 -0
  29. package/metaData/components/collapse/example/group.tsx +136 -0
  30. package/metaData/components/collapse/example/index.tsx +16 -0
  31. package/metaData/components/collapse/example/utils.tsx +20 -0
  32. package/metaData/components/context-provider/doc.md +44 -0
  33. package/metaData/components/context-provider/example/index.tsx +208 -0
  34. package/metaData/components/count-down/doc.md +40 -0
  35. package/metaData/components/count-down/example/hooks.tsx +118 -0
  36. package/metaData/components/count-down/example/index.tsx +63 -0
  37. package/metaData/components/date-picker/doc.md +102 -0
  38. package/metaData/components/date-picker/example/index.tsx +545 -0
  39. package/metaData/components/dialog/doc.md +200 -0
  40. package/metaData/components/dialog/example/index.tsx +328 -0
  41. package/metaData/components/dialog/example/methods.tsx +56 -0
  42. package/metaData/components/divider/doc.md +25 -0
  43. package/metaData/components/divider/example/index.tsx +87 -0
  44. package/metaData/components/dropdown/doc.md +80 -0
  45. package/metaData/components/dropdown/example/dropdown.tsx +308 -0
  46. package/metaData/components/dropdown/example/index.tsx +19 -0
  47. package/metaData/components/dropdown/example/options.tsx +103 -0
  48. package/metaData/components/dropdown-menu/doc.md +91 -0
  49. package/metaData/components/dropdown-menu/example/dropdown-menu.tsx +270 -0
  50. package/metaData/components/dropdown-menu/example/index.tsx +16 -0
  51. package/metaData/components/ellipsis/doc.md +33 -0
  52. package/metaData/components/ellipsis/example/index.tsx +93 -0
  53. package/metaData/components/ellipsis/example/js-ellipsis.tsx +229 -0
  54. package/metaData/components/ellipsis/example/native-ellipsis.tsx +48 -0
  55. package/metaData/components/form/doc.md +90 -0
  56. package/metaData/components/form/example/form-item-context.tsx +8 -0
  57. package/metaData/components/form/example/form-item.tsx +378 -0
  58. package/metaData/components/form/example/index.tsx +87 -0
  59. package/metaData/components/form/example/linked-container.tsx +66 -0
  60. package/metaData/components/grid/doc.md +39 -0
  61. package/metaData/components/grid/example/index.tsx +252 -0
  62. package/metaData/components/icon/doc.md +15 -0
  63. package/metaData/components/icon/example/index.tsx +32 -0
  64. package/metaData/components/image/doc.md +62 -0
  65. package/metaData/components/image/example/index.tsx +528 -0
  66. package/metaData/components/image-picker/doc.md +116 -0
  67. package/metaData/components/image-picker/example/add-icon.tsx +14 -0
  68. package/metaData/components/image-picker/example/index.tsx +175 -0
  69. package/metaData/components/image-preview/doc.md +119 -0
  70. package/metaData/components/image-preview/example/index.tsx +1290 -0
  71. package/metaData/components/image-preview/example/methods.tsx +72 -0
  72. package/metaData/components/index-bar/doc.md +83 -0
  73. package/metaData/components/index-bar/example/group.tsx +93 -0
  74. package/metaData/components/index-bar/example/index.tsx +271 -0
  75. package/metaData/components/index-bar/example/side-bar.tsx +82 -0
  76. package/metaData/components/input/doc.md +60 -0
  77. package/metaData/components/input/example/hooks.tsx +259 -0
  78. package/metaData/components/input/example/index.tsx +134 -0
  79. package/metaData/components/input/example/props.tsx +183 -0
  80. package/metaData/components/keyboard/doc.md +73 -0
  81. package/metaData/components/keyboard/example/index.tsx +238 -0
  82. package/metaData/components/load-more/doc.md +48 -0
  83. package/metaData/components/load-more/example/index.tsx +395 -0
  84. package/metaData/components/loading/doc.md +34 -0
  85. package/metaData/components/loading/example/index.tsx +312 -0
  86. package/metaData/components/masking/doc.md +93 -0
  87. package/metaData/components/masking/example/index.tsx +410 -0
  88. package/metaData/components/masking/example/methods.tsx +88 -0
  89. package/metaData/components/nav-bar/doc.md +40 -0
  90. package/metaData/components/nav-bar/example/back-icon.tsx +28 -0
  91. package/metaData/components/nav-bar/example/index.tsx +305 -0
  92. package/metaData/components/notice-bar/doc.md +34 -0
  93. package/metaData/components/notice-bar/example/index.tsx +294 -0
  94. package/metaData/components/notify/doc.md +81 -0
  95. package/metaData/components/notify/example/index.tsx +171 -0
  96. package/metaData/components/notify/example/methods.tsx +83 -0
  97. package/metaData/components/pagination/doc.md +41 -0
  98. package/metaData/components/pagination/example/arrow.tsx +14 -0
  99. package/metaData/components/pagination/example/index.tsx +292 -0
  100. package/metaData/components/picker/doc.md +89 -0
  101. package/metaData/components/picker/example/index.tsx +217 -0
  102. package/metaData/components/picker-view/doc.md +57 -0
  103. package/metaData/components/picker-view/example/cascader.tsx +141 -0
  104. package/metaData/components/picker-view/example/index.tsx +297 -0
  105. package/metaData/components/picker-view/example/multi-picker.tsx +66 -0
  106. package/metaData/components/picker-view/example/picker-cell.tsx +416 -0
  107. package/metaData/components/popover/doc.md +144 -0
  108. package/metaData/components/popover/example/index.tsx +23 -0
  109. package/metaData/components/popover/example/menu.tsx +145 -0
  110. package/metaData/components/popover/example/popover-inner.tsx +147 -0
  111. package/metaData/components/popover/example/popover.tsx +268 -0
  112. package/metaData/components/popup/doc.md +101 -0
  113. package/metaData/components/popup/example/index.tsx +125 -0
  114. package/metaData/components/popup/example/methods.tsx +6 -0
  115. package/metaData/components/popup-swiper/doc.md +108 -0
  116. package/metaData/components/popup-swiper/example/index.tsx +332 -0
  117. package/metaData/components/popup-swiper/example/methods.tsx +6 -0
  118. package/metaData/components/portal/doc.md +14 -0
  119. package/metaData/components/portal/example/index.tsx +35 -0
  120. package/metaData/components/progress/doc.md +42 -0
  121. package/metaData/components/progress/example/index.tsx +256 -0
  122. package/metaData/components/pull-refresh/doc.md +37 -0
  123. package/metaData/components/pull-refresh/example/android-pull-refresh.tsx +260 -0
  124. package/metaData/components/pull-refresh/example/index.tsx +44 -0
  125. package/metaData/components/pull-refresh/example/ios-pull-refresh.tsx +216 -0
  126. package/metaData/components/radio/doc.md +89 -0
  127. package/metaData/components/radio/example/group.tsx +92 -0
  128. package/metaData/components/radio/example/index.tsx +25 -0
  129. package/metaData/components/radio/example/radio.tsx +22 -0
  130. package/metaData/components/rate/doc.md +33 -0
  131. package/metaData/components/rate/example/index.tsx +281 -0
  132. package/metaData/components/search-bar/doc.md +97 -0
  133. package/metaData/components/search-bar/example/association.tsx +89 -0
  134. package/metaData/components/search-bar/example/cancel-button.tsx +34 -0
  135. package/metaData/components/search-bar/example/highlight.tsx +66 -0
  136. package/metaData/components/search-bar/example/index.tsx +251 -0
  137. package/metaData/components/show-monitor/doc.md +34 -0
  138. package/metaData/components/show-monitor/example/index.tsx +646 -0
  139. package/metaData/components/skeleton/doc.md +101 -0
  140. package/metaData/components/skeleton/example/elements.tsx +290 -0
  141. package/metaData/components/skeleton/example/index.tsx +96 -0
  142. package/metaData/components/skeleton/example/skeleton-context.tsx +7 -0
  143. package/metaData/components/slider/doc.md +42 -0
  144. package/metaData/components/slider/example/index.tsx +326 -0
  145. package/metaData/components/slider/example/marks.tsx +50 -0
  146. package/metaData/components/slider/example/popover.tsx +38 -0
  147. package/metaData/components/slider/example/thumb.tsx +48 -0
  148. package/metaData/components/slider/example/useSliderIcon.tsx +38 -0
  149. package/metaData/components/slider/example/useSliderInit.tsx +170 -0
  150. package/metaData/components/stepper/doc.md +46 -0
  151. package/metaData/components/stepper/example/index.tsx +166 -0
  152. package/metaData/components/stepper/example/useButtonClick.tsx +74 -0
  153. package/metaData/components/stepper/example/useInputEvent.tsx +65 -0
  154. package/metaData/components/stepper/example/useValue.tsx +43 -0
  155. package/metaData/components/steps/doc.md +57 -0
  156. package/metaData/components/steps/example/index.tsx +123 -0
  157. package/metaData/components/steps/example/step.tsx +126 -0
  158. package/metaData/components/sticky/doc.md +45 -0
  159. package/metaData/components/sticky/example/index.tsx +430 -0
  160. package/metaData/components/swipe-action/doc.md +44 -0
  161. package/metaData/components/swipe-action/example/index.tsx +338 -0
  162. package/metaData/components/swipe-action/example/item.tsx +40 -0
  163. package/metaData/components/swipe-load/doc.md +43 -0
  164. package/metaData/components/swipe-load/example/index.tsx +339 -0
  165. package/metaData/components/swipe-load/example/type.tsx +153 -0
  166. package/metaData/components/switch/doc.md +38 -0
  167. package/metaData/components/switch/example/index.tsx +237 -0
  168. package/metaData/components/tab-bar/doc.md +57 -0
  169. package/metaData/components/tab-bar/example/index.tsx +18 -0
  170. package/metaData/components/tab-bar/example/item.tsx +74 -0
  171. package/metaData/components/tab-bar/example/tab-bar.tsx +105 -0
  172. package/metaData/components/tabs/doc.md +187 -0
  173. package/metaData/components/tabs/example/index.tsx +514 -0
  174. package/metaData/components/tabs/example/tab-cell-underline.tsx +320 -0
  175. package/metaData/components/tabs/example/tab-cell.tsx +433 -0
  176. package/metaData/components/tabs/example/tab-pane.tsx +349 -0
  177. package/metaData/components/tag/doc.md +80 -0
  178. package/metaData/components/tag/example/index.tsx +23 -0
  179. package/metaData/components/tag/example/list.tsx +97 -0
  180. package/metaData/components/tag/example/tag.tsx +85 -0
  181. package/metaData/components/textarea/doc.md +67 -0
  182. package/metaData/components/textarea/example/index.tsx +258 -0
  183. package/metaData/components/toast/doc.md +90 -0
  184. package/metaData/components/toast/example/index.tsx +335 -0
  185. package/metaData/components/toast/example/methods.tsx +87 -0
  186. package/metaData/components/transition/doc.md +19 -0
  187. package/metaData/components/transition/example/index.tsx +113 -0
  188. package/metaData/components/uploader/doc.md +82 -0
  189. package/metaData/components/uploader/example/index.tsx +208 -0
  190. package/metaData/components-index.json +242 -0
  191. package/package.json +56 -0
@@ -0,0 +1,338 @@
1
+ import React, {
2
+ useRef,
3
+ forwardRef,
4
+ Ref,
5
+ useImperativeHandle,
6
+ useEffect,
7
+ RefObject,
8
+ useMemo,
9
+ useContext,
10
+ useState,
11
+ } from 'react';
12
+ import { nextTick, cls } from '@arco-design/mobile-utils';
13
+ import { GlobalContext } from '../context-provider';
14
+ import { SwipeActionProps, SwipeActionRef } from './type';
15
+ import RenderAction from './item';
16
+ import { getStyleWithVendor, useLatestRef, useRefState } from '../_helpers';
17
+
18
+ export * from './type';
19
+
20
+ /**
21
+ * 滑动操作组件,左右滑动拉出菜单栏
22
+ * @en SwipeAction component, slide left and right to pull out the menu bar
23
+ * @type 反馈
24
+ * @type_en FeedBack
25
+ * @name 滑动操作
26
+ * @name_en SwipeAction
27
+ */
28
+
29
+ const SwipeAction = forwardRef((props: SwipeActionProps, ref: Ref<SwipeActionRef>) => {
30
+ const {
31
+ className = '',
32
+ style,
33
+ children,
34
+ leftActions,
35
+ rightActions,
36
+ disabled = false,
37
+ threshold = 0.15,
38
+ closeOnTouchOutside,
39
+ transitionDuration = 300,
40
+ dampRate = 15,
41
+ openStyleType = 'layer',
42
+ onClose,
43
+ onOpen,
44
+ } = props;
45
+
46
+ const domRef = useRef<HTMLDivElement>(null);
47
+ const leftRef = useRef<HTMLDivElement>(null);
48
+ const rightRef = useRef<HTMLDivElement>(null);
49
+
50
+ const isOpen = useRef(false);
51
+
52
+ const leftMenuWidthRef = useRef<number>(0);
53
+ const [leftMenuWidthArr, setLeftMenuWidthArr] = useState<number[]>([]);
54
+ const rightMenuWidthRef = useRef<number>(0);
55
+ const [rightMenuWidthArr, setRightMenuWidthArr] = useState<number[]>([]);
56
+ const dampRateRef = useLatestRef(dampRate);
57
+ const forbidClick = useRef(false);
58
+ const scrollingRef = useRef<boolean | null>(null);
59
+
60
+ const [moving, movingRef, setMoving] = useRefState(false);
61
+ const [offset, offsetRef, setOffset] = useRefState(0);
62
+ const { prefixCls } = useContext(GlobalContext);
63
+
64
+ const startRef = useRef(0);
65
+ const startX = useRef(0);
66
+ const startY = useRef(0);
67
+ const slideX = useRef(0);
68
+ const isLayer = openStyleType === 'layer';
69
+
70
+ const transitionStyle = useMemo(
71
+ () =>
72
+ getStyleWithVendor({
73
+ transitionDuration: moving ? '0ms' : `${transitionDuration}ms`,
74
+ }),
75
+ [moving, transitionDuration],
76
+ );
77
+
78
+ function resetMoveData() {
79
+ startX.current = 0;
80
+ startY.current = 0;
81
+ slideX.current = 0;
82
+ }
83
+
84
+ function getMenuCurrentWidth(a: number, min: number, max: number): number {
85
+ const buffer = Math.abs(a) / dampRateRef.current;
86
+ return Math.min(Math.max(a, min - buffer), max + buffer);
87
+ }
88
+
89
+ function touchstart(e: TouchEvent) {
90
+ startRef.current = offsetRef.current;
91
+ resetMoveData();
92
+ scrollingRef.current = null;
93
+ startX.current = e.touches[0].pageX;
94
+ startY.current = e.touches[0].pageY;
95
+ }
96
+
97
+ function touchmove(e: TouchEvent) {
98
+ const x = e.changedTouches[0].pageX - startX.current;
99
+ const y = e.changedTouches[0].pageY - startY.current;
100
+ if (scrollingRef.current === null) {
101
+ scrollingRef.current = Math.abs(x) < Math.abs(y);
102
+ }
103
+ if (scrollingRef.current) {
104
+ setMoving(false);
105
+ setOffset(0);
106
+ return;
107
+ }
108
+ e.cancelable && e.preventDefault();
109
+ slideX.current = x;
110
+ forbidClick.current = true;
111
+ setMoving(true);
112
+ setOffset(
113
+ getMenuCurrentWidth(
114
+ slideX.current + startRef.current,
115
+ -rightMenuWidthRef.current,
116
+ leftMenuWidthRef.current,
117
+ ),
118
+ );
119
+ }
120
+
121
+ function touchend() {
122
+ if (movingRef.current && !scrollingRef.current) {
123
+ const currentMenu = offsetRef.current > 0 ? 'left' : 'right';
124
+ changeMenu(currentMenu);
125
+ setMoving(false);
126
+ nextTick(() => {
127
+ forbidClick.current = false;
128
+ });
129
+ }
130
+ }
131
+
132
+ function changeMenu(dir: 'left' | 'right') {
133
+ const cookedThreshold = isOpen.current ? 1 - threshold : threshold;
134
+ const width = dir === 'left' ? leftMenuWidthRef.current : rightMenuWidthRef.current;
135
+ if (width && Math.abs(offsetRef.current) > width * cookedThreshold) {
136
+ open(dir);
137
+ } else {
138
+ close(dir);
139
+ }
140
+ }
141
+
142
+ function getWidthByRef(widthRef: RefObject<HTMLDivElement | null>) {
143
+ if (!widthRef.current) {
144
+ return { totalWidth: 0, widthArr: [] };
145
+ }
146
+ let totalWidth = 0;
147
+ const widthArr: number[] = [];
148
+ const allEle = widthRef.current.getElementsByClassName(
149
+ `${prefixCls}-swipe-action-menu-action-info-container`,
150
+ );
151
+ Array.prototype.forEach.call(allEle, (ele: HTMLElement) => {
152
+ const w = ele.getBoundingClientRect().width ?? 0;
153
+ totalWidth += w;
154
+ widthArr.push(w);
155
+ });
156
+ return {
157
+ totalWidth,
158
+ widthArr,
159
+ };
160
+ }
161
+
162
+ useEffect(() => {
163
+ const container = domRef.current;
164
+ if (!disabled && container) {
165
+ container.addEventListener('touchstart', touchstart);
166
+ container.addEventListener('touchmove', touchmove);
167
+ container.addEventListener('touchend', touchend);
168
+ }
169
+ return () => {
170
+ if (!disabled && container) {
171
+ container.removeEventListener('touchstart', touchstart);
172
+ container.removeEventListener('touchmove', touchmove);
173
+ container.removeEventListener('touchend', touchend);
174
+ }
175
+ };
176
+ }, [disabled]);
177
+
178
+ // 获取左右菜单的宽度
179
+ // @en Get the width of the left and right menu
180
+ useEffect(() => {
181
+ const { totalWidth: leftTotalWidth, widthArr: leftWidthArr } = getWidthByRef(leftRef);
182
+ leftMenuWidthRef.current = leftTotalWidth;
183
+ setLeftMenuWidthArr(leftWidthArr);
184
+ const { totalWidth: rightTotalWidth, widthArr: rightWidthArr } = getWidthByRef(rightRef);
185
+ rightMenuWidthRef.current = rightTotalWidth;
186
+ setRightMenuWidthArr(rightWidthArr);
187
+ }, [leftActions, rightActions]);
188
+
189
+ // 点击外部区域事件
190
+ // @en Event when clicking outside of the element
191
+ useEffect(() => {
192
+ const handle = e => {
193
+ if (!domRef.current?.contains(e.target) && isOpen.current) {
194
+ close();
195
+ }
196
+ };
197
+ closeOnTouchOutside && document.addEventListener('touchstart', handle);
198
+ return () => {
199
+ closeOnTouchOutside && document.removeEventListener('touchstart', handle);
200
+ };
201
+ }, [closeOnTouchOutside]);
202
+
203
+ useImperativeHandle(ref, () => ({
204
+ dom: domRef.current,
205
+ close,
206
+ open,
207
+ }));
208
+
209
+ function close(dir?: 'left' | 'right') {
210
+ setOffset(0);
211
+ if (isOpen.current) {
212
+ isOpen.current = false;
213
+ if (!dir && offsetRef.current !== 0) {
214
+ const noDir = offsetRef.current > 0 ? 'left' : 'right';
215
+ handleClose(noDir);
216
+ return;
217
+ }
218
+ handleClose(dir);
219
+ }
220
+ }
221
+ function open(dir: 'left' | 'right' = 'right') {
222
+ if (!isOpen.current) {
223
+ isOpen.current = true;
224
+ handleOpen(dir);
225
+ }
226
+ setOffset(dir === 'left' ? leftMenuWidthRef.current : -rightMenuWidthRef.current);
227
+ }
228
+
229
+ function handleOpen(dir) {
230
+ setTimeout(() => {
231
+ onOpen?.(dir);
232
+ }, transitionDuration);
233
+ }
234
+
235
+ function handleClose(dir) {
236
+ setTimeout(() => {
237
+ onClose?.(dir);
238
+ }, transitionDuration);
239
+ }
240
+
241
+ function actionClick(e) {
242
+ if (
243
+ isOpen.current &&
244
+ !forbidClick.current &&
245
+ !leftRef.current?.contains(e.target) &&
246
+ !rightRef.current?.contains(e.target)
247
+ ) {
248
+ close();
249
+ }
250
+ }
251
+
252
+ function getActionRightByIndex(index: number) {
253
+ const preWidth = leftMenuWidthArr.slice(index + 1).reduce((acc, cur) => acc + cur, 0);
254
+ return `${(preWidth / leftMenuWidthRef.current || 0) * 100}%`;
255
+ }
256
+
257
+ function getActionLeftByIndex(index: number) {
258
+ const preWidth = rightMenuWidthArr.slice(0, index).reduce((acc, cur) => acc + cur, 0);
259
+ return `${(preWidth / rightMenuWidthRef.current || 0) * 100}%`;
260
+ }
261
+
262
+ return (
263
+ <div
264
+ className={cls(
265
+ `${prefixCls}-swipe-action`,
266
+ className,
267
+ offset === 0 ? 'action-close' : 'action-open',
268
+ )}
269
+ style={getStyleWithVendor({
270
+ ...(style || {}),
271
+ ...transitionStyle,
272
+ transform: `translateX(${offset}px)`,
273
+ })}
274
+ ref={domRef}
275
+ onClick={actionClick}
276
+ >
277
+ <div
278
+ className={cls(
279
+ `${prefixCls}-swipe-action-menu-left`,
280
+ `${prefixCls}-swipe-action-menu`,
281
+ offset > 0 ? 'action-open' : 'action-close',
282
+ )}
283
+ ref={leftRef}
284
+ style={isLayer && offset >= 0 ? { width: offset, ...transitionStyle } : {}}
285
+ >
286
+ {leftActions?.map((action, index) => (
287
+ <RenderAction
288
+ action={{
289
+ ...(action || {}),
290
+ style: {
291
+ ...(isLayer ? { right: getActionRightByIndex(index) } : {}),
292
+ ...(action.style || {}),
293
+ },
294
+ className: cls(action.className, `open-style-${openStyleType}`),
295
+ }}
296
+ prefixCls={`${prefixCls}-swipe-action-menu-action`}
297
+ index={leftActions.length - index}
298
+ type="left"
299
+ close={close}
300
+ key={index}
301
+ />
302
+ ))}
303
+ </div>
304
+
305
+ <div className={`${prefixCls}-swipe-action-content`}>{children}</div>
306
+
307
+ <div
308
+ className={cls(
309
+ `${prefixCls}-swipe-action-menu-right`,
310
+ `${prefixCls}-swipe-action-menu`,
311
+ offset < 0 ? 'action-open' : 'action-close',
312
+ )}
313
+ ref={rightRef}
314
+ style={isLayer && offset <= 0 ? { width: -1 * offset, ...transitionStyle } : {}}
315
+ >
316
+ {rightActions?.map((action, index) => (
317
+ <RenderAction
318
+ action={{
319
+ ...(action || {}),
320
+ style: {
321
+ ...(isLayer ? { left: getActionLeftByIndex(index) } : {}),
322
+ ...(action.style || {}),
323
+ },
324
+ className: cls(action.className, `open-style-${openStyleType}`),
325
+ }}
326
+ prefixCls={`${prefixCls}-swipe-action-menu-action`}
327
+ index={index + 1}
328
+ type="right"
329
+ close={close}
330
+ key={index}
331
+ />
332
+ ))}
333
+ </div>
334
+ </div>
335
+ );
336
+ });
337
+
338
+ export default SwipeAction;
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ import { cls } from '@arco-design/mobile-utils';
3
+ import { Action } from './type';
4
+
5
+ interface IProps {
6
+ action: Action;
7
+ prefixCls: string;
8
+ index: number;
9
+ type: 'left' | 'right';
10
+ close: () => void;
11
+ }
12
+
13
+ export default function renderAction({ action, prefixCls, index, type, close }: IProps) {
14
+ const { text, style: actionStyle, className, onClick, icon, children } = action;
15
+ function click() {
16
+ const result = onClick?.() || null;
17
+ if (!result || typeof result === 'boolean') {
18
+ !result && close();
19
+ } else if (result && result.then) {
20
+ result.then(res => !res && close());
21
+ }
22
+ }
23
+ return (
24
+ <div
25
+ className={cls(`${prefixCls}-${type} ${prefixCls}-info-container`, className)}
26
+ style={{
27
+ zIndex: index,
28
+ ...actionStyle,
29
+ }}
30
+ onClick={click}
31
+ >
32
+ {children || (
33
+ <div className={`${prefixCls}-info`}>
34
+ {icon ? <div className={`${prefixCls}-info-icon`}>{icon}</div> : null}
35
+ {text ? <div className={`${prefixCls}-info-text`}>{text}</div> : null}
36
+ </div>
37
+ )}
38
+ </div>
39
+ );
40
+ }
@@ -0,0 +1,43 @@
1
+ ### 反馈
2
+
3
+ # 左滑加载 SwipeLoad
4
+
5
+ 向左滑动到达屏幕边缘后,超过一定距离时触发加载,常用于横划展示少量的元素,滑动到底后跳转至另外界面的场景
6
+
7
+ ======
8
+
9
+ > 属性/Props
10
+
11
+ |参数|描述|类型|默认值|
12
+ |----------|-------------|------|------|
13
+ |className|自定义类名|string|-|
14
+ |disabled|是否禁用组件|boolean|false|
15
+ |maxElementOffset|页面元素允许划动的最大距离|number|56|
16
+ |maxLabelOffset|label移动的最大距离|number|40|
17
+ |minConfirmOffset|页面允许触发的临界值(通常小于maxLabelOffset)|number|30|
18
+ |onConfirm|释放触发的函数(跳转,加载等)|() =\> void|必填|
19
+ |circleSize|圆形的直径|number|80|
20
+ |labelAnimationDuration|恢复动效时长(ms)|number|250|
21
+ |labelAnimationFunction|恢复动效函数|string|"cubic-bezier(0.14, 1, 0.34, 1)"|
22
+ |damping|阻尼动效参数,使用函数x = X/(aX\+b),其中X代表当前滑动距离,传入的值代表\[a, b\]|\[number, number\]|[0.013312, 1.636345]|
23
+ |getScrollContainer|得到滚动容器|() =\> HTMLElement|-|
24
+ |normalText|标签初始文案|string|"更多"|
25
+ |activeText|触发跳转文案|string|"释放查看"|
26
+ |bounceWhenBumpBoundary|触碰左侧边界时是否需要回弹效果|boolean|false|
27
+ |bounceDampRate|当开启回弹效果时的阻尼系数|number|3|
28
+ |bounceAnimateDuration|当开启回弹效果时的动画毫秒时间|number|300|
29
+ |getBounceContainer|回弹效果开启时需要回弹的容器,默认为 getScrollContainer 返回的容器或容器的一个子元素|() =\> HTMLElement|-|
30
+ |bounceDistanceProcessor|当开启回弹效果时自定义手指滑动跟手的距离计算方式,dis表示touchmove的距离|(dis: number) =\> number|(dis) => Math.min(dis, bounceScrollContainer.offsetWidth) / bounceDampRate|
31
+ |onTouchStart|抛出外层touch事件,便于自定义,常用于阻止划动退出,切换tab等手势冲突|(e?: TouchEvent) =\> void|-|
32
+ |onTouchMove|抛出外层touch事件,便于自定义,常用于阻止划动退出,切换tab等手势冲突|(e?: TouchEvent) =\> void|-|
33
+ |onTouchEnd|抛出外层touch事件,便于自定义,常用于阻止划动退出,切换tab等手势冲突|(e?: TouchEvent) =\> void|-|
34
+ |onTouchCancel|抛出外层touch事件,便于自定义,常用于阻止划动退出,切换tab等手势冲突|(e?: TouchEvent) =\> void|-|
35
+ |renderLabel|用户自定义标签样式|(offset?: number) =\> ReactNode|-|
36
+ |initPos|标签的初始位置 自定义必传|number|0|
37
+ |children|子元素|ReactNode|必填|
38
+
39
+ > 引用/Refs
40
+
41
+ |参数|描述|类型|
42
+ |----------|-------------|------|
43
+ |dom|最外层元素 DOM|HTMLDivElement|