UNPKG

@lynx-js/types

Version:

@lynx-js/types is a type package of all public APIs officially provided by the Lynx team. Using this package can help you better use Lynx APIs to develop your applications.

1,036 lines (936 loc) 31.2 kB
// Copyright 2024 The Lynx Authors. All rights reserved. // Licensed under the Apache License Version 2.0 that can be found in the // LICENSE file in the root directory of this source tree. import { Element as MainThreadElement } from '../main-thread/element'; export interface Target { /** The id selector of the event target. */ id: string; /** The unique identifier of the event target. */ uid: number; /** The collection of custom attributes starting with data- on the event target. */ dataset: { [key: string]: any; }; } export interface BaseEventOrig<T, TargetType = Target> { /** Event type. */ type: string; /** Timestamp when the event was generated. */ timestamp: number; /** Collection of attribute values of the target that triggers the event. */ target: TargetType; /** Collection of attribute values of the target that listens to the event. */ currentTarget: TargetType; /** Additional information. */ detail: T; /** Preventing elements from performing default behavior. */ preventDefault: () => void; /** Prevent the event from bubbling up to the parent element, preventing any parent event handlers from being executed. */ stopPropagation: () => void; } export interface Touch { /** The unique identifier of the finger touching the screen. */ identifier: number; /** The current position of the touch point relative to the touched element's x-coordinate. */ x: number; /** The current position of the touch point relative to the touched element's y-coordinate. */ y: number; /** The current position of the touch point relative to the page's x-coordinate. */ pageX: number; /** The current position of the touch point relative to the page's y-coordinate. */ pageY: number; /** The current position of the touch point relative to the display area's x-coordinate. */ clientX: number; /** The current position of the touch point relative to the display area's y-coordinate. */ clientY: number; } export interface ChangedTouch { identifier: number; x: number; y: number; } export interface BaseCommonEvent<T> extends BaseEventOrig<any, T> {} export interface CommonEvent extends BaseCommonEvent<Target | MainThreadElement> {} export interface BaseTouchEvent<T> extends BaseEventOrig<any, T> { /** * Collection of touch points currently on the touch plane. * @Android * @iOS * @Harmony * @PC */ touches: Array<Touch>; /** * Collection of touch points whose state has changed compared to the last touch event. * @Android * @iOS * @Harmony * @PC */ changedTouches: Array<Touch>; detail: { /** * The current position of the touch point relative to the page's x-coordinate. * @Android * @iOS * @Harmony * @PC */ x: number; /** * The current position of the touch point relative to the page's y-coordinate. * @Android * @iOS * @Harmony * @PC */ y: number; } } export interface TouchEvent extends BaseTouchEvent<Target> {} export interface BaseMouseEvent<T> extends BaseEventOrig<{}, T> { /** * The currently pressed mouse button, if multiple buttons are pressed simultaneously, is the last one pressed. * @PC */ button: number; /** * The current mouse button being pressed, if multiple buttons are simultaneously pressed, it is a bit field composed of all button codes. * @PC */ buttons: number; /** * Current scale factor. Greater than 1 means zoom in. Less than 1 means zoom out. * @PC */ scale: number; /** * clientX * @PC */ x: number; /** * clientY * @PC */ y: number; /** * The current position of the cursor relative to the page's x-coordinate. * @PC */ pageX: number; /** * The current position of the cursor relative to the page's y-coordinate. * @PC */ pageY: number; /** * The current position of the cursor relative to the element's x-coordinate. * @PC */ clientX: number; /** * The current position of the cursor relative to the element's y-coordinate. * @PC */ clientY: number; } export interface MouseEvent extends BaseMouseEvent<Target> {} export interface BaseWheelEvent<T> extends BaseEventOrig<{}, T> { /** * clientX * @PC */ x: number; /** * clientY * @PC */ y: number; /** * The current position of the cursor relative to the page's x-coordinate. * @PC */ pageX: number; /** * The current position of the cursor relative to the page's y-coordinate. * @PC */ pageY: number; /** * The current position of the cursor relative to the element's x-coordinate. * @PC */ clientX: number; /** * The current position of the cursor relative to the element's y-coordinate. * @PC */ clientY: number; /** * The distance of x-axis scrolling on the mouse wheel. * @PC */ deltaX: number; /** * The distance of y-axis scrolling on the mouse wheel. * @PC */ deltaY: number; } export interface WheelEvent extends BaseWheelEvent<Target> {} export interface BaseKeyEvent<T> extends BaseEventOrig<{}, T> { /** * Button Name * @PC */ key: string; } export interface KeyEvent extends BaseKeyEvent<Target> {} export interface BaseAnimationEvent<T> extends BaseEventOrig<{}, T> { /** * Animation params. * @Android * @iOS * @Harmony * @PC */ params: { /** * Animation type. * @Android * @iOS * @Harmony * @PC */ animation_type: 'keyframe-animation'; /** * Animation name. * @Android * @iOS * @Harmony * @PC */ animation_name: string; /** * If new animator enabled. * @Android * @iOS * @Harmony * @PC */ new_animator?: true; }; } export interface AnimationEvent extends BaseAnimationEvent<Target> {} export interface BaseTransitionEvent<T> extends BaseEventOrig<{}, T> { params: | { animation_type: 'transition-animation'; animation_name: 'width' | 'height' | 'left' | 'top' | 'right' | 'bottom' | 'background-color' | 'opacity'; new_animator: true; } | { new_animator: undefined; animation_name: undefined; animation_type: | 'transition-width' | 'transition-height' | 'transition-left' | 'transition-top' | 'transition-right' | 'transition-bottom' | 'transition-transform' | 'transition-background-color' | 'transition-opacity'; }; } export interface TransitionEvent extends BaseTransitionEvent<Target> {} export interface BaseImageLoadEvent<T> extends BaseEventOrig<{}, T> { /** * Image width. In pixels. * @Android * @iOS */ width: number; /** * Image height. In pixels. * @Android * @iOS */ height: number; } export interface ImageLoadEvent extends BaseImageLoadEvent<Target> { /** * Image start loading timestamp, Unit (ms). * @Android * @iOS * @since 3.6 */ load_start?: number; /** * Image loading completion timestamp, Unit (ms). It mainly includes image downloading and image decoding. * @Android * @iOS * @since 3.6 */ load_finish?: number; /** * Image loading duration (load_finish - load_start), Unit (ms). * @Android * @iOS * @since 3.6 */ cost?: number; /** * image URI. * @Android * @iOS * @since 3.6 */ src?: string; /** * image view width. Unit: (px) * @Android * @iOS * @since 3.6 */ view_width?: number, /** * image view height. Unit: (px) * @Android * @iOS * @since 3.6 */ view_height?: number; /** * Image memory size, Unit: Byte (B). * @Android * @iOS * @since 3.6 */ memory_cost?: number; /** * Source of image, network download, memory cache or disk cache. * @Android * @iOS * @since 3.6 */ origin?: number; } export interface BaseImageErrorEvent<T> extends BaseEventOrig<{}, T> { /** * Error message. * @Android * @iOS */ errMsg: string; /** * Error code. * @Android * @iOS */ error_code: number; /** * Categorized error code. * @Android * @iOS */ lynx_categorized_code: number; } export interface ImageErrorEvent extends BaseImageErrorEvent<Target> { errMsg: string; error_code: number; lynx_categorized_code: number; } export interface TextLineInfo { start: number; end: number; ellipsisCount: number; } export interface TextLayoutEventDetail { lineCount: number; lines: TextLineInfo[]; size: { width: number; height: number; }; } export interface TextSelectionChangeEventDetail { start: number; end: number; direction: 'forward' | 'backward'; } export interface AccessibilityActionDetailEvent<T> extends BaseEventOrig<{}, T> { detail: { /** * The name of the custom action. * @Android * @iOS * @spec {@link https://developer.apple.com/documentation/appkit/nsaccessibility/2869551-accessibilitycustomactions/ | iOS} * @spec {@link https://developer.android.com/reference/androidx/core/view/accessibility/AccessibilityNodeInfoCompat?hl=en#addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat) | Android} */ name: string; }; } export interface LayoutChangeDetailEvent<T> extends BaseEventOrig<{}, T> { type: 'layoutchange'; /** * @deprecated Use 'detail' field instead. * This field is only available on the Android platform. * */ params: { width: number; height: number; left: number; top: number; right: number; bottom: number; }; /** * This field is available on other platforms. * @Android * @iOS * @Harmony * @PC */ detail: { /** * The id selector of the target. * @Android * @iOS * @Harmony * @PC */ id: string; /** * The width of the target. In pixels. * @Android * @iOS * @Harmony * @PC */ width: number; /** The height of the target. In pixels. * @Android * @iOS * @Harmony * @PC */ height: number; /** * The position of the target's top border relative to the page's coordinate. In pixels. * @Android * @iOS * @Harmony * @PC */ top: number; /** * The position of the target's right border relative to the page's coordinate. In pixels. * @Android * @iOS * @Harmony * @PC */ right: number; /** * The position of the target's bottom border relative to the page's coordinate. In pixels. * @Android * @iOS * @Harmony * @PC */ bottom: number; /** * The position of the target's left border relative to the page's coordinate. In pixels. * @Android * @iOS * @Harmony * @PC */ left: number; /** * The collection of custom attributes starting with data- on the event target. * @Android * @iOS * @Harmony * @PC */ dataset: { [key: string]: any; }; }; } export interface UIAppearanceDetailEvent<T> extends BaseEventOrig<{}, T> { type: 'uiappear' | 'uidisappear'; detail: { /** * exposure-id set on the target. * @Android * @iOS * @Harmony * @PC */ 'exposure-id': string; /** * exposure-scene set on the target. * @Android * @iOS * @Harmony * @PC */ 'exposure-scene': string; /** * uid of the target * @Android * @iOS * @Harmony * @PC */ 'unique-id': string; /** * The collection of custom attributes starting with data- on the event target. * @Android * @iOS * @Harmony * @PC */ dataset: { [key: string]: any; }; } } export type Callback<T = any> = (res: T) => void; export interface BaseMethod { success?: Callback; fail?: Callback; } export interface LepusEventInstance { querySelector: (...params: any[]) => any; querySelectorAll: (...params: any[]) => any; requestAnimationFrame: (...params: any[]) => any; cancelAnimationFrame: (...params: any[]) => any; triggerEvent: (...params: any[]) => any; getStore: (...params: any[]) => any; setStore: (...params: any[]) => any; getData: (...params: any[]) => any; setData: (...params: any[]) => any; getProperties: (...params: any[]) => any; } export type EventHandler<T> = (event: T, instance?: LepusEventInstance) => void; export interface BaseEvent<T = string, D = any> { /** * Event type. * @Android * @iOS * @Harmony * @PC */ type: T; /** * Timestamp when the event was generated. * @Android * @iOS * @Harmony * @PC */ timestamp: number; /** * Collection of attribute values of the target that triggers the event. * @Android * @iOS * @Harmony * @PC */ target: Target; /** * Collection of attribute values of the target that listens to the event. * @Android * @iOS * @Harmony * @PC */ currentTarget: Target; /** * Additional information. * @Android * @iOS * @Harmony * @PC */ detail: D; } export interface LynxEvent<T> { /** * Listening for background image loading success. * @Android * @iOS * @since 2.6 */ BGLoad?: EventHandler<BaseImageLoadEvent<T>>; /** * Failed to load background image for listening. * @Android * @iOS * @since 2.8 */ BGError?: EventHandler<BaseImageErrorEvent<T>>; // NodeAppear?: EventHandler<ReactLynx.AppearanceEvent>; // NodeDisappear?: EventHandler<ReactLynx.AppearanceEvent>; /** * Finger touch action begins. * @Android * @iOS * @Harmony * @PC */ TouchStart?: EventHandler<BaseTouchEvent<T>>; /** * Moving after touching with fingers. * @Android * @iOS * @Harmony * @PC */ TouchMove?: EventHandler<BaseTouchEvent<T>>; /** * Finger touch actions are interrupted by incoming call reminders and pop-up windows. * @Android * @iOS * @Harmony * @PC */ TouchCancel?: EventHandler<BaseTouchEvent<T>>; /** * Finger touch action ends. * @Android * @iOS * @Harmony * @PC */ TouchEnd?: EventHandler<BaseTouchEvent<T>>; /** * After touching the finger, if it leaves after more than 350ms and the event callback function is specified and triggered, the tap event will not be triggered. * @Android * @iOS * @Harmony * @PC */ LongPress?: EventHandler<BaseTouchEvent<T>>; /** * It will trigger during a transition animation start. * @Android * @iOS * @Harmony * @PC */ TransitionStart?: EventHandler<BaseTransitionEvent<T>>; /** * It will trigger when a transition animation is cancelled. * @Android * @iOS * @Harmony * @PC */ TransitionCancel?: EventHandler<BaseTransitionEvent<T>>; /** * It will trigger after the transition or createAnimation animation is finished. * @Android * @iOS * @Harmony * @PC */ TransitionEnd?: EventHandler<BaseTransitionEvent<T>>; /** * It will trigger at the beginning of an animation. * @Android * @iOS * @Harmony * @PC */ AnimationStart?: EventHandler<BaseAnimationEvent<T>>; /** * It will trigger during an animation iteration. * @Android * @iOS * @Harmony * @PC */ AnimationIteration?: EventHandler<BaseAnimationEvent<T>>; /** * It will trigger when an animation is cancelled. * @Android * @iOS * @Harmony * @PC */ AnimationCancel?: EventHandler<BaseAnimationEvent<T>>; /** * It will trigger upon completion of an animation. * @Android * @iOS * @Harmony * @PC */ AnimationEnd?: EventHandler<BaseAnimationEvent<T>>; /** * Indicates that a mouse button (primary or secondary) is pressed. The target is the UI that contains the mouse pointer and is closest to the user. * @PC */ MouseDown?: EventHandler<BaseMouseEvent<T>>; /** * Indicates that a mouse button (primary or secondary) is released. The target is the UI that contains the mouse pointer and is closest to the user. * @PC */ MouseUp?: EventHandler<BaseMouseEvent<T>>; /** * Mouse movement. * @PC */ MouseMove?: EventHandler<BaseMouseEvent<T>>; /** * Mouse click. * @PC */ MouseClick?: EventHandler<BaseMouseEvent<T>>; /** * Double-click the mouse. * @PC */ MouseDblClick?: EventHandler<BaseMouseEvent<T>>; /** * Long press on the mouse. * @PC */ MouseLongPress?: EventHandler<BaseMouseEvent<T>>; /** * Mouse (or touchpad) scrolling. * @PC */ Wheel?: EventHandler<BaseWheelEvent<T>>; /** * Zoom gesture in the trackpaad * @PC */ Zoom?: EventHandler<BaseMouseEvent<T>>; /** * Keyboard (or remote control) button pressed. * @PC */ KeyDown?: EventHandler<BaseKeyEvent<T>>; /** * Keyboard (or remote control) key released. * @PC */ KeyUp?: EventHandler<BaseKeyEvent<T>>; /** * Element gets focus. * @PC */ Focus?: EventHandler<BaseCommonEvent<T>>; /** * Element loses focus. * @PC */ Blur?: EventHandler<BaseCommonEvent<T>>; /** * Layout info changed event * @Android * @iOS * @Harmony * @PC */ LayoutChange?: EventHandler<LayoutChangeDetailEvent<T>>; /** * Element appear event * @Android * @iOS * @Harmony * @PC */ UIAppear?: EventHandler<UIAppearanceDetailEvent<T>>; /** * Element disappear event * @Android * @iOS * @Harmony * @PC */ UIDisappear?: EventHandler<UIAppearanceDetailEvent<T>>; /** * The custom actions of the current accessibility element is triggered. * @Android * @iOS * @spec {@link https://developer.apple.com/documentation/appkit/nsaccessibility/2869551-accessibilitycustomactions/ | iOS} * @spec {@link https://developer.android.com/reference/androidx/core/view/accessibility/AccessibilityNodeInfoCompat?hl=en#addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat) | Android} */ AccessibilityAction?: EventHandler<AccessibilityActionDetailEvent<T>>; } export interface LayoutChangeEvent extends LayoutChangeDetailEvent<Target> {} export interface UIAppearanceEvent extends UIAppearanceDetailEvent<Target> {} /** * This type is different with LynxEvent that they only have `bind` and `catch` event. But not `on` Event. */ export interface LynxBindCatchEvent<T = any> { /** * Triggered when a finger clicks on the touch plane. This event and the `longpress` event are mutually exclusive in event listening. That is, if the front-end listens to both events simultaneously, the two events will not be triggered at the same time, and the `longpress` event takes precedence. * @Android * @iOS * @Harmony * @PC */ Tap?: EventHandler<BaseTouchEvent<T>>; /** * After touching the finger, leave after more than 350ms * @deprecated It is recommended to use the longpress event instead */ LongTap?: EventHandler<BaseTouchEvent<T>>; } type PrefixedEvent<E> = { bind?: E; catch?: E; 'capture-bind'?: E; 'capture-catch'?: E; 'global-bind'?: E; } // Helper interfaces for each event, providing explicit properties // for bind, catch, capture-bind, capture-catch, and global-bind prefixes. interface BGLoadProps<T> { bindbgload?: LynxEvent<T>['BGLoad']; catchbgload?: LynxEvent<T>['BGLoad']; 'capture-bindbgload'?: LynxEvent<T>['BGLoad']; 'capture-catchbgload'?: LynxEvent<T>['BGLoad']; 'global-bindbgload'?: LynxEvent<T>['BGLoad']; } interface BGErrorProps<T> { bindbgerror?: LynxEvent<T>['BGError']; catchbgerror?: LynxEvent<T>['BGError']; 'capture-bindbgerror'?: LynxEvent<T>['BGError']; 'capture-catchbgerror'?: LynxEvent<T>['BGError']; 'global-bindbgerror'?: LynxEvent<T>['BGError']; } interface TouchStartProps<T> { bindtouchstart?: LynxEvent<T>['TouchStart']; catchtouchstart?: LynxEvent<T>['TouchStart']; 'capture-bindtouchstart'?: LynxEvent<T>['TouchStart']; 'capture-catchtouchstart'?: LynxEvent<T>['TouchStart']; 'global-bindtouchstart'?: LynxEvent<T>['TouchStart']; } interface TouchMoveProps<T> { bindtouchmove?: LynxEvent<T>['TouchMove']; catchtouchmove?: LynxEvent<T>['TouchMove']; 'capture-bindtouchmove'?: LynxEvent<T>['TouchMove']; 'capture-catchtouchmove'?: LynxEvent<T>['TouchMove']; 'global-bindtouchmove'?: LynxEvent<T>['TouchMove']; } interface TouchCancelProps<T> { bindtouchcancel?: LynxEvent<T>['TouchCancel']; catchtouchcancel?: LynxEvent<T>['TouchCancel']; 'capture-bindtouchcancel'?: LynxEvent<T>['TouchCancel']; 'capture-catchtouchcancel'?: LynxEvent<T>['TouchCancel']; 'global-bindtouchcancel'?: LynxEvent<T>['TouchCancel']; } interface TouchEndProps<T> { bindtouchend?: LynxEvent<T>['TouchEnd']; catchtouchend?: LynxEvent<T>['TouchEnd']; 'capture-bindtouchend'?: LynxEvent<T>['TouchEnd']; 'capture-catchtouchend'?: LynxEvent<T>['TouchEnd']; 'global-bindtouchend'?: LynxEvent<T>['TouchEnd']; } interface LongPressProps<T> { bindlongpress?: LynxEvent<T>['LongPress']; catchlongpress?: LynxEvent<T>['LongPress']; 'capture-bindlongpress'?: LynxEvent<T>['LongPress']; 'capture-catchlongpress'?: LynxEvent<T>['LongPress']; 'global-bindlongpress'?: LynxEvent<T>['LongPress']; } interface TransitionStartProps<T> { bindtransitionstart?: LynxEvent<T>['TransitionStart']; catchtransitionstart?: LynxEvent<T>['TransitionStart']; 'capture-bindtransitionstart'?: LynxEvent<T>['TransitionStart']; 'capture-catchtransitionstart'?: LynxEvent<T>['TransitionStart']; 'global-bindtransitionstart'?: LynxEvent<T>['TransitionStart']; } interface TransitionCancelProps<T> { bindtransitioncancel?: LynxEvent<T>['TransitionCancel']; catchtransitioncancel?: LynxEvent<T>['TransitionCancel']; 'capture-bindtransitioncancel'?: LynxEvent<T>['TransitionCancel']; 'capture-catchtransitioncancel'?: LynxEvent<T>['TransitionCancel']; 'global-bindtransitioncancel'?: LynxEvent<T>['TransitionCancel']; } interface TransitionEndProps<T> { bindtransitionend?: LynxEvent<T>['TransitionEnd']; catchtransitionend?: LynxEvent<T>['TransitionEnd']; 'capture-bindtransitionend'?: LynxEvent<T>['TransitionEnd']; 'capture-catchtransitionend'?: LynxEvent<T>['TransitionEnd']; 'global-bindtransitionend'?: LynxEvent<T>['TransitionEnd']; } interface AnimationStartProps<T> { bindanimationstart?: LynxEvent<T>['AnimationStart']; catchanimationstart?: LynxEvent<T>['AnimationStart']; 'capture-bindanimationstart'?: LynxEvent<T>['AnimationStart']; 'capture-catchanimationstart'?: LynxEvent<T>['AnimationStart']; 'global-bindanimationstart'?: LynxEvent<T>['AnimationStart']; } interface AnimationIterationProps<T> { bindanimationiteration?: LynxEvent<T>['AnimationIteration']; catchanimationiteration?: LynxEvent<T>['AnimationIteration']; 'capture-bindanimationiteration'?: LynxEvent<T>['AnimationIteration']; 'capture-catchanimationiteration'?: LynxEvent<T>['AnimationIteration']; 'global-bindanimationiteration'?: LynxEvent<T>['AnimationIteration']; } interface AnimationCancelProps<T> { bindanimationcancel?: LynxEvent<T>['AnimationCancel']; catchanimationcancel?: LynxEvent<T>['AnimationCancel']; 'capture-bindanimationcancel'?: LynxEvent<T>['AnimationCancel']; 'capture-catchanimationcancel'?: LynxEvent<T>['AnimationCancel']; 'global-bindanimationcancel'?: LynxEvent<T>['AnimationCancel']; } interface AnimationEndProps<T> { bindanimationend?: LynxEvent<T>['AnimationEnd']; catchanimationend?: LynxEvent<T>['AnimationEnd']; 'capture-bindanimationend'?: LynxEvent<T>['AnimationEnd']; 'capture-catchanimationend'?: LynxEvent<T>['AnimationEnd']; 'global-bindanimationend'?: LynxEvent<T>['AnimationEnd']; } interface MouseDownProps<T> { bindmousedown?: LynxEvent<T>['MouseDown']; catchmousedown?: LynxEvent<T>['MouseDown']; 'capture-bindmousedown'?: LynxEvent<T>['MouseDown']; 'capture-catchmousedown'?: LynxEvent<T>['MouseDown']; 'global-bindmousedown'?: LynxEvent<T>['MouseDown']; } interface MouseUpProps<T> { bindmouseup?: LynxEvent<T>['MouseUp']; catchmouseup?: LynxEvent<T>['MouseUp']; 'capture-bindmouseup'?: LynxEvent<T>['MouseUp']; 'capture-catchmouseup'?: LynxEvent<T>['MouseUp']; 'global-bindmouseup'?: LynxEvent<T>['MouseUp']; } interface MouseMoveProps<T> { bindmousemove?: LynxEvent<T>['MouseMove']; catchmousemove?: LynxEvent<T>['MouseMove']; 'capture-bindmousemove'?: LynxEvent<T>['MouseMove']; 'capture-catchmousemove'?: LynxEvent<T>['MouseMove']; 'global-bindmousemove'?: LynxEvent<T>['MouseMove']; } interface MouseClickProps<T> { bindmouseclick?: LynxEvent<T>['MouseClick']; catchmouseclick?: LynxEvent<T>['MouseClick']; 'capture-bindmouseclick'?: LynxEvent<T>['MouseClick']; 'capture-catchmouseclick'?: LynxEvent<T>['MouseClick']; 'global-bindmouseclick'?: LynxEvent<T>['MouseClick']; } interface MouseDblClickProps<T> { bindmousedblclick?: LynxEvent<T>['MouseDblClick']; catchmousedblclick?: LynxEvent<T>['MouseDblClick']; 'capture-bindmousedblclick'?: LynxEvent<T>['MouseDblClick']; 'capture-catchmousedblclick'?: LynxEvent<T>['MouseDblClick']; 'global-bindmousedblclick'?: LynxEvent<T>['MouseDblClick']; } interface MouseLongPressProps<T> { bindmouselongpress?: LynxEvent<T>['MouseLongPress']; catchmouselongpress?: LynxEvent<T>['MouseLongPress']; 'capture-bindmouselongpress'?: LynxEvent<T>['MouseLongPress']; 'capture-catchmouselongpress'?: LynxEvent<T>['MouseLongPress']; 'global-bindmouselongpress'?: LynxEvent<T>['MouseLongPress']; } interface WheelProps<T> { bindwheel?: LynxEvent<T>['Wheel']; catchwheel?: LynxEvent<T>['Wheel']; 'capture-bindwheel'?: LynxEvent<T>['Wheel']; 'capture-catchwheel'?: LynxEvent<T>['Wheel']; 'global-bindwheel'?: LynxEvent<T>['Wheel']; } interface ZoomProps<T> { bindzoom?: LynxEvent<T>['Zoom']; catchzoom?: LynxEvent<T>['Zoom']; 'capture-bindzoom'?: LynxEvent<T>['Zoom']; 'capture-catchzoom'?: LynxEvent<T>['Zoom']; 'global-bindzoom'?: LynxEvent<T>['Zoom']; } interface KeyDownProps<T> { bindkeydown?: LynxEvent<T>['KeyDown']; catchkeydown?: LynxEvent<T>['KeyDown']; 'capture-bindkeydown'?: LynxEvent<T>['KeyDown']; 'capture-catchkeydown'?: LynxEvent<T>['KeyDown']; 'global-bindkeydown'?: LynxEvent<T>['KeyDown']; } interface KeyUpProps<T> { bindkeyup?: LynxEvent<T>['KeyUp']; catchkeyup?: LynxEvent<T>['KeyUp']; 'capture-bindkeyup'?: LynxEvent<T>['KeyUp']; 'capture-catchkeyup'?: LynxEvent<T>['KeyUp']; 'global-bindkeyup'?: LynxEvent<T>['KeyUp']; } interface FocusProps<T> { bindfocus?: LynxEvent<T>['Focus']; catchfocus?: LynxEvent<T>['Focus']; 'capture-bindfocus'?: LynxEvent<T>['Focus']; 'capture-catchfocus'?: LynxEvent<T>['Focus']; 'global-bindfocus'?: LynxEvent<T>['Focus']; } interface BlurProps<T> { bindblur?: LynxEvent<T>['Blur']; catchblur?: LynxEvent<T>['Blur']; 'capture-bindblur'?: LynxEvent<T>['Blur']; 'capture-catchblur'?: LynxEvent<T>['Blur']; 'global-bindblur'?: LynxEvent<T>['Blur']; } interface LayoutChangeProps<T> { bindlayoutchange?: LynxEvent<T>['LayoutChange']; catchlayoutchange?: LynxEvent<T>['LayoutChange']; 'capture-bindlayoutchange'?: LynxEvent<T>['LayoutChange']; 'capture-catchlayoutchange'?: LynxEvent<T>['LayoutChange']; 'global-bindlayoutchange'?: LynxEvent<T>['LayoutChange']; } interface UIAppearProps<T> { binduiappear?: LynxEvent<T>['UIAppear']; catchuiappear?: LynxEvent<T>['UIAppear']; 'capture-binduiappear'?: LynxEvent<T>['UIAppear']; 'capture-catchuiappear'?: LynxEvent<T>['UIAppear']; 'global-binduiappear'?: LynxEvent<T>['UIAppear']; } interface UIDisappearProps<T> { binduidisappear?: LynxEvent<T>['UIDisappear']; catchuidisappear?: LynxEvent<T>['UIDisappear']; 'capture-binduidisappear'?: LynxEvent<T>['UIDisappear']; 'capture-catchuidisappear'?: LynxEvent<T>['UIDisappear']; 'global-binduidisappear'?: LynxEvent<T>['UIDisappear']; } interface AccessibilityActionProps<T> { bindaccessibilityaction?: LynxEvent<T>['AccessibilityAction']; catchaccessibilityaction?: LynxEvent<T>['AccessibilityAction']; 'capture-bindaccessibilityaction'?: LynxEvent<T>['AccessibilityAction']; 'capture-catchaccessibilityaction'?: LynxEvent<T>['AccessibilityAction']; 'global-bindaccessibilityaction'?: LynxEvent<T>['AccessibilityAction']; } interface TapProps<T> { bindtap?: LynxBindCatchEvent<T>['Tap']; catchtap?: LynxBindCatchEvent<T>['Tap']; 'capture-bindtap'?: LynxBindCatchEvent<T>['Tap']; 'capture-catchtap'?: LynxBindCatchEvent<T>['Tap']; 'global-bindtap'?: LynxBindCatchEvent<T>['Tap']; } interface LongTapProps<T> { bindlongtap?: LynxBindCatchEvent<T>['LongTap']; catchlongtap?: LynxBindCatchEvent<T>['LongTap']; 'capture-bindlongtap'?: LynxBindCatchEvent<T>['LongTap']; 'capture-catchlongtap'?: LynxBindCatchEvent<T>['LongTap']; 'global-bindlongtap'?: LynxBindCatchEvent<T>['LongTap']; } /** * A combination of all possible event properties, statically defined for IDE-friendliness. * This replaces the previous dynamic mapped type. */ export type LynxEventPropsBase<T> = BGLoadProps<T> & BGErrorProps<T> & TouchStartProps<T> & TouchMoveProps<T> & TouchCancelProps<T> & TouchEndProps<T> & LongPressProps<T> & TransitionStartProps<T> & TransitionCancelProps<T> & TransitionEndProps<T> & AnimationStartProps<T> & AnimationIterationProps<T> & AnimationCancelProps<T> & AnimationEndProps<T> & MouseDownProps<T> & MouseUpProps<T> & MouseMoveProps<T> & MouseClickProps<T> & MouseDblClickProps<T> & MouseLongPressProps<T> & WheelProps<T> & ZoomProps<T> & KeyDownProps<T> & KeyUpProps<T> & FocusProps<T> & BlurProps<T> & LayoutChangeProps<T> & UIAppearProps<T> & UIDisappearProps<T> & AccessibilityActionProps<T> & TapProps<T> & LongTapProps<T>; export type LynxEventProps = LynxEventPropsBase<Target>; export interface ITouchEvent extends BaseTouchEvent<Target> {} export interface IMouseEvent extends BaseMouseEvent<Target> {} export interface IWheelEvent extends BaseWheelEvent<Target> {} export interface IKeyEvent extends BaseKeyEvent<Target> {} interface LynxMessageEvents { // from native context __GlobalEvent: { data: [ // name string, // params any, ]; origin: 'NATIVE'; }; __DestroyLifetime: { data: [ // appGUID number, ]; origin: 'NATIVE'; } // from engine context __RenderPage: { data: [ // data object, // renderOptions object, ]; origin: 'ENGINE'; }; __UpdatePage: { data: [ // data object, // updateOptions object, ]; origin: 'ENGINE'; }; __UpdateGlobalProps: { data: [ // data Object ]; origin: 'ENGINE'; }; __RemoveComponents: { data: []; origin: 'ENGINE'; }; __SSRHydrate: { data: [ // customHydrateInfo string, // listIDs number[], ]; origin: 'ENGINE'; }; } type LynxMessageEventType = keyof LynxMessageEvents; type LynxMessageEventsWithType = { [k in LynxMessageEventType]: LynxMessageEvents[k] & { type: k; }; }; export type LynxMessageEvent = LynxMessageEventsWithType[LynxMessageEventType];