@canlooks/can-ui 0.0.42 → 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.
- package/dist/cjs/components/alert/alert.style.js +1 -0
- package/dist/cjs/components/checkboxBase/checkboxBase.js +1 -2
- package/dist/cjs/components/checkboxBaseGroup/checkboxBaseGroup.d.ts +0 -2
- package/dist/cjs/components/checkboxBaseGroup/checkboxBaseGroup.js +3 -3
- package/dist/cjs/components/clickAway/clickAway.d.ts +285 -1
- package/dist/cjs/components/clickAway/clickAway.js +1 -2
- package/dist/cjs/components/dataGrid/columnResize.js +5 -5
- package/dist/cjs/components/dataGrid/dataGrid.js +1 -1
- package/dist/cjs/components/dataGrid/dataGridRows.js +3 -1
- package/dist/cjs/components/descriptions/descriptionItem.d.ts +3 -3
- package/dist/cjs/components/draggable/draggable.d.ts +6 -6
- package/dist/cjs/components/draggable/draggable.js +13 -18
- package/dist/cjs/components/{image/imagePreview.d.ts → gallery/gallery.d.ts} +7 -3
- package/dist/cjs/components/gallery/gallery.js +165 -0
- package/dist/{esm/components/image/imagePreview.style.d.ts → cjs/components/gallery/gallery.style.d.ts} +3 -1
- package/dist/cjs/components/{image/imagePreview.style.js → gallery/gallery.style.js} +49 -13
- package/dist/cjs/components/gallery/imageItem.d.ts +14 -0
- package/dist/cjs/components/gallery/imageItem.js +51 -0
- package/dist/cjs/components/gallery/index.d.ts +1 -0
- package/dist/cjs/components/gallery/index.js +4 -0
- package/dist/cjs/components/image/image.d.ts +2 -2
- package/dist/cjs/components/image/image.js +3 -3
- package/dist/cjs/components/image/index.d.ts +0 -1
- package/dist/cjs/components/image/index.js +0 -1
- package/dist/cjs/components/overlayBase/overlayBase.js +1 -1
- package/dist/cjs/components/palette/palette.d.ts +3 -3
- package/dist/cjs/components/palette/palette.js +9 -9
- package/dist/cjs/components/pickerDialog/pickerDialog.style.js +6 -0
- package/dist/cjs/components/pinchable/index.d.ts +1 -0
- package/dist/cjs/components/pinchable/index.js +4 -0
- package/dist/cjs/components/pinchable/pinchable.d.ts +33 -0
- package/dist/cjs/components/pinchable/pinchable.js +160 -0
- package/dist/cjs/components/pinchable/pinchable.style.d.ts +6 -0
- package/dist/cjs/components/pinchable/pinchable.style.js +21 -0
- package/dist/cjs/components/placeholder/placeholder.style.js +1 -0
- package/dist/cjs/components/progress/progress.d.ts +1 -1
- package/dist/cjs/components/rating/rating.d.ts +2 -2
- package/dist/cjs/components/rating/rating.js +2 -5
- package/dist/cjs/components/rating/rating.style.js +1 -2
- package/dist/cjs/components/resizable/resizable.d.ts +2 -2
- package/dist/cjs/components/resizable/resizable.js +12 -12
- package/dist/cjs/components/scrollbar/scrollbar.d.ts +1 -1
- package/dist/cjs/components/scrollbar/scrollbar.js +6 -6
- package/dist/cjs/components/segmented/SegmentedOption.d.ts +1 -1
- package/dist/cjs/components/selectedList/selectedItem.js +1 -1
- package/dist/cjs/components/selectedList/selectedList.style.js +1 -1
- package/dist/cjs/components/skeleton/skeleton.d.ts +1 -1
- package/dist/cjs/components/slidableActions/slidableActions.d.ts +9 -5
- package/dist/cjs/components/slidableActions/slidableActions.js +21 -25
- package/dist/cjs/components/slidableActions/slidableActions.style.d.ts +1 -1
- package/dist/cjs/components/slidableActions/slidableActions.style.js +14 -13
- package/dist/cjs/components/slidableActions/slidableActionsAction.d.ts +4 -2
- package/dist/cjs/components/slidableActions/slidableActionsAction.js +6 -2
- package/dist/cjs/components/slider/slider.d.ts +3 -3
- package/dist/cjs/components/slider/slider.js +8 -8
- package/dist/cjs/components/tabs/tabs.js +1 -1
- package/dist/cjs/components/theme/themeVariables.js +1 -1
- package/dist/cjs/components/upload/itemStatus.d.ts +1 -1
- package/dist/cjs/components/upload/itemStatus.js +3 -0
- package/dist/cjs/components/upload/upload.d.ts +3 -3
- package/dist/cjs/components/upload/upload.js +1 -1
- package/dist/cjs/extensions/documentViewer/documentViewer.js +1 -2
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/utils/dnd.d.ts +0 -42
- package/dist/cjs/utils/dnd.js +0 -121
- package/dist/cjs/utils/gesture.d.ts +69 -0
- package/dist/cjs/utils/gesture.js +250 -0
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.js +1 -0
- package/dist/cjs/utils/style.js +1 -1
- package/dist/cjs/utils/utils.d.ts +0 -2
- package/dist/cjs/utils/utils.js +0 -2
- package/dist/esm/components/alert/alert.style.js +1 -0
- package/dist/esm/components/checkboxBase/checkboxBase.js +1 -2
- package/dist/esm/components/checkboxBaseGroup/checkboxBaseGroup.d.ts +0 -2
- package/dist/esm/components/checkboxBaseGroup/checkboxBaseGroup.js +4 -4
- package/dist/esm/components/clickAway/clickAway.d.ts +285 -1
- package/dist/esm/components/clickAway/clickAway.js +2 -3
- package/dist/esm/components/dataGrid/columnResize.js +6 -6
- package/dist/esm/components/dataGrid/dataGrid.js +1 -1
- package/dist/esm/components/dataGrid/dataGridRows.js +3 -1
- package/dist/esm/components/descriptions/descriptionItem.d.ts +3 -3
- package/dist/esm/components/draggable/draggable.d.ts +6 -6
- package/dist/esm/components/draggable/draggable.js +14 -19
- package/dist/esm/components/{image/imagePreview.d.ts → gallery/gallery.d.ts} +7 -3
- package/dist/esm/components/gallery/gallery.js +162 -0
- package/dist/{cjs/components/image/imagePreview.style.d.ts → esm/components/gallery/gallery.style.d.ts} +3 -1
- package/dist/esm/components/{image/imagePreview.style.js → gallery/gallery.style.js} +49 -13
- package/dist/esm/components/gallery/imageItem.d.ts +14 -0
- package/dist/esm/components/gallery/imageItem.js +48 -0
- package/dist/esm/components/gallery/index.d.ts +1 -0
- package/dist/esm/components/gallery/index.js +1 -0
- package/dist/esm/components/image/image.d.ts +2 -2
- package/dist/esm/components/image/image.js +3 -3
- package/dist/esm/components/image/index.d.ts +0 -1
- package/dist/esm/components/image/index.js +0 -1
- package/dist/esm/components/overlayBase/overlayBase.js +1 -1
- package/dist/esm/components/palette/palette.d.ts +3 -3
- package/dist/esm/components/palette/palette.js +10 -10
- package/dist/esm/components/pickerDialog/pickerDialog.style.js +6 -0
- package/dist/esm/components/pinchable/index.d.ts +1 -0
- package/dist/esm/components/pinchable/index.js +1 -0
- package/dist/esm/components/pinchable/pinchable.d.ts +33 -0
- package/dist/esm/components/pinchable/pinchable.js +157 -0
- package/dist/esm/components/pinchable/pinchable.style.d.ts +6 -0
- package/dist/esm/components/pinchable/pinchable.style.js +18 -0
- package/dist/esm/components/placeholder/placeholder.style.js +1 -0
- package/dist/esm/components/progress/progress.d.ts +1 -1
- package/dist/esm/components/rating/rating.d.ts +2 -2
- package/dist/esm/components/rating/rating.js +2 -5
- package/dist/esm/components/rating/rating.style.js +1 -2
- package/dist/esm/components/resizable/resizable.d.ts +2 -2
- package/dist/esm/components/resizable/resizable.js +13 -13
- package/dist/esm/components/scrollbar/scrollbar.d.ts +1 -1
- package/dist/esm/components/scrollbar/scrollbar.js +7 -7
- package/dist/esm/components/segmented/SegmentedOption.d.ts +1 -1
- package/dist/esm/components/selectedList/selectedItem.js +1 -1
- package/dist/esm/components/selectedList/selectedList.style.js +1 -1
- package/dist/esm/components/skeleton/skeleton.d.ts +1 -1
- package/dist/esm/components/slidableActions/slidableActions.d.ts +9 -5
- package/dist/esm/components/slidableActions/slidableActions.js +22 -26
- package/dist/esm/components/slidableActions/slidableActions.style.d.ts +1 -1
- package/dist/esm/components/slidableActions/slidableActions.style.js +14 -13
- package/dist/esm/components/slidableActions/slidableActionsAction.d.ts +4 -2
- package/dist/esm/components/slidableActions/slidableActionsAction.js +6 -2
- package/dist/esm/components/slider/slider.d.ts +3 -3
- package/dist/esm/components/slider/slider.js +9 -9
- package/dist/esm/components/tabs/tabs.js +1 -1
- package/dist/esm/components/theme/themeVariables.js +1 -1
- package/dist/esm/components/upload/itemStatus.d.ts +1 -1
- package/dist/esm/components/upload/itemStatus.js +3 -0
- package/dist/esm/components/upload/upload.d.ts +3 -3
- package/dist/esm/components/upload/upload.js +1 -1
- package/dist/esm/extensions/documentViewer/documentViewer.js +2 -3
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/utils/dnd.d.ts +0 -42
- package/dist/esm/utils/dnd.js +0 -120
- package/dist/esm/utils/gesture.d.ts +69 -0
- package/dist/esm/utils/gesture.js +245 -0
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/style.js +1 -1
- package/dist/esm/utils/utils.d.ts +0 -2
- package/dist/esm/utils/utils.js +0 -2
- package/documentation/dist/assets/{index-B6FOULC1.js → index-DXo4Z-bc.js} +1281 -1271
- package/documentation/dist/components/actionSheet.md +3 -3
- package/documentation/dist/components/autocomplete.md +10 -10
- package/documentation/dist/components/breadcrumb.md +1 -1
- package/documentation/dist/components/checkbox.md +24 -1
- package/documentation/dist/components/contextMenu.md +1 -1
- package/documentation/dist/components/counter.md +13 -13
- package/documentation/dist/components/dialog.md +3 -3
- package/documentation/dist/components/formDialog.md +6 -6
- package/documentation/dist/components/image.md +5 -3
- package/documentation/dist/components/menu.md +1 -1
- package/documentation/dist/components/pagination.md +15 -1
- package/documentation/dist/components/pickerDialog.md +56 -0
- package/documentation/dist/components/placeholder.md +30 -0
- package/documentation/dist/components/progress.md +43 -0
- package/documentation/dist/components/radio.md +37 -0
- package/documentation/dist/components/rating.md +35 -0
- package/documentation/dist/components/resizable.md +41 -0
- package/documentation/dist/components/scrollbar.md +31 -0
- package/documentation/dist/components/segmented.md +56 -0
- package/documentation/dist/components/select.md +30 -0
- package/documentation/dist/components/skeleton.md +26 -0
- package/documentation/dist/components/slidableActions.md +53 -0
- package/documentation/dist/guide/globalMethods.md +6 -6
- package/documentation/dist/index.html +1 -1
- package/package.json +6 -6
- package/dist/cjs/components/image/imagePreview.js +0 -63
- 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
|
+
}
|
package/dist/esm/utils/index.js
CHANGED
package/dist/esm/utils/style.js
CHANGED
|
@@ -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
|
-
|
|
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
|
/**
|
package/dist/esm/utils/utils.js
CHANGED
|
@@ -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));
|