@omnicajs/vue-remote
Version:
Proxy renderer for Vue.js based on @remote-ui
133 lines (115 loc) • 4.11 kB
TypeScript
export interface SerializedEvent {
type: Event['type'];
target: SerializedTarget | null;
currentTarget: SerializedTarget | null;
bubbles: Event['bubbles'];
cancelable: Event['cancelable'];
composed: Event['composed'];
defaultPrevented: Event['defaultPrevented'];
eventPhase: Event['eventPhase'];
isTrusted: Event['isTrusted'];
}
export interface SerializedFile {
lastModified: File['lastModified'];
name: File['webkitRelativePath'];
webkitRelativePath: File['webkitRelativePath'];
size: Blob['size'];
type: Blob['type'];
}
export interface SerializedDataTransfer {
dropEffect: DataTransfer['dropEffect'];
effectAllowed: DataTransfer['effectAllowed'];
types: DataTransfer['types'];
files: SerializedFile[];
}
export interface SerializedTarget {}
export interface SerializedInputEventTarget {
value: string;
}
export interface SerializedInputEvent extends SerializedEvent {
isTrusted: InputEvent['isTrusted'];
data: InputEvent['data'];
target: SerializedInputEventTarget;
}
export interface SerializedDragEvent extends SerializedMouseEvent {
dataTransfer: SerializedDataTransfer | null
}
export interface SerializedFocusEvent extends SerializedEvent {
relatedTarget: { tagName: HTMLElement['tagName'] } | null;
}
export interface SerializedKeyboardEvent extends SerializedEvent {
key: KeyboardEvent['key'];
code: KeyboardEvent['code'];
altKey: KeyboardEvent['altKey'];
ctrlKey: KeyboardEvent['ctrlKey'];
shiftKey: KeyboardEvent['shiftKey'];
metaKey: KeyboardEvent['metaKey'];
}
export interface SerializedMouseEvent extends SerializedEvent {
type: MouseEvent['type'],
clientX: MouseEvent['clientX'],
clientY: MouseEvent['clientY'],
button: MouseEvent['button'],
}
export interface SerializedPointerEvent extends SerializedMouseEvent {
height: PointerEvent['height'];
isPrimary: PointerEvent['isPrimary'];
pointerId: PointerEvent['pointerId'];
pointerType: PointerEvent['pointerType'];
pressure: PointerEvent['pressure'];
tangentialPressure: PointerEvent['tangentialPressure'];
tiltX: PointerEvent['tiltX'];
tiltY: PointerEvent['tiltY'];
twist: PointerEvent['twist'];
width: PointerEvent['width'];
}
export interface SerializedTouch {
clientX: Touch['clientX'];
clientY: Touch['clientY'];
force: Touch['force'];
identifier: Touch['identifier'];
pageX: Touch['pageX'];
pageY: Touch['pageY'];
radiusX: Touch['radiusX'];
radiusY: Touch['radiusY'];
rotationAngle: Touch['rotationAngle'];
screenX: Touch['screenX'];
screenY: Touch['screenY'];
}
export interface SerializedTouchEvent extends SerializedEvent {
altKey: TouchEvent['altKey'];
changedTouches: SerializedTouch[];
ctrlKey: TouchEvent['ctrlKey'];
metaKey: TouchEvent['metaKey'];
shiftKey: TouchEvent['shiftKey'];
targetTouches: SerializedTouch[];
touches: SerializedTouch[];
}
export interface SerializedWheelEvent extends SerializedMouseEvent {
deltaMode: WheelEvent['deltaMode'];
deltaX: WheelEvent['deltaX'];
deltaY: WheelEvent['deltaY'];
deltaZ: WheelEvent['deltaZ'];
DOM_DELTA_PIXEL: WheelEvent['DOM_DELTA_PIXEL'];
DOM_DELTA_LINE: WheelEvent['DOM_DELTA_LINE'];
DOM_DELTA_PAGE: WheelEvent['DOM_DELTA_PAGE'];
}
interface EventMapDistinct {
'input': [InputEvent, SerializedInputEvent];
'drag': [DragEvent, SerializedDragEvent];
'focus': [FocusEvent, SerializedFocusEvent];
'keyboard': [KeyboardEvent, SerializedKeyboardEvent];
'mouse': [MouseEvent, SerializedMouseEvent];
'pointer': [PointerEvent, SerializedPointerEvent];
'touch': [TouchEvent, SerializedTouchEvent];
'wheel': [WheelEvent, SerializedWheelEvent];
}
interface EvenMap extends EventMapDistinct {
'basic': [Event, SerializedEvent];
}
type IsExactlyEvent<E, T> = E extends T ? (T extends E ? true : false) : false
type EventType<E extends Event> = {
[K in keyof EventMapDistinct]: IsExactlyEvent<E, Event> extends true
? 'basic' : (IsExactlyEvent<E, EventMapDistinct[K][0]> extends true ? K : never);
}[keyof EventMapDistinct]
export type SerializedEventType<E extends Event> = EvenMap[EventType<E>][1]