Files
sky_phone/frontend/src/utils/notificationSwipe.ts
T
2026-08-13 03:10:40 +02:00

47 lines
1.2 KiB
TypeScript

export type NotificationSwipeAxis = 'horizontal' | 'vertical'
export const NOTIFICATION_SWIPE_ACTION_WIDTH = 76
export const NOTIFICATION_SWIPE_AXIS_LOCK = 8
export const NOTIFICATION_SWIPE_TRIGGER = 42
export function resolveNotificationSwipeAxis(
deltaX: number,
deltaY: number,
): NotificationSwipeAxis | null {
const horizontalDistance = Math.abs(deltaX)
const verticalDistance = Math.abs(deltaY)
if (
Math.max(horizontalDistance, verticalDistance) <
NOTIFICATION_SWIPE_AXIS_LOCK
) {
return null
}
return horizontalDistance > verticalDistance * 1.15
? 'horizontal'
: 'vertical'
}
export function clampNotificationSwipeOffset(deltaX: number): number {
if (deltaX >= 0) return 0
const distance = Math.abs(deltaX)
const resistedDistance =
distance <= NOTIFICATION_SWIPE_ACTION_WIDTH
? distance
: NOTIFICATION_SWIPE_ACTION_WIDTH +
(distance - NOTIFICATION_SWIPE_ACTION_WIDTH) * 0.16
return -Math.min(resistedDistance, NOTIFICATION_SWIPE_ACTION_WIDTH + 16)
}
export function shouldRevealNotificationAction(
offset: number,
velocityX: number,
): boolean {
return (
offset <= -NOTIFICATION_SWIPE_TRIGGER ||
(offset <= -18 && velocityX <= -0.45)
)
}