@canlooks/can-ui 0.0.41 → 0.0.43

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 (174) hide show
  1. package/dist/cjs/components/alert/alert.style.js +1 -0
  2. package/dist/cjs/components/checkboxBase/checkboxBase.js +1 -2
  3. package/dist/cjs/components/checkboxBaseGroup/checkboxBaseGroup.d.ts +0 -2
  4. package/dist/cjs/components/checkboxBaseGroup/checkboxBaseGroup.js +3 -3
  5. package/dist/cjs/components/clickAway/clickAway.d.ts +285 -1
  6. package/dist/cjs/components/clickAway/clickAway.js +1 -2
  7. package/dist/cjs/components/dataGrid/columnResize.js +5 -5
  8. package/dist/cjs/components/dataGrid/dataGrid.js +1 -1
  9. package/dist/cjs/components/dataGrid/dataGridRows.js +3 -1
  10. package/dist/cjs/components/descriptions/descriptionItem.d.ts +3 -3
  11. package/dist/cjs/components/draggable/draggable.d.ts +6 -6
  12. package/dist/cjs/components/draggable/draggable.js +13 -18
  13. package/dist/cjs/components/{image/imagePreview.d.ts → gallery/gallery.d.ts} +7 -3
  14. package/dist/cjs/components/gallery/gallery.js +165 -0
  15. package/dist/{esm/components/image/imagePreview.style.d.ts → cjs/components/gallery/gallery.style.d.ts} +3 -1
  16. package/dist/cjs/components/{image/imagePreview.style.js → gallery/gallery.style.js} +49 -13
  17. package/dist/cjs/components/gallery/imageItem.d.ts +14 -0
  18. package/dist/cjs/components/gallery/imageItem.js +51 -0
  19. package/dist/cjs/components/gallery/index.d.ts +1 -0
  20. package/dist/cjs/components/gallery/index.js +4 -0
  21. package/dist/cjs/components/image/image.d.ts +2 -2
  22. package/dist/cjs/components/image/image.js +3 -3
  23. package/dist/cjs/components/image/index.d.ts +0 -1
  24. package/dist/cjs/components/image/index.js +0 -1
  25. package/dist/cjs/components/overlayBase/overlayBase.js +1 -1
  26. package/dist/cjs/components/palette/palette.d.ts +3 -3
  27. package/dist/cjs/components/palette/palette.js +9 -9
  28. package/dist/cjs/components/pickerDialog/pickerDialog.style.js +6 -0
  29. package/dist/cjs/components/pinchable/index.d.ts +1 -0
  30. package/dist/cjs/components/pinchable/index.js +4 -0
  31. package/dist/cjs/components/pinchable/pinchable.d.ts +33 -0
  32. package/dist/cjs/components/pinchable/pinchable.js +160 -0
  33. package/dist/cjs/components/pinchable/pinchable.style.d.ts +6 -0
  34. package/dist/cjs/components/pinchable/pinchable.style.js +21 -0
  35. package/dist/cjs/components/placeholder/placeholder.style.js +1 -0
  36. package/dist/cjs/components/progress/progress.d.ts +1 -1
  37. package/dist/cjs/components/rating/rating.d.ts +2 -2
  38. package/dist/cjs/components/rating/rating.js +2 -5
  39. package/dist/cjs/components/rating/rating.style.js +1 -2
  40. package/dist/cjs/components/resizable/resizable.d.ts +2 -2
  41. package/dist/cjs/components/resizable/resizable.js +12 -12
  42. package/dist/cjs/components/scrollbar/scrollbar.d.ts +1 -1
  43. package/dist/cjs/components/scrollbar/scrollbar.js +6 -6
  44. package/dist/cjs/components/segmented/SegmentedOption.d.ts +1 -1
  45. package/dist/cjs/components/selectedList/selectedItem.js +1 -1
  46. package/dist/cjs/components/selectedList/selectedList.style.js +1 -1
  47. package/dist/cjs/components/skeleton/skeleton.d.ts +1 -1
  48. package/dist/cjs/components/slidableActions/slidableActions.d.ts +9 -5
  49. package/dist/cjs/components/slidableActions/slidableActions.js +21 -25
  50. package/dist/cjs/components/slidableActions/slidableActions.style.d.ts +1 -1
  51. package/dist/cjs/components/slidableActions/slidableActions.style.js +14 -13
  52. package/dist/cjs/components/slidableActions/slidableActionsAction.d.ts +4 -2
  53. package/dist/cjs/components/slidableActions/slidableActionsAction.js +6 -2
  54. package/dist/cjs/components/slider/slider.d.ts +3 -3
  55. package/dist/cjs/components/slider/slider.js +8 -8
  56. package/dist/cjs/components/tabs/tabs.js +1 -1
  57. package/dist/cjs/components/theme/themeVariables.js +1 -1
  58. package/dist/cjs/components/upload/itemStatus.d.ts +1 -1
  59. package/dist/cjs/components/upload/itemStatus.js +3 -0
  60. package/dist/cjs/components/upload/upload.d.ts +3 -3
  61. package/dist/cjs/components/upload/upload.js +1 -1
  62. package/dist/cjs/extensions/documentViewer/documentViewer.js +1 -2
  63. package/dist/cjs/index.d.ts +2 -0
  64. package/dist/cjs/index.js +2 -0
  65. package/dist/cjs/utils/dnd.d.ts +0 -42
  66. package/dist/cjs/utils/dnd.js +0 -121
  67. package/dist/cjs/utils/gesture.d.ts +69 -0
  68. package/dist/cjs/utils/gesture.js +250 -0
  69. package/dist/cjs/utils/index.d.ts +1 -0
  70. package/dist/cjs/utils/index.js +1 -0
  71. package/dist/cjs/utils/style.js +1 -1
  72. package/dist/cjs/utils/utils.d.ts +0 -2
  73. package/dist/cjs/utils/utils.js +0 -2
  74. package/dist/esm/components/alert/alert.style.js +1 -0
  75. package/dist/esm/components/checkboxBase/checkboxBase.js +1 -2
  76. package/dist/esm/components/checkboxBaseGroup/checkboxBaseGroup.d.ts +0 -2
  77. package/dist/esm/components/checkboxBaseGroup/checkboxBaseGroup.js +4 -4
  78. package/dist/esm/components/clickAway/clickAway.d.ts +285 -1
  79. package/dist/esm/components/clickAway/clickAway.js +2 -3
  80. package/dist/esm/components/dataGrid/columnResize.js +6 -6
  81. package/dist/esm/components/dataGrid/dataGrid.js +1 -1
  82. package/dist/esm/components/dataGrid/dataGridRows.js +3 -1
  83. package/dist/esm/components/descriptions/descriptionItem.d.ts +3 -3
  84. package/dist/esm/components/draggable/draggable.d.ts +6 -6
  85. package/dist/esm/components/draggable/draggable.js +14 -19
  86. package/dist/esm/components/{image/imagePreview.d.ts → gallery/gallery.d.ts} +7 -3
  87. package/dist/esm/components/gallery/gallery.js +162 -0
  88. package/dist/{cjs/components/image/imagePreview.style.d.ts → esm/components/gallery/gallery.style.d.ts} +3 -1
  89. package/dist/esm/components/{image/imagePreview.style.js → gallery/gallery.style.js} +49 -13
  90. package/dist/esm/components/gallery/imageItem.d.ts +14 -0
  91. package/dist/esm/components/gallery/imageItem.js +48 -0
  92. package/dist/esm/components/gallery/index.d.ts +1 -0
  93. package/dist/esm/components/gallery/index.js +1 -0
  94. package/dist/esm/components/image/image.d.ts +2 -2
  95. package/dist/esm/components/image/image.js +3 -3
  96. package/dist/esm/components/image/index.d.ts +0 -1
  97. package/dist/esm/components/image/index.js +0 -1
  98. package/dist/esm/components/overlayBase/overlayBase.js +1 -1
  99. package/dist/esm/components/palette/palette.d.ts +3 -3
  100. package/dist/esm/components/palette/palette.js +10 -10
  101. package/dist/esm/components/pickerDialog/pickerDialog.style.js +6 -0
  102. package/dist/esm/components/pinchable/index.d.ts +1 -0
  103. package/dist/esm/components/pinchable/index.js +1 -0
  104. package/dist/esm/components/pinchable/pinchable.d.ts +33 -0
  105. package/dist/esm/components/pinchable/pinchable.js +157 -0
  106. package/dist/esm/components/pinchable/pinchable.style.d.ts +6 -0
  107. package/dist/esm/components/pinchable/pinchable.style.js +18 -0
  108. package/dist/esm/components/placeholder/placeholder.style.js +1 -0
  109. package/dist/esm/components/progress/progress.d.ts +1 -1
  110. package/dist/esm/components/rating/rating.d.ts +2 -2
  111. package/dist/esm/components/rating/rating.js +2 -5
  112. package/dist/esm/components/rating/rating.style.js +1 -2
  113. package/dist/esm/components/resizable/resizable.d.ts +2 -2
  114. package/dist/esm/components/resizable/resizable.js +13 -13
  115. package/dist/esm/components/scrollbar/scrollbar.d.ts +1 -1
  116. package/dist/esm/components/scrollbar/scrollbar.js +7 -7
  117. package/dist/esm/components/segmented/SegmentedOption.d.ts +1 -1
  118. package/dist/esm/components/selectedList/selectedItem.js +1 -1
  119. package/dist/esm/components/selectedList/selectedList.style.js +1 -1
  120. package/dist/esm/components/skeleton/skeleton.d.ts +1 -1
  121. package/dist/esm/components/slidableActions/slidableActions.d.ts +9 -5
  122. package/dist/esm/components/slidableActions/slidableActions.js +22 -26
  123. package/dist/esm/components/slidableActions/slidableActions.style.d.ts +1 -1
  124. package/dist/esm/components/slidableActions/slidableActions.style.js +14 -13
  125. package/dist/esm/components/slidableActions/slidableActionsAction.d.ts +4 -2
  126. package/dist/esm/components/slidableActions/slidableActionsAction.js +6 -2
  127. package/dist/esm/components/slider/slider.d.ts +3 -3
  128. package/dist/esm/components/slider/slider.js +9 -9
  129. package/dist/esm/components/tabs/tabs.js +1 -1
  130. package/dist/esm/components/theme/themeVariables.js +1 -1
  131. package/dist/esm/components/upload/itemStatus.d.ts +1 -1
  132. package/dist/esm/components/upload/itemStatus.js +3 -0
  133. package/dist/esm/components/upload/upload.d.ts +3 -3
  134. package/dist/esm/components/upload/upload.js +1 -1
  135. package/dist/esm/extensions/documentViewer/documentViewer.js +2 -3
  136. package/dist/esm/index.d.ts +2 -0
  137. package/dist/esm/index.js +2 -0
  138. package/dist/esm/utils/dnd.d.ts +0 -42
  139. package/dist/esm/utils/dnd.js +0 -120
  140. package/dist/esm/utils/gesture.d.ts +69 -0
  141. package/dist/esm/utils/gesture.js +245 -0
  142. package/dist/esm/utils/index.d.ts +1 -0
  143. package/dist/esm/utils/index.js +1 -0
  144. package/dist/esm/utils/style.js +1 -1
  145. package/dist/esm/utils/utils.d.ts +0 -2
  146. package/dist/esm/utils/utils.js +0 -2
  147. package/documentation/dist/assets/{index-B6FOULC1.js → index-DXo4Z-bc.js} +1281 -1271
  148. package/documentation/dist/components/actionSheet.md +3 -3
  149. package/documentation/dist/components/autocomplete.md +10 -10
  150. package/documentation/dist/components/breadcrumb.md +1 -1
  151. package/documentation/dist/components/checkbox.md +24 -1
  152. package/documentation/dist/components/contextMenu.md +1 -1
  153. package/documentation/dist/components/counter.md +13 -13
  154. package/documentation/dist/components/dialog.md +3 -3
  155. package/documentation/dist/components/formDialog.md +6 -6
  156. package/documentation/dist/components/image.md +5 -3
  157. package/documentation/dist/components/menu.md +1 -1
  158. package/documentation/dist/components/pagination.md +15 -1
  159. package/documentation/dist/components/pickerDialog.md +56 -0
  160. package/documentation/dist/components/placeholder.md +30 -0
  161. package/documentation/dist/components/progress.md +43 -0
  162. package/documentation/dist/components/radio.md +37 -0
  163. package/documentation/dist/components/rating.md +35 -0
  164. package/documentation/dist/components/resizable.md +41 -0
  165. package/documentation/dist/components/scrollbar.md +31 -0
  166. package/documentation/dist/components/segmented.md +56 -0
  167. package/documentation/dist/components/select.md +30 -0
  168. package/documentation/dist/components/skeleton.md +26 -0
  169. package/documentation/dist/components/slidableActions.md +53 -0
  170. package/documentation/dist/guide/globalMethods.md +6 -6
  171. package/documentation/dist/index.html +1 -1
  172. package/package.json +6 -6
  173. package/dist/cjs/components/image/imagePreview.js +0 -63
  174. package/dist/esm/components/image/imagePreview.js +0 -60
