mirror of
https://github.com/linkwarden/linkwarden.git
synced 2026-06-28 14:55:49 +00:00
41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
import { pointerWithin, rectIntersection } from "@dnd-kit/core";
|
|
import { clsx, type ClassValue } from "clsx";
|
|
import { twMerge } from "tailwind-merge";
|
|
|
|
export function cn(...inputs: ClassValue[]) {
|
|
return twMerge(clsx(inputs));
|
|
}
|
|
|
|
export function isPWA() {
|
|
return (
|
|
window.matchMedia("(display-mode: standalone)").matches ||
|
|
(window.navigator as any).standalone ||
|
|
document.referrer.includes("android-app://")
|
|
);
|
|
}
|
|
|
|
export function isIphone() {
|
|
return (
|
|
/iPhone/.test(navigator.userAgent) &&
|
|
!(window as unknown as { MSStream?: any }).MSStream
|
|
);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Custom collision detection algorithm for dnd-kit that first checks for pointer collisions
|
|
* and then falls back to rectangle intersections
|
|
*/
|
|
export function customCollisionDetectionAlgorithm(args: any) {
|
|
// First, let's see if there are any collisions with the pointer
|
|
const pointerCollisions = pointerWithin(args);
|
|
|
|
// Collision detection algorithms return an array of collisions
|
|
if (pointerCollisions.length > 0) {
|
|
return pointerCollisions;
|
|
}
|
|
|
|
// If there are no collisions with the pointer, return rectangle intersections
|
|
return rectIntersection(args);
|
|
}
|