import { type PublicView, type Ref, type ViewFn } from "../view"; export type BaseEventData = { stopPropagation: () => void; preventDefault: () => void; }; export type PointerEventData = BaseEventData & { x: number; y: number; /** Pointer ID — pass to setPointerCapture. */ pointerId: number; pointerType: "mouse" | "touch" | "pen" | ""; button: number; buttons: number; target: HTMLElement; /** The element the handler is bound to (handles event delegation correctly). */ currentTarget: HTMLElement; /** Capture the pointer to currentTarget — keeps move/up firing when the pointer leaves bounds. */ capture: () => void; release: () => void; /** Escape hatch — the underlying DOM event. Avoid where the typed fields cover the use case. */ nativeEvent: Event; }; export type KeyEventData = BaseEventData & { key: string; code: string; }; export type InputEventData = BaseEventData & { value: string; checked: boolean; }; export type FocusEventData = BaseEventData; export type ScrollEventData = BaseEventData & { scrollTop: number; scrollLeft: number; }; export type LoadEventData = BaseEventData; export type ErrorEventData = BaseEventData & { message: string; }; export type ToggleEventData = BaseEventData & { open: boolean; }; export type MediaEventData = BaseEventData & { muted: boolean; paused: boolean; volume: number; currentTime: number; duration: number; }; export type WheelEventData = PointerEventData & { deltaX: number; deltaY: number; deltaZ: number; /** 0 = pixel, 1 = line, 2 = page */ deltaMode: number; }; export type DragEventData = PointerEventData & { dataTransfer: DataTransfer | null; }; export type ClipboardEventData = BaseEventData & { clipboardData: DataTransfer | null; }; export type SubmitEventData = BaseEventData & { submitter: HTMLElement | null; }; export type BeforeToggleEventData = BaseEventData & { oldState: string; newState: string; }; /** * Fired on the receiver of a `