@@ -0,0 +1,69 @@
1
+ import React, { HTMLAttributes, MouseEventHandler } from 'react';
2
+ type Point = [number, number];
3
+ export type DragInfo<D = any> = {
4
+ /** 开始位置 */
5
+ start: Point;
6
+ /** 当前位置 */
7
+ current: Point;
8
+ /** 拖拽距离,往右下拖拽为正数,往左上拖拽为负数 */
9
+ diff: Point;
10
+ /** {@link GestureOptions.onDragStart}的返回值 */
11
+ data: D;
12
+ };
13
+ export interface DragEndInfo<D = any> extends DragInfo<D> {
14
+ /** 从按下到抬起经过的时长(ms) */
15
+ duration: number;
16
+ /** 拖拽速度(px/ms) */
17
+ speed: Point;
18
+ }
19
+ export type PinchStartInfo = {
20
+ /** 两指中点 */
21
+ startMiddle: Point;
22
+ /** 两指间距 */
23
+ startSpacing: number;
24
+ };
25
+ export interface PinchInfo<P = any> extends PinchStartInfo {
26
+ currentMiddle: Point;
27
+ diffMiddle: Point;
28
+ currentSpacing: number;
29
+ diffSpacing: number;
30
+ data: P;
31
+ }
32
+ type SharedGestureOptions = {
33
+ disabled?: boolean;
34
+ /** 通常无需使用,若元素受zoom样式的影响,可传入zoom值修正 */
35
+ zoom?: number;
36
+ /** 托管点击事件 */
37
+ onClick?: MouseEventHandler;
38
+ };
39
+ export interface DraggableGestureOptions<D = any> extends SharedGestureOptions {
40
+ /** 按下后经过一段时间才触发拖拽事件,单位ms */
41
+ delay?: number;
42
+ /** 拖拽一段距离后才触发拖拽事件,单位px */
43
+ distance?: number;
44
+ onDragStart?(e: React.PointerEvent): D;
45
+ onDrag?(info: DragInfo<D>, e: PointerEvent): void;
46
+ onDragEnd?(info: DragEndInfo<D>): void;
47
+ onDragCancel?(info: DragEndInfo<D>): void;
48
+ /** 若设为true,则会禁用浏览器默认拖拽行为,通常在触屏端使用,默认为`true` */
49
+ preventNativeTouchMove?: boolean;
50
+ }
51
+ export interface PinchableGestureOptions<P = any> extends SharedGestureOptions {
52
+ onPinchStart?(info: PinchStartInfo): P;
53
+ onPinch?(info: PinchInfo<P>): void;
54
+ onPinchEnd?(info: PinchInfo<P>): void;
55
+ }
56
+ export declare function useDraggable<D = any>({ disabled, ...options }: DraggableGestureOptions<D>): HandleProps;
57
+ export declare function usePinchable<P = any>({ disabled, ...options }: PinchableGestureOptions<P>): HandleProps;
58
+ export interface GestureOptions<D = any, P = any> extends Omit<DraggableGestureOptions<D>, 'disabled'>, Omit<PinchableGestureOptions<P>, 'disabled'> {
59
+ /** 是否可拖拽,默认为`true` */
60
+ draggable?: boolean;
61
+ /** 是否可捏合缩放,默认为`false` */
62
+ pinchable?: boolean;
63
+ }
64
+ export type HandleProps = Required<Pick<HTMLAttributes<Element>, 'onPointerDown'>> & Pick<HTMLAttributes<Element>, 'onTouchStart' | 'onClick'>;
65
+ export declare function useGesture<D = any, P = any>(options: GestureOptions<D, P>): {
66
+ draggableHandles: HandleProps;
67
+ pinchableHandles: HandleProps;
68
+ };
69
+ export {};
@@ -0,0 +1,245 @@
1
+ import { useCallback, useRef } from 'react';
2
+ import { useTheme } from '../components/theme';
3
+ import { useSync } from './hooks';
4
+ export function useDraggable({ disabled, ...options }) {
5
+ return useGesture({ draggable: !disabled, ...options }).draggableHandles;
6
+ }
7
+ export function usePinchable({ disabled, ...options }) {
8
+ return useGesture({ draggable: false, pinchable: !disabled, ...options }).pinchableHandles;
9
+ }
10
+ export function useGesture(options) {
11
+ const { zoom } = useTheme();
12
+ const syncOptions = useSync({
13
+ zoom,
14
+ draggable: true,
15
+ distance: 0,
16
+ preventNativeTouchMove: true,
17
+ ...options
18
+ });
19
+ const pointerEventMap = useRef(new Map());
20
+ const isDragged = useRef(false);
21
+ const dragStartPosition = useRef([0, 0]);
22
+ const dragStartTime = useRef(0);
23
+ const delayTimeout = useRef(void 0);
24
+ const data = useRef(void 0);
25
+ const isPinching = useRef(false);
26
+ const pinchStartMiddle = useRef([0, 0]);
27
+ const pinchStartSpacing = useRef(0);
28
+ const isRollback = useRef(false);
29
+ /**
30
+ * --------------------------------------------------------------------------------
31
+ * Drag 部分
32
+ */
33
+ const dragStartFn = (e) => {
34
+ isDragged.current = false;
35
+ dragStartPosition.current = [e.clientX, e.clientY];
36
+ dragStartTime.current = Date.now();
37
+ data.current = syncOptions.current.onDragStart?.(e);
38
+ document.documentElement.style.userSelect = 'none';
39
+ };
40
+ const draggingPointerDown = useCallback((e) => {
41
+ const { draggable, delay } = syncOptions.current;
42
+ if (!draggable || pointerEventMap.current.size >= 1) {
43
+ return;
44
+ }
45
+ if (delay) {
46
+ delayTimeout.current = setTimeout(() => {
47
+ delayTimeout.current = void 0;
48
+ dragStartFn(e);
49
+ }, delay);
50
+ }
51
+ else {
52
+ dragStartFn(e);
53
+ }
54
+ addEventListener('pointermove', draggingPointerMove);
55
+ addEventListener('pointerup', draggingPointerUp);
56
+ addEventListener('pointercancel', draggingPointerCancel);
57
+ }, []);
58
+ const settleDragInfo = ({ clientX, clientY }) => {
59
+ const diffX = (clientX - dragStartPosition.current[0]) / syncOptions.current.zoom;
60
+ const diffY = (clientY - dragStartPosition.current[1]) / syncOptions.current.zoom;
61
+ return {
62
+ start: dragStartPosition.current,
63
+ current: [clientX, clientY],
64
+ diff: [diffX, diffY],
65
+ data: data.current
66
+ };
67
+ };
68
+ const draggingPointerMove = useCallback((e) => {
69
+ e.preventDefault();
70
+ const dragInfo = settleDragInfo(e);
71
+ if (!isRollback.current) {
72
+ const absDiffX = Math.abs(dragInfo.diff[0]);
73
+ const absDiffY = Math.abs(dragInfo.diff[1]);
74
+ if (delayTimeout.current) {
75
+ if (absDiffX > 5 || absDiffY > 5) {
76
+ // 延时尚未结束,但偏移量过大,取消拖拽
77
+ draggingPointerCancel(e);
78
+ }
79
+ return;
80
+ }
81
+ const { distance } = syncOptions.current;
82
+ if (absDiffX < distance || absDiffY < distance) {
83
+ // 拖拽距离未达到起步距离
84
+ return;
85
+ }
86
+ }
87
+ isDragged.current = true;
88
+ syncOptions.current.onDrag?.(dragInfo, e);
89
+ }, []);
90
+ const cancelDragFn = () => {
91
+ delayTimeout.current && clearTimeout(delayTimeout.current);
92
+ delayTimeout.current = void 0;
93
+ document.documentElement.style.userSelect = '';
94
+ removeEventListener('pointermove', draggingPointerMove);
95
+ removeEventListener('pointerup', draggingPointerUp);
96
+ removeEventListener('pointercancel', draggingPointerCancel);
97
+ preventFn.current && removeEventListener('touchmove', preventFn.current);
98
+ };
99
+ const settleDragEndInfo = (e) => {
100
+ const dragInfo = settleDragInfo(e);
101
+ const duration = Date.now() - dragStartTime.current;
102
+ return {
103
+ ...dragInfo,
104
+ duration,
105
+ speed: [
106
+ Math.abs(dragInfo.diff[0] / duration),
107
+ Math.abs(dragInfo.diff[1] / duration)
108
+ ]
109
+ };
110
+ };
111
+ const draggingPointerCancel = useCallback((e) => {
112
+ cancelDragFn();
113
+ const callback = syncOptions.current.onDragCancel || syncOptions.current.onDragEnd;
114
+ callback?.(settleDragEndInfo(e));
115
+ }, []);
116
+ const draggingPointerUp = useCallback((e) => {
117
+ cancelDragFn();
118
+ syncOptions.current.onDragEnd?.(settleDragEndInfo(e));
119
+ }, []);
120
+ /**
121
+ * --------------------------------------------------------------------------------
122
+ * Pinch 部分
123
+ */
124
+ const calPinchInfo = () => {
125
+ const [{ clientX: x1, clientY: y1 }, { clientX: x2, clientY: y2 }] = pointerEventMap.current.values();
126
+ const a = Math.abs(x2 - x1);
127
+ const b = Math.abs(y2 - y1);
128
+ return {
129
+ middle: [(x1 + x2) / 2, (y1 + y2) / 2],
130
+ spacing: Math.sqrt(a * a + b * b)
131
+ };
132
+ };
133
+ const pinchingCancelListened = useRef(false);
134
+ const pinchingPointerDown = useCallback((e) => {
135
+ if (!syncOptions.current.pinchable || pointerEventMap.current.size >= 2) {
136
+ return;
137
+ }
138
+ pointerEventMap.current.set(e.pointerId, e);
139
+ if (pointerEventMap.current.size === 2) {
140
+ draggingPointerCancel(e.nativeEvent);
141
+ isPinching.current = true;
142
+ document.documentElement.style.userSelect = 'none';
143
+ const { middle: startMiddle, spacing: startSpacing } = calPinchInfo();
144
+ pinchStartMiddle.current = startMiddle;
145
+ pinchStartSpacing.current = startSpacing;
146
+ data.current = syncOptions.current.onPinchStart?.({ startMiddle, startSpacing });
147
+ addEventListener('pointermove', pinchingPointerMove);
148
+ }
149
+ if (pinchingCancelListened.current) {
150
+ return;
151
+ }
152
+ pinchingCancelListened.current = true;
153
+ addEventListener('pointerup', pinchingPointerUp);
154
+ addEventListener('pointercancel', pinchingPointerCancel);
155
+ }, []);
156
+ const settlePinchInfo = () => {
157
+ const { middle: currentMiddle, spacing: currentSpacing } = calPinchInfo();
158
+ const diffMiddleX = (currentMiddle[0] - pinchStartMiddle.current[0]) / syncOptions.current.zoom;
159
+ const diffMiddleY = (currentMiddle[1] - pinchStartMiddle.current[1]) / syncOptions.current.zoom;
160
+ return {
161
+ startMiddle: pinchStartMiddle.current,
162
+ currentMiddle,
163
+ diffMiddle: [diffMiddleX, diffMiddleY],
164
+ startSpacing: pinchStartSpacing.current,
165
+ currentSpacing,
166
+ diffSpacing: currentSpacing - pinchStartSpacing.current,
167
+ data: data.current
168
+ };
169
+ };
170
+ const pinchingPointerMove = useCallback((e) => {
171
+ const event = pointerEventMap.current.get(e.pointerId);
172
+ if (!event) {
173
+ return;
174
+ }
175
+ e.preventDefault();
176
+ event.clientX = e.clientX;
177
+ event.clientY = e.clientY;
178
+ syncOptions.current.onPinch?.(settlePinchInfo());
179
+ }, []);
180
+ const debounce = useRef(void 0);
181
+ const pinchingPointerCancel = useCallback((e) => {
182
+ isPinching.current = false;
183
+ pointerEventMap.current.delete(e.pointerId);
184
+ if (!pointerEventMap.current.size) {
185
+ pinchingCancelListened.current = false;
186
+ removeEventListener('pointermove', pinchingPointerMove);
187
+ removeEventListener('pointerup', pinchingPointerUp);
188
+ removeEventListener('pointercancel', pinchingPointerCancel);
189
+ }
190
+ }, []);
191
+ const pinchingPointerUp = useCallback((e) => {
192
+ if (isPinching.current) {
193
+ if (debounce.current) {
194
+ clearTimeout(debounce.current);
195
+ debounce.current = void 0;
196
+ isRollback.current
197
+ = pinchingCancelListened.current
198
+ = false;
199
+ document.documentElement.style.userSelect = '';
200
+ syncOptions.current.onPinchEnd?.(settlePinchInfo());
201
+ }
202
+ else {
203
+ debounce.current = setTimeout(() => {
204
+ isRollback.current = true;
205
+ dragStartFn(pointerEventMap.current.values().next().value);
206
+ }, 50);
207
+ }
208
+ }
209
+ pinchingPointerCancel(e);
210
+ }, []);
211
+ /**
212
+ * --------------------------------------------------------------------------------
213
+ * 托管touch与click事件
214
+ */
215
+ const preventFn = useRef(void 0);
216
+ const onTouchStart = useCallback(() => {
217
+ preventFn.current = (e) => {
218
+ e.cancelable && e.preventDefault();
219
+ };
220
+ addEventListener('touchmove', preventFn.current, { passive: false });
221
+ }, []);
222
+ const onClick = useCallback((e) => {
223
+ if (isDragged.current || isPinching.current) {
224
+ // 已经触发了拖拽或捏合,避免触发点击事件
225
+ e.preventDefault();
226
+ e.stopPropagation();
227
+ }
228
+ else {
229
+ syncOptions.current.onClick?.(e);
230
+ }
231
+ }, []);
232
+ const { preventNativeTouchMove, pinchable } = syncOptions.current;
233
+ return {
234
+ draggableHandles: {
235
+ onPointerDown: draggingPointerDown,
236
+ onClick,
237
+ ...preventNativeTouchMove && !pinchable && { onTouchStart }
238
+ },
239
+ pinchableHandles: {
240
+ onPointerDown: pinchingPointerDown,
241
+ onClick,
242
+ ...preventNativeTouchMove && pinchable && { onTouchStart }
243
+ }
244
+ };
245
+ }
@@ -3,6 +3,7 @@ export * from './curd';
3
3
  export * from './dataGrid';
