@solid-primitives/pointer
Version:
A collection of primitives, giving you a nicer API to handle pointer events in a reactive context.
49 lines (48 loc) • 1.87 kB
TypeScript
import { JSX } from "solid-js";
export type PointerType = "mouse" | "touch" | "pen";
export type EventTarget = Window | Document | HTMLElement;
export type PointerEventNames = "over" | "enter" | "down" | "move" | "up" | "cancel" | "out" | "leave" | "gotCapture" | "lostCapture";
export type OnEventName<T extends string> = `on${Lowercase<T>}` | `on${Capitalize<T>}`;
export type OnEventRecord<T extends string, V> = Record<OnEventName<T>, V>;
export type Handler = (e: PointerEvent) => void;
export type AnyOnEventName = `on${string}`;
export type ReverseOnEventName<T> = T extends string ? Lowercase<T extends `on${infer K}` ? K : `${T}`> : never;
export type ParsedEventHandlers<H extends Record<AnyOnEventName, (v: any) => void>> = {
[K in ReverseOnEventName<keyof H>]: H[`on${K}`];
};
export type PointerState = {
pressure: number;
pointerId: number;
tiltX: number;
tiltY: number;
width: number;
height: number;
twist: number;
pointerType: PointerType | null;
x: number;
y: number;
};
export type PointerStateWithActive = PointerState & {
isActive: boolean;
};
export type PointerListItem = PointerState & {
isDown: boolean;
};
declare module "solid-js" {
namespace JSX {
interface Directives {
pointerHover: PointerHoverDirectiveProps;
}
}
}
export type E = JSX.Element;
export type PointerPositionDirectiveHandler = (state: PointerStateWithActive, el: Element) => void;
export type PointerPositionDirectiveProps = PointerPositionDirectiveHandler | {
pointerTypes?: PointerType[];
handler: PointerPositionDirectiveHandler;
};
export type PointerHoverDirectiveHandler = (hovering: boolean, el: Element) => void;
export type PointerHoverDirectiveProps = PointerHoverDirectiveHandler | {
pointerTypes?: PointerType[];
handler: PointerHoverDirectiveHandler;
};