@a-type/ui 0.6.7 → 0.6.9
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/actions/ActionBar.js +2 -2
- package/dist/cjs/components/actions/ActionBar.js.map +1 -1
- package/dist/cjs/components/actions/ActionButton.js +2 -2
- package/dist/cjs/components/actions/ActionButton.js.map +1 -1
- package/dist/cjs/components/avatar/Avatar.js +2 -2
- package/dist/cjs/components/avatar/Avatar.js.map +1 -1
- package/dist/cjs/components/avatar/AvatarList.js +2 -2
- package/dist/cjs/components/avatar/AvatarList.js.map +1 -1
- package/dist/cjs/components/button/Button.js +2 -2
- package/dist/cjs/components/button/Button.js.map +1 -1
- package/dist/cjs/components/button/classes.js +2 -2
- package/dist/cjs/components/button/classes.js.map +1 -1
- package/dist/cjs/components/camera/Camera.js +2 -2
- package/dist/cjs/components/camera/Camera.js.map +1 -1
- package/dist/cjs/components/card/Card.js +2 -2
- package/dist/cjs/components/card/Card.js.map +1 -1
- package/dist/cjs/components/checkbox/Checkbox.d.ts +1 -1
- package/dist/cjs/components/checkbox/Checkbox.js +3 -3
- package/dist/cjs/components/checkbox/Checkbox.js.map +1 -1
- package/dist/cjs/components/chip/Chip.js +2 -2
- package/dist/cjs/components/chip/Chip.js.map +1 -1
- package/dist/cjs/components/colorPicker/ColorPicker.js +2 -2
- package/dist/cjs/components/colorPicker/ColorPicker.js.map +1 -1
- package/dist/cjs/components/contextMenu/contextMenu.d.ts +1 -1
- package/dist/cjs/components/contextMenu/contextMenu.js +2 -2
- package/dist/cjs/components/contextMenu/contextMenu.js.map +1 -1
- package/dist/cjs/components/datePicker/DatePicker.js +3 -3
- package/dist/cjs/components/datePicker/DatePicker.js.map +1 -1
- package/dist/cjs/components/dialog/Dialog.d.ts +3 -3
- package/dist/cjs/components/dialog/Dialog.js +5 -5
- package/dist/cjs/components/dialog/Dialog.js.map +1 -1
- package/dist/cjs/components/divider/Divider.js +2 -2
- package/dist/cjs/components/divider/Divider.js.map +1 -1
- package/dist/cjs/components/dropdownMenu/DropdownMenu.js +2 -2
- package/dist/cjs/components/dropdownMenu/DropdownMenu.js.map +1 -1
- package/dist/cjs/components/forms/Form.d.ts +1 -1
- package/dist/cjs/components/forms/TextField.js.map +1 -1
- package/dist/cjs/components/icon/Icon.js +2 -2
- package/dist/cjs/components/icon/Icon.js.map +1 -1
- package/dist/cjs/components/imageUploader/ImageUploader.js +2 -2
- package/dist/cjs/components/imageUploader/ImageUploader.js.map +1 -1
- package/dist/cjs/components/infiniteLoadTrigger/InfiniteLoadTrigger.js +2 -2
- package/dist/cjs/components/infiniteLoadTrigger/InfiniteLoadTrigger.js.map +1 -1
- package/dist/cjs/components/input/Input.js +3 -3
- package/dist/cjs/components/input/Input.js.map +1 -1
- package/dist/cjs/components/layouts/PageContent.js +2 -2
- package/dist/cjs/components/layouts/PageContent.js.map +1 -1
- package/dist/cjs/components/layouts/PageFixedArea.js +2 -2
- package/dist/cjs/components/layouts/PageFixedArea.js.map +1 -1
- package/dist/cjs/components/layouts/PageNav.js +2 -2
- package/dist/cjs/components/layouts/PageNav.js.map +1 -1
- package/dist/cjs/components/layouts/PageNowPlaying.js +2 -2
- package/dist/cjs/components/layouts/PageNowPlaying.js.map +1 -1
- package/dist/cjs/components/layouts/PageRoot.js +2 -2
- package/dist/cjs/components/layouts/PageRoot.js.map +1 -1
- package/dist/cjs/components/layouts/PageSection.js +2 -2
- package/dist/cjs/components/layouts/PageSection.js.map +1 -1
- package/dist/cjs/components/navBar/NavBar.js +3 -3
- package/dist/cjs/components/navBar/NavBar.js.map +1 -1
- package/dist/cjs/components/note/Note.js +2 -2
- package/dist/cjs/components/note/Note.js.map +1 -1
- package/dist/cjs/components/numberStepper/NumberStepper.js +2 -2
- package/dist/cjs/components/numberStepper/NumberStepper.js.map +1 -1
- package/dist/cjs/components/peek/Peek.js +2 -2
- package/dist/cjs/components/peek/Peek.js.map +1 -1
- package/dist/cjs/components/popover/Popover.d.ts +1 -1
- package/dist/cjs/components/popover/Popover.js +2 -2
- package/dist/cjs/components/popover/Popover.js.map +1 -1
- package/dist/cjs/components/richEditor/RichEditor.js +2 -2
- package/dist/cjs/components/richEditor/RichEditor.js.map +1 -1
- package/dist/cjs/components/select/Select.js +4 -4
- package/dist/cjs/components/select/Select.js.map +1 -1
- package/dist/cjs/components/skeletons/skeletons.js +2 -2
- package/dist/cjs/components/skeletons/skeletons.js.map +1 -1
- package/dist/cjs/components/spinner/Spinner.js +2 -2
- package/dist/cjs/components/spinner/Spinner.js.map +1 -1
- package/dist/cjs/components/textArea/TextArea.js +2 -2
- package/dist/cjs/components/textArea/TextArea.js.map +1 -1
- package/dist/cjs/components/tooltip/Tooltip.js +2 -2
- package/dist/cjs/components/tooltip/Tooltip.js.map +1 -1
- package/dist/cjs/hooks/index.d.ts +2 -0
- package/dist/cjs/hooks/index.js +2 -0
- package/dist/cjs/hooks/index.js.map +1 -1
- package/dist/cjs/hooks/useAnimationFrame.d.ts +1 -0
- package/dist/cjs/hooks/useAnimationFrame.js +25 -0
- package/dist/cjs/hooks/useAnimationFrame.js.map +1 -0
- package/dist/cjs/hooks/useLongPress.d.ts +11 -0
- package/dist/cjs/hooks/useLongPress.js +117 -0
- package/dist/cjs/hooks/useLongPress.js.map +1 -0
- package/dist/cjs/hooks/withClassName.d.ts +1 -1
- package/dist/cjs/hooks/withClassName.js +2 -2
- package/dist/cjs/hooks/withClassName.js.map +1 -1
- package/dist/esm/components/actions/ActionBar.js +1 -1
- package/dist/esm/components/actions/ActionBar.js.map +1 -1
- package/dist/esm/components/actions/ActionButton.js +1 -1
- package/dist/esm/components/actions/ActionButton.js.map +1 -1
- package/dist/esm/components/avatar/Avatar.js +1 -1
- package/dist/esm/components/avatar/Avatar.js.map +1 -1
- package/dist/esm/components/avatar/AvatarList.js +1 -1
- package/dist/esm/components/avatar/AvatarList.js.map +1 -1
- package/dist/esm/components/button/Button.js +1 -1
- package/dist/esm/components/button/Button.js.map +1 -1
- package/dist/esm/components/button/classes.js +1 -1
- package/dist/esm/components/button/classes.js.map +1 -1
- package/dist/esm/components/camera/Camera.js +1 -1
- package/dist/esm/components/camera/Camera.js.map +1 -1
- package/dist/esm/components/card/Card.js +1 -1
- package/dist/esm/components/card/Card.js.map +1 -1
- package/dist/esm/components/checkbox/Checkbox.d.ts +1 -1
- package/dist/esm/components/checkbox/Checkbox.js +1 -1
- package/dist/esm/components/checkbox/Checkbox.js.map +1 -1
- package/dist/esm/components/chip/Chip.js +1 -1
- package/dist/esm/components/chip/Chip.js.map +1 -1
- package/dist/esm/components/colorPicker/ColorPicker.js +1 -1
- package/dist/esm/components/colorPicker/ColorPicker.js.map +1 -1
- package/dist/esm/components/contextMenu/contextMenu.d.ts +1 -1
- package/dist/esm/components/contextMenu/contextMenu.js +1 -1
- package/dist/esm/components/contextMenu/contextMenu.js.map +1 -1
- package/dist/esm/components/datePicker/DatePicker.js +1 -1
- package/dist/esm/components/datePicker/DatePicker.js.map +1 -1
- package/dist/esm/components/dialog/Dialog.d.ts +3 -3
- package/dist/esm/components/dialog/Dialog.js +1 -1
- package/dist/esm/components/dialog/Dialog.js.map +1 -1
- package/dist/esm/components/divider/Divider.js +1 -1
- package/dist/esm/components/divider/Divider.js.map +1 -1
- package/dist/esm/components/dropdownMenu/DropdownMenu.js +1 -1
- package/dist/esm/components/dropdownMenu/DropdownMenu.js.map +1 -1
- package/dist/esm/components/forms/Form.d.ts +1 -1
- package/dist/esm/components/forms/TextField.js.map +1 -1
- package/dist/esm/components/icon/Icon.js +1 -1
- package/dist/esm/components/icon/Icon.js.map +1 -1
- package/dist/esm/components/imageUploader/ImageUploader.js +1 -1
- package/dist/esm/components/imageUploader/ImageUploader.js.map +1 -1
- package/dist/esm/components/infiniteLoadTrigger/InfiniteLoadTrigger.js +1 -1
- package/dist/esm/components/infiniteLoadTrigger/InfiniteLoadTrigger.js.map +1 -1
- package/dist/esm/components/input/Input.js +1 -1
- package/dist/esm/components/input/Input.js.map +1 -1
- package/dist/esm/components/layouts/PageContent.js +1 -1
- package/dist/esm/components/layouts/PageContent.js.map +1 -1
- package/dist/esm/components/layouts/PageFixedArea.js +1 -1
- package/dist/esm/components/layouts/PageFixedArea.js.map +1 -1
- package/dist/esm/components/layouts/PageNav.js +1 -1
- package/dist/esm/components/layouts/PageNav.js.map +1 -1
- package/dist/esm/components/layouts/PageNowPlaying.js +1 -1
- package/dist/esm/components/layouts/PageNowPlaying.js.map +1 -1
- package/dist/esm/components/layouts/PageRoot.js +1 -1
- package/dist/esm/components/layouts/PageRoot.js.map +1 -1
- package/dist/esm/components/layouts/PageSection.js +1 -1
- package/dist/esm/components/layouts/PageSection.js.map +1 -1
- package/dist/esm/components/navBar/NavBar.js +1 -1
- package/dist/esm/components/navBar/NavBar.js.map +1 -1
- package/dist/esm/components/note/Note.js +1 -1
- package/dist/esm/components/note/Note.js.map +1 -1
- package/dist/esm/components/numberStepper/NumberStepper.js +1 -1
- package/dist/esm/components/numberStepper/NumberStepper.js.map +1 -1
- package/dist/esm/components/peek/Peek.js +1 -1
- package/dist/esm/components/peek/Peek.js.map +1 -1
- package/dist/esm/components/popover/Popover.d.ts +1 -1
- package/dist/esm/components/popover/Popover.js +1 -1
- package/dist/esm/components/popover/Popover.js.map +1 -1
- package/dist/esm/components/richEditor/RichEditor.js +1 -1
- package/dist/esm/components/richEditor/RichEditor.js.map +1 -1
- package/dist/esm/components/select/Select.js +1 -1
- package/dist/esm/components/select/Select.js.map +1 -1
- package/dist/esm/components/skeletons/skeletons.js +1 -1
- package/dist/esm/components/skeletons/skeletons.js.map +1 -1
- package/dist/esm/components/spinner/Spinner.js +1 -1
- package/dist/esm/components/spinner/Spinner.js.map +1 -1
- package/dist/esm/components/textArea/TextArea.js +1 -1
- package/dist/esm/components/textArea/TextArea.js.map +1 -1
- package/dist/esm/components/tooltip/Tooltip.js +1 -1
- package/dist/esm/components/tooltip/Tooltip.js.map +1 -1
- package/dist/esm/hooks/index.d.ts +2 -0
- package/dist/esm/hooks/index.js +2 -0
- package/dist/esm/hooks/index.js.map +1 -1
- package/dist/esm/hooks/useAnimationFrame.d.ts +1 -0
- package/dist/esm/hooks/useAnimationFrame.js +21 -0
- package/dist/esm/hooks/useAnimationFrame.js.map +1 -0
- package/dist/esm/hooks/useLongPress.d.ts +11 -0
- package/dist/esm/hooks/useLongPress.js +113 -0
- package/dist/esm/hooks/useLongPress.js.map +1 -0
- package/dist/esm/hooks/withClassName.d.ts +1 -1
- package/dist/esm/hooks/withClassName.js +1 -1
- package/dist/esm/hooks/withClassName.js.map +1 -1
- package/package.json +3 -3
- package/src/components/actions/ActionBar.tsx +1 -1
- package/src/components/actions/ActionButton.tsx +1 -1
- package/src/components/avatar/Avatar.tsx +1 -1
- package/src/components/avatar/AvatarList.tsx +1 -1
- package/src/components/button/Button.tsx +1 -1
- package/src/components/button/classes.tsx +1 -1
- package/src/components/camera/Camera.tsx +1 -1
- package/src/components/card/Card.tsx +1 -1
- package/src/components/checkbox/Checkbox.tsx +1 -1
- package/src/components/chip/Chip.tsx +1 -1
- package/src/components/colorPicker/ColorPicker.tsx +1 -1
- package/src/components/contextMenu/contextMenu.tsx +1 -1
- package/src/components/datePicker/DatePicker.tsx +1 -1
- package/src/components/dialog/Dialog.tsx +1 -1
- package/src/components/divider/Divider.tsx +1 -1
- package/src/components/dropdownMenu/DropdownMenu.tsx +1 -1
- package/src/components/forms/TextField.tsx +81 -81
- package/src/components/icon/Icon.tsx +1 -1
- package/src/components/imageUploader/ImageUploader.tsx +1 -1
- package/src/components/infiniteLoadTrigger/InfiniteLoadTrigger.tsx +1 -1
- package/src/components/input/Input.tsx +1 -1
- package/src/components/layouts/PageContent.tsx +1 -1
- package/src/components/layouts/PageFixedArea.tsx +1 -1
- package/src/components/layouts/PageNav.tsx +1 -1
- package/src/components/layouts/PageNowPlaying.tsx +1 -1
- package/src/components/layouts/PageRoot.tsx +1 -1
- package/src/components/layouts/PageSection.tsx +1 -1
- package/src/components/navBar/NavBar.tsx +1 -1
- package/src/components/note/Note.tsx +1 -1
- package/src/components/numberStepper/NumberStepper.tsx +1 -1
- package/src/components/peek/Peek.tsx +60 -60
- package/src/components/popover/Popover.tsx +1 -1
- package/src/components/richEditor/RichEditor.tsx +1 -1
- package/src/components/select/Select.tsx +1 -1
- package/src/components/skeletons/skeletons.tsx +1 -1
- package/src/components/spinner/Spinner.tsx +1 -1
- package/src/components/textArea/TextArea.tsx +1 -1
- package/src/components/tooltip/Tooltip.tsx +1 -1
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useAnimationFrame.ts +23 -0
- package/src/hooks/useLongPress.ts +135 -0
- package/src/hooks/withClassName.tsx +1 -1
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { useDrag } from '@use-gesture/react';
|
|
2
|
+
import { useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { useAnimationFrame } from './useAnimationFrame.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The press gesture must remain within THRESHOLD_DISTANCE until delay time has passed
|
|
7
|
+
* to be considered a press.
|
|
8
|
+
*
|
|
9
|
+
* After delay, the gesture must remain within CANCEL_DISTANCE or be cancelled.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const THRESHOLD_DISTANCE = 10;
|
|
13
|
+
const CANCEL_DISTANCE = 30;
|
|
14
|
+
|
|
15
|
+
export function useLongPress({
|
|
16
|
+
onActivate,
|
|
17
|
+
duration = 2000,
|
|
18
|
+
delay = 200,
|
|
19
|
+
}: {
|
|
20
|
+
onActivate: () => void;
|
|
21
|
+
duration?: number;
|
|
22
|
+
delay?: number;
|
|
23
|
+
}) {
|
|
24
|
+
const [gestureState, setGestureState] = useState<'released' | 'pressed'>(
|
|
25
|
+
'released',
|
|
26
|
+
);
|
|
27
|
+
const [state, setState] = useState<'holding' | 'idle' | 'failed' | 'pending'>(
|
|
28
|
+
'idle',
|
|
29
|
+
);
|
|
30
|
+
const timeoutRef = useRef<NodeJS.Timeout | null>(null);
|
|
31
|
+
const ref = useRef<any>(null);
|
|
32
|
+
|
|
33
|
+
const gestureStateRef = useRef<{ distance: number; startedAt: number }>({
|
|
34
|
+
distance: 0,
|
|
35
|
+
startedAt: 0,
|
|
36
|
+
});
|
|
37
|
+
useDrag(
|
|
38
|
+
({ first, cancel, elapsedTime, down, distance }) => {
|
|
39
|
+
const totalDistance = Math.sqrt(
|
|
40
|
+
Math.pow(distance[0], 2) + Math.pow(distance[1], 2),
|
|
41
|
+
);
|
|
42
|
+
gestureStateRef.current.distance = totalDistance;
|
|
43
|
+
|
|
44
|
+
if (elapsedTime < delay && totalDistance > THRESHOLD_DISTANCE) {
|
|
45
|
+
cancel();
|
|
46
|
+
setGestureState('released');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (totalDistance > CANCEL_DISTANCE) {
|
|
51
|
+
cancel();
|
|
52
|
+
setGestureState('released');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (first) {
|
|
57
|
+
gestureStateRef.current.startedAt = Date.now();
|
|
58
|
+
try {
|
|
59
|
+
navigator?.vibrate?.(200);
|
|
60
|
+
} catch (err) {
|
|
61
|
+
console.log(err);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (down) {
|
|
66
|
+
setGestureState('pressed');
|
|
67
|
+
} else {
|
|
68
|
+
setGestureState('released');
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
// triggerAllEvents: true,
|
|
73
|
+
// preventDefault: true,
|
|
74
|
+
target: ref,
|
|
75
|
+
},
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
useAnimationFrame(() => {
|
|
79
|
+
const gestureDuration = gestureStateRef.current.startedAt
|
|
80
|
+
? Date.now() - gestureStateRef.current.startedAt
|
|
81
|
+
: 0;
|
|
82
|
+
const distance = gestureStateRef.current.distance;
|
|
83
|
+
|
|
84
|
+
// nothing to do in this case
|
|
85
|
+
if (
|
|
86
|
+
gestureState === 'released' &&
|
|
87
|
+
(state === 'idle' || state === 'failed')
|
|
88
|
+
) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (gestureState === 'released') {
|
|
93
|
+
if (state === 'holding') {
|
|
94
|
+
// holding for longer than duration - activate
|
|
95
|
+
if (gestureDuration >= duration + delay && distance < CANCEL_DISTANCE) {
|
|
96
|
+
onActivate();
|
|
97
|
+
setState('idle');
|
|
98
|
+
} else {
|
|
99
|
+
// normal release before duration - cancel
|
|
100
|
+
setState('idle');
|
|
101
|
+
}
|
|
102
|
+
} else if (state === 'pending' && distance < THRESHOLD_DISTANCE) {
|
|
103
|
+
setState('failed');
|
|
104
|
+
}
|
|
105
|
+
} else if (gestureState === 'pressed') {
|
|
106
|
+
// begin a new press
|
|
107
|
+
if (state === 'idle' || state === 'failed') {
|
|
108
|
+
setState('pending');
|
|
109
|
+
} else if (state === 'pending' && gestureDuration >= delay) {
|
|
110
|
+
// begin holding after delay has passed
|
|
111
|
+
setState('holding');
|
|
112
|
+
} else if (distance > CANCEL_DISTANCE) {
|
|
113
|
+
// cancel if moved too far
|
|
114
|
+
setState('idle');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
useEffect(() => {
|
|
120
|
+
if (state === 'failed') {
|
|
121
|
+
const timeout = setTimeout(() => {
|
|
122
|
+
setState('idle');
|
|
123
|
+
}, 1000);
|
|
124
|
+
return () => {
|
|
125
|
+
clearTimeout(timeout);
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}, [state]);
|
|
129
|
+
|
|
130
|
+
return {
|
|
131
|
+
ref,
|
|
132
|
+
timeoutRef,
|
|
133
|
+
state,
|
|
134
|
+
};
|
|
135
|
+
}
|