4
4
  export * from './dnd';
5
5
  export * from './form';
6
+ export * from './gesture';
6
7
  export * from './hooks';
7
8
  export * from './keyboard';
8
9
  export * from './polyfill';
@@ -3,6 +3,7 @@ export * from './curd';
3
3
  export * from './dataGrid';
4
4
  export * from './dnd';
5
5
  export * from './form';
6
+ export * from './gesture';
6
7
  export * from './hooks';
7
8
  export * from './keyboard';
8
9
  export * from './polyfill';
@@ -89,7 +89,7 @@ export function useTouchRipple(colorPropsValue) {
89
89
  return Color(colorTransfer(colorPropsValue, theme)).alpha(.6).string();
90
90
  }, [colorPropsValue, theme]);
91
91
  return (element) => {
92
- typeof element.animate === 'function' && element.animate([
92
+ element.animate([
93
93
  {
94
94
  outlineWidth: '0',
95
95
  outlineStyle: 'solid',
@@ -116,8 +116,6 @@ export declare function findPredecessor(target: Element, callback: (el: Element)
116
116
  export declare function listenAllPredecessorsScroll(target: Element | Document, listener: (e: Event) => void): () => void;
117
117
  /**
118
118
  * 将数值限制在某个范围内
119
- * @param value
120
- * @param {[min, max]}
121
119
  */
122
120
  export declare function range(value: number, min?: number, max?: number): number;
123
121
  /**
@@ -262,8 +262,6 @@ export function listenAllPredecessorsScroll(target, listener) {
262
262
  }
263
263
  /**
264
264
  * 将数值限制在某个范围内
265
- * @param value
266
- * @param {[min, max]}
267
265
  */
268
266
  export function range(value, min = -Infinity, max = Infinity) {
269
267
  return Math.max(min, Math.min(max, value));