@momoyu-ink/kit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +21 -0
- package/dist/bindings/AnimationFormat.d.ts +1 -0
- package/dist/bindings/AnimationFormat.js +4 -0
- package/dist/bindings/AnimationFormat.js.map +1 -0
- package/dist/bindings/AnimationFrameCallbackEvent.d.ts +3 -0
- package/dist/bindings/AnimationFrameCallbackEvent.js +4 -0
- package/dist/bindings/AnimationFrameCallbackEvent.js.map +1 -0
- package/dist/bindings/AnimationProps.d.ts +6 -0
- package/dist/bindings/AnimationProps.js +3 -0
- package/dist/bindings/AnimationProps.js.map +1 -0
- package/dist/bindings/AudioCommand.d.ts +52 -0
- package/dist/bindings/AudioCommand.js +3 -0
- package/dist/bindings/AudioCommand.js.map +1 -0
- package/dist/bindings/AudioSettings.d.ts +42 -0
- package/dist/bindings/AudioSettings.js +4 -0
- package/dist/bindings/AudioSettings.js.map +1 -0
- package/dist/bindings/BackdropProps.d.ts +6 -0
- package/dist/bindings/BackdropProps.js +3 -0
- package/dist/bindings/BackdropProps.js.map +1 -0
- package/dist/bindings/BeforeUnloadEvent.d.ts +1 -0
- package/dist/bindings/BeforeUnloadEvent.js +4 -0
- package/dist/bindings/BeforeUnloadEvent.js.map +1 -0
- package/dist/bindings/ClipProps.d.ts +4 -0
- package/dist/bindings/ClipProps.js +4 -0
- package/dist/bindings/ClipProps.js.map +1 -0
- package/dist/bindings/CustomEvent.d.ts +18 -0
- package/dist/bindings/CustomEvent.js +4 -0
- package/dist/bindings/CustomEvent.js.map +1 -0
- package/dist/bindings/EffectParams.d.ts +6 -0
- package/dist/bindings/EffectParams.js +4 -0
- package/dist/bindings/EffectParams.js.map +1 -0
- package/dist/bindings/FilterKind.d.ts +34 -0
- package/dist/bindings/FilterKind.js +4 -0
- package/dist/bindings/FilterKind.js.map +1 -0
- package/dist/bindings/FilterProps.d.ts +4 -0
- package/dist/bindings/FilterProps.js +3 -0
- package/dist/bindings/FilterProps.js.map +1 -0
- package/dist/bindings/FocusEvent.d.ts +5 -0
- package/dist/bindings/FocusEvent.js +3 -0
- package/dist/bindings/FocusEvent.js.map +1 -0
- package/dist/bindings/FocusEventKind.d.ts +1 -0
- package/dist/bindings/FocusEventKind.js +4 -0
- package/dist/bindings/FocusEventKind.js.map +1 -0
- package/dist/bindings/FullScreenEvent.d.ts +4 -0
- package/dist/bindings/FullScreenEvent.js +3 -0
- package/dist/bindings/FullScreenEvent.js.map +1 -0
- package/dist/bindings/FullscreenEventKind.d.ts +1 -0
- package/dist/bindings/FullscreenEventKind.js +4 -0
- package/dist/bindings/FullscreenEventKind.js.map +1 -0
- package/dist/bindings/GameEvent.d.ts +1 -0
- package/dist/bindings/GameEvent.js +4 -0
- package/dist/bindings/GameEvent.js.map +1 -0
- package/dist/bindings/Gamepad.d.ts +44 -0
- package/dist/bindings/Gamepad.js +3 -0
- package/dist/bindings/Gamepad.js.map +1 -0
- package/dist/bindings/GamepadButton.d.ts +20 -0
- package/dist/bindings/GamepadButton.js +4 -0
- package/dist/bindings/GamepadButton.js.map +1 -0
- package/dist/bindings/GamepadCommand.d.ts +9 -0
- package/dist/bindings/GamepadCommand.js +3 -0
- package/dist/bindings/GamepadCommand.js.map +1 -0
- package/dist/bindings/GamepadEvent.d.ts +12 -0
- package/dist/bindings/GamepadEvent.js +3 -0
- package/dist/bindings/GamepadEvent.js.map +1 -0
- package/dist/bindings/GamepadHapticActuator.d.ts +11 -0
- package/dist/bindings/GamepadHapticActuator.js +4 -0
- package/dist/bindings/GamepadHapticActuator.js.map +1 -0
- package/dist/bindings/KeyboardEventKind.d.ts +1 -0
- package/dist/bindings/KeyboardEventKind.js +4 -0
- package/dist/bindings/KeyboardEventKind.js.map +1 -0
- package/dist/bindings/KeyboardLocation.d.ts +1 -0
- package/dist/bindings/KeyboardLocation.js +4 -0
- package/dist/bindings/KeyboardLocation.js.map +1 -0
- package/dist/bindings/Literal.d.ts +3 -0
- package/dist/bindings/Literal.js +4 -0
- package/dist/bindings/Literal.js.map +1 -0
- package/dist/bindings/MouseEventKind.d.ts +1 -0
- package/dist/bindings/MouseEventKind.js +4 -0
- package/dist/bindings/MouseEventKind.js.map +1 -0
- package/dist/bindings/MoyuCursor.d.ts +1 -0
- package/dist/bindings/MoyuCursor.js +4 -0
- package/dist/bindings/MoyuCursor.js.map +1 -0
- package/dist/bindings/NineSliceMode.d.ts +1 -0
- package/dist/bindings/NineSliceMode.js +4 -0
- package/dist/bindings/NineSliceMode.js.map +1 -0
- package/dist/bindings/NodeEvent.d.ts +4 -0
- package/dist/bindings/NodeEvent.js +4 -0
- package/dist/bindings/NodeEvent.js.map +1 -0
- package/dist/bindings/NodeProps.d.ts +20 -0
- package/dist/bindings/NodeProps.js +3 -0
- package/dist/bindings/NodeProps.js.map +1 -0
- package/dist/bindings/RawKeyboardEvent.d.ts +16 -0
- package/dist/bindings/RawKeyboardEvent.js +3 -0
- package/dist/bindings/RawKeyboardEvent.js.map +1 -0
- package/dist/bindings/RawMouseEvent.d.ts +12 -0
- package/dist/bindings/RawMouseEvent.js +3 -0
- package/dist/bindings/RawMouseEvent.js.map +1 -0
- package/dist/bindings/RawTouchEvent.d.ts +13 -0
- package/dist/bindings/RawTouchEvent.js +3 -0
- package/dist/bindings/RawTouchEvent.js.map +1 -0
- package/dist/bindings/RawWheelEvent.d.ts +9 -0
- package/dist/bindings/RawWheelEvent.js +3 -0
- package/dist/bindings/RawWheelEvent.js.map +1 -0
- package/dist/bindings/ResizeEvent.d.ts +4 -0
- package/dist/bindings/ResizeEvent.js +4 -0
- package/dist/bindings/ResizeEvent.js.map +1 -0
- package/dist/bindings/ResolvedArgument.d.ts +5 -0
- package/dist/bindings/ResolvedArgument.js +3 -0
- package/dist/bindings/ResolvedArgument.js.map +1 -0
- package/dist/bindings/ResolvedCommandLine.d.ts +5 -0
- package/dist/bindings/ResolvedCommandLine.js +3 -0
- package/dist/bindings/ResolvedCommandLine.js.map +1 -0
- package/dist/bindings/ResolvedSystemCallLine.d.ts +5 -0
- package/dist/bindings/ResolvedSystemCallLine.js +3 -0
- package/dist/bindings/ResolvedSystemCallLine.js.map +1 -0
- package/dist/bindings/ScenarioCommand.d.ts +90 -0
- package/dist/bindings/ScenarioCommand.js +3 -0
- package/dist/bindings/ScenarioCommand.js.map +1 -0
- package/dist/bindings/ScenarioEvent.d.ts +4 -0
- package/dist/bindings/ScenarioEvent.js +3 -0
- package/dist/bindings/ScenarioEvent.js.map +1 -0
- package/dist/bindings/SpriteMode.d.ts +1 -0
- package/dist/bindings/SpriteMode.js +4 -0
- package/dist/bindings/SpriteMode.js.map +1 -0
- package/dist/bindings/SpriteProps.d.ts +11 -0
- package/dist/bindings/SpriteProps.js +3 -0
- package/dist/bindings/SpriteProps.js.map +1 -0
- package/dist/bindings/SystemCommand.d.ts +28 -0
- package/dist/bindings/SystemCommand.js +3 -0
- package/dist/bindings/SystemCommand.js.map +1 -0
- package/dist/bindings/TextCommand.d.ts +9 -0
- package/dist/bindings/TextCommand.js +4 -0
- package/dist/bindings/TextCommand.js.map +1 -0
- package/dist/bindings/TextEvent.d.ts +1 -0
- package/dist/bindings/TextEvent.js +4 -0
- package/dist/bindings/TextEvent.js.map +1 -0
- package/dist/bindings/TextLine.d.ts +5 -0
- package/dist/bindings/TextLine.js +4 -0
- package/dist/bindings/TextLine.js.map +1 -0
- package/dist/bindings/TextPrintMode.d.ts +4 -0
- package/dist/bindings/TextPrintMode.js +4 -0
- package/dist/bindings/TextPrintMode.js.map +1 -0
- package/dist/bindings/TextProps.d.ts +41 -0
- package/dist/bindings/TextProps.js +3 -0
- package/dist/bindings/TextProps.js.map +1 -0
- package/dist/bindings/TouchEventKind.d.ts +1 -0
- package/dist/bindings/TouchEventKind.js +4 -0
- package/dist/bindings/TouchEventKind.js.map +1 -0
- package/dist/bindings/WheelEventDeltaMode.d.ts +1 -0
- package/dist/bindings/WheelEventDeltaMode.js +4 -0
- package/dist/bindings/WheelEventDeltaMode.js.map +1 -0
- package/dist/bindings/WindowState.d.ts +1 -0
- package/dist/bindings/WindowState.js +4 -0
- package/dist/bindings/WindowState.js.map +1 -0
- package/dist/bindings/serde_json/JsonValue.d.ts +3 -0
- package/dist/bindings/serde_json/JsonValue.js +4 -0
- package/dist/bindings/serde_json/JsonValue.js.map +1 -0
- package/dist/commands.d.ts +17 -0
- package/dist/commands.js +25 -0
- package/dist/commands.js.map +1 -0
- package/dist/components/navigation.d.ts +154 -0
- package/dist/components/navigation.js +253 -0
- package/dist/components/navigation.js.map +1 -0
- package/dist/declaration.d.ts +74 -0
- package/dist/declaration.js +3 -0
- package/dist/declaration.js.map +1 -0
- package/dist/events/base.d.ts +16 -0
- package/dist/events/base.js +20 -0
- package/dist/events/base.js.map +1 -0
- package/dist/events/globals.d.ts +2 -0
- package/dist/events/globals.js +123 -0
- package/dist/events/globals.js.map +1 -0
- package/dist/events/keyboard.d.ts +37 -0
- package/dist/events/keyboard.js +3 -0
- package/dist/events/keyboard.js.map +1 -0
- package/dist/events/listener.d.ts +1 -0
- package/dist/events/listener.js +14 -0
- package/dist/events/listener.js.map +1 -0
- package/dist/events/mouse.d.ts +15 -0
- package/dist/events/mouse.js +3 -0
- package/dist/events/mouse.js.map +1 -0
- package/dist/events/touch.d.ts +16 -0
- package/dist/events/touch.js +3 -0
- package/dist/events/touch.js.map +1 -0
- package/dist/events.d.ts +32 -0
- package/dist/events.js +49 -0
- package/dist/events.js.map +1 -0
- package/dist/hooks/useFadeInOut.d.ts +16 -0
- package/dist/hooks/useFadeInOut.js +63 -0
- package/dist/hooks/useFadeInOut.js.map +1 -0
- package/dist/hooks/useScenario.d.ts +13 -0
- package/dist/hooks/useScenario.js +65 -0
- package/dist/hooks/useScenario.js.map +1 -0
- package/dist/hooks/useSoundEffect.d.ts +4 -0
- package/dist/hooks/useSoundEffect.js +64 -0
- package/dist/hooks/useSoundEffect.js.map +1 -0
- package/dist/hooks/useStage.d.ts +85 -0
- package/dist/hooks/useStage.js +409 -0
- package/dist/hooks/useStage.js.map +1 -0
- package/dist/hooks.d.ts +4 -0
- package/dist/hooks.js +21 -0
- package/dist/hooks.js.map +1 -0
- package/dist/lib.d.ts +13 -0
- package/dist/lib.js +53 -0
- package/dist/lib.js.map +1 -0
- package/dist/moyu.d.ts +18 -0
- package/dist/moyu.js +50 -0
- package/dist/moyu.js.map +1 -0
- package/dist/node.d.ts +16 -0
- package/dist/node.js +106 -0
- package/dist/node.js.map +1 -0
- package/dist/react.d.ts +20 -0
- package/dist/react.js +223 -0
- package/dist/react.js.map +1 -0
- package/dist/runtime-globals.d.ts +63 -0
- package/dist/runtime-globals.js +3 -0
- package/dist/runtime-globals.js.map +1 -0
- package/dist/spring/animated.d.ts +27 -0
- package/dist/spring/animated.js +3 -0
- package/dist/spring/animated.js.map +1 -0
- package/dist/spring/index.d.ts +5 -0
- package/dist/spring/index.js +39 -0
- package/dist/spring/index.js.map +1 -0
- package/dist/spring/primitives.d.ts +3 -0
- package/dist/spring/primitives.js +5 -0
- package/dist/spring/primitives.js.map +1 -0
- package/dist/state.d.ts +6 -0
- package/dist/state.js +9 -0
- package/dist/state.js.map +1 -0
- package/dist/utils.d.ts +10 -0
- package/dist/utils.js +11 -0
- package/dist/utils.js.map +1 -0
- package/jsx-runtime.d.ts +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Context for page parameters
|
|
4
|
+
* Used to provide params to page components via React tree
|
|
5
|
+
*/
|
|
6
|
+
export declare const PageParamsContext: React.Context<Record<string, any> | undefined>;
|
|
7
|
+
/**
|
|
8
|
+
* Context for overlay parameters
|
|
9
|
+
* Used to provide params to overlay components via React tree
|
|
10
|
+
*/
|
|
11
|
+
export declare const OverlayParamsContext: React.Context<Record<string, any> | undefined>;
|
|
12
|
+
/**
|
|
13
|
+
* Placeholder for global navigation types.
|
|
14
|
+
* Projects can augment this interface to provide type safety for the global navigator.
|
|
15
|
+
* @example
|
|
16
|
+
* declare module './utils/navigation' {
|
|
17
|
+
* interface RootNavigatorList {
|
|
18
|
+
* pages: typeof myPages;
|
|
19
|
+
* overlays: typeof myOverlays;
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
*/
|
|
23
|
+
export interface RootNavigatorList {
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Type helper to register a navigator instance's types globally.
|
|
27
|
+
* Use this in a declare module block to get automatic type safety.
|
|
28
|
+
*/
|
|
29
|
+
export type RegisterNavigator<T extends Navigator<any, any>> = {
|
|
30
|
+
pages: T extends Navigator<infer P, any> ? Record<P, any> : never;
|
|
31
|
+
overlays: T extends Navigator<any, infer O> ? Record<O, any> : never;
|
|
32
|
+
};
|
|
33
|
+
type GetPages<T> = T extends {
|
|
34
|
+
pages: infer P;
|
|
35
|
+
} ? (P extends Record<string, any> ? keyof P & string : string) : string;
|
|
36
|
+
type GetOverlays<T> = T extends {
|
|
37
|
+
overlays: infer O;
|
|
38
|
+
} ? O extends Record<string, any> ? keyof O & string : string : string;
|
|
39
|
+
export type DefaultPageName = GetPages<RootNavigatorList>;
|
|
40
|
+
export type DefaultOverlayName = GetOverlays<RootNavigatorList>;
|
|
41
|
+
export interface PageDescriptor {
|
|
42
|
+
component: React.ComponentType<any>;
|
|
43
|
+
options?: Record<string, any>;
|
|
44
|
+
requiredParams?: string[];
|
|
45
|
+
}
|
|
46
|
+
export interface OverlayDescriptor {
|
|
47
|
+
component: React.ComponentType<any>;
|
|
48
|
+
options?: Record<string, any>;
|
|
49
|
+
requiredParams?: string[];
|
|
50
|
+
}
|
|
51
|
+
export type PageConfig = PageDescriptor['component'] | PageDescriptor;
|
|
52
|
+
export type OverlayConfig = OverlayDescriptor['component'] | OverlayDescriptor;
|
|
53
|
+
export interface StackNavigatorOptions<Pages extends Record<string, PageConfig>, Overlays extends Record<string, OverlayConfig>> {
|
|
54
|
+
initialPage: keyof Pages & string;
|
|
55
|
+
pages: Pages;
|
|
56
|
+
overlays?: Overlays;
|
|
57
|
+
}
|
|
58
|
+
export interface Navigator<PageName extends string = DefaultPageName, OverlayName extends string = DefaultOverlayName> {
|
|
59
|
+
/**
|
|
60
|
+
* Navigate to a page
|
|
61
|
+
* @param page Page name
|
|
62
|
+
* @param params Parameters to pass to the page (optional)
|
|
63
|
+
*/
|
|
64
|
+
navigate: (page: PageName, params?: Record<string, any>) => void;
|
|
65
|
+
/**
|
|
66
|
+
* Go back to the previous page (not implemented yet)
|
|
67
|
+
*/
|
|
68
|
+
goBack: () => void;
|
|
69
|
+
/**
|
|
70
|
+
* Push an overlay to the overlay stack
|
|
71
|
+
* @param overlay Overlay name
|
|
72
|
+
* @param params Parameters to pass to the overlay (optional)
|
|
73
|
+
*/
|
|
74
|
+
pushOverlay: (overlay: OverlayName, params?: Record<string, any>) => void;
|
|
75
|
+
/**
|
|
76
|
+
* Pop the top overlay from the stack
|
|
77
|
+
*/
|
|
78
|
+
popOverlay: () => void;
|
|
79
|
+
/**
|
|
80
|
+
* Clear all overlays
|
|
81
|
+
*/
|
|
82
|
+
clearOverlays: () => void;
|
|
83
|
+
/**
|
|
84
|
+
* Get current page name
|
|
85
|
+
*/
|
|
86
|
+
getCurrentPage: () => PageName;
|
|
87
|
+
/**
|
|
88
|
+
* Get current page parameters
|
|
89
|
+
*/
|
|
90
|
+
getParams: () => Record<string, any> | undefined;
|
|
91
|
+
/**
|
|
92
|
+
* Get overlay stack
|
|
93
|
+
*/
|
|
94
|
+
getOverlayStack: () => OverlayInfo[];
|
|
95
|
+
/**
|
|
96
|
+
* Check if an overlay is active
|
|
97
|
+
* @param type Overlay type/name
|
|
98
|
+
*/
|
|
99
|
+
isOverlayActive: (type: OverlayName) => boolean;
|
|
100
|
+
/** @internal */
|
|
101
|
+
_descriptors: {
|
|
102
|
+
pages: Record<string, PageDescriptor>;
|
|
103
|
+
overlays: Record<string, OverlayDescriptor>;
|
|
104
|
+
};
|
|
105
|
+
/** @internal */
|
|
106
|
+
_state: NavigationState;
|
|
107
|
+
}
|
|
108
|
+
export interface OverlayInfo {
|
|
109
|
+
type: string;
|
|
110
|
+
id: string;
|
|
111
|
+
}
|
|
112
|
+
interface NavigationState {
|
|
113
|
+
currentPage: string;
|
|
114
|
+
pageParams: Record<string, Record<string, any>>;
|
|
115
|
+
overlayStack: OverlayInfo[];
|
|
116
|
+
overlayParams: Record<string, Record<string, any>>;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Create a stack navigator
|
|
120
|
+
* @param options Navigator configuration
|
|
121
|
+
* @returns Navigator instance
|
|
122
|
+
*/
|
|
123
|
+
export declare function createStackNavigator<Pages extends Record<string, PageConfig>, Overlays extends Record<string, OverlayConfig>>(options: StackNavigatorOptions<Pages, Overlays>): Navigator<keyof Pages & string, keyof Overlays & string>;
|
|
124
|
+
/**
|
|
125
|
+
* Create a navigation component for a navigator
|
|
126
|
+
* @param navigator The navigator instance
|
|
127
|
+
* @returns A React component that renders the navigation state
|
|
128
|
+
*/
|
|
129
|
+
export declare function createStaticNavigation(navigator: Navigator<any, any>): React.FC;
|
|
130
|
+
/**
|
|
131
|
+
* Get the navigator instance (stable reference)
|
|
132
|
+
* Can be used in both components and state logic
|
|
133
|
+
* @returns Navigator object
|
|
134
|
+
*/
|
|
135
|
+
export declare function getNavigator<PageName extends string = DefaultPageName, OverlayName extends string = DefaultOverlayName>(): Navigator<PageName, OverlayName>;
|
|
136
|
+
/**
|
|
137
|
+
* Hook to get the navigator instance in components
|
|
138
|
+
*/
|
|
139
|
+
export declare const useNavigation: typeof getNavigator;
|
|
140
|
+
/**
|
|
141
|
+
* Get navigation parameters for current component
|
|
142
|
+
* @returns Parameters object (cast as T)
|
|
143
|
+
*
|
|
144
|
+
* This hook reads params from React Context, which is provided by the router.
|
|
145
|
+
* - If called from within an overlay context, returns overlay params
|
|
146
|
+
* - If called from within a page context, returns page params
|
|
147
|
+
* - Supports multiple nested overlays (each gets its own params)
|
|
148
|
+
*
|
|
149
|
+
* Note: We cast the result to T and provide an empty object as fallback.
|
|
150
|
+
* Since required parameters are validated at navigation entry points, we can
|
|
151
|
+
* safely assume the runtime object matches T.
|
|
152
|
+
*/
|
|
153
|
+
export declare function useNavigationParams<T = Record<string, any>>(): T;
|
|
154
|
+
export {};
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.useNavigation = exports.OverlayParamsContext = exports.PageParamsContext = void 0;
|
|
37
|
+
exports.createStackNavigator = createStackNavigator;
|
|
38
|
+
exports.createStaticNavigation = createStaticNavigation;
|
|
39
|
+
exports.getNavigator = getNavigator;
|
|
40
|
+
exports.useNavigationParams = useNavigationParams;
|
|
41
|
+
const react_1 = __importStar(require("react"));
|
|
42
|
+
const valtio_1 = require("valtio");
|
|
43
|
+
// ============================================================================
|
|
44
|
+
// React Contexts for Parameters
|
|
45
|
+
// ============================================================================
|
|
46
|
+
/**
|
|
47
|
+
* Context for page parameters
|
|
48
|
+
* Used to provide params to page components via React tree
|
|
49
|
+
*/
|
|
50
|
+
exports.PageParamsContext = (0, react_1.createContext)(undefined);
|
|
51
|
+
/**
|
|
52
|
+
* Context for overlay parameters
|
|
53
|
+
* Used to provide params to overlay components via React tree
|
|
54
|
+
*/
|
|
55
|
+
exports.OverlayParamsContext = (0, react_1.createContext)(undefined);
|
|
56
|
+
// ============================================================================
|
|
57
|
+
// Helper Functions
|
|
58
|
+
// ============================================================================
|
|
59
|
+
let overlayIdCounter = 0;
|
|
60
|
+
const generateOverlayId = () => {
|
|
61
|
+
return `overlay-${++overlayIdCounter}-${Date.now()}`;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Validate navigation parameters against descriptor schema
|
|
65
|
+
*/
|
|
66
|
+
function validateParams(type, name, descriptor, params) {
|
|
67
|
+
if (!descriptor?.requiredParams)
|
|
68
|
+
return;
|
|
69
|
+
const actualParams = params ?? {};
|
|
70
|
+
for (const key of descriptor.requiredParams) {
|
|
71
|
+
if (actualParams[key] === undefined) {
|
|
72
|
+
throw new Error(`Navigation Error: Missing required parameter "${key}" for ${type} "${name}". ` +
|
|
73
|
+
`Expected: { ${descriptor.requiredParams.join(', ')} }`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// ============================================================================
|
|
78
|
+
// Global Navigation State and Navigator
|
|
79
|
+
// ============================================================================
|
|
80
|
+
let globalNavigator = null;
|
|
81
|
+
/**
|
|
82
|
+
* Normalize page/overlay config to descriptor format
|
|
83
|
+
* Allows shorthand syntax: Component or { component: Component, options?: {} }
|
|
84
|
+
*/
|
|
85
|
+
function normalizeDescriptor(config) {
|
|
86
|
+
if (typeof config === 'function' || config.$$typeof) {
|
|
87
|
+
// It's a component (function or React element)
|
|
88
|
+
return { component: config };
|
|
89
|
+
}
|
|
90
|
+
// It's already a descriptor
|
|
91
|
+
return config;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Create a stack navigator
|
|
95
|
+
* @param options Navigator configuration
|
|
96
|
+
* @returns Navigator instance
|
|
97
|
+
*/
|
|
98
|
+
function createStackNavigator(options) {
|
|
99
|
+
// Normalize pages and overlays
|
|
100
|
+
const normalizedPages = {};
|
|
101
|
+
for (const [key, config] of Object.entries(options.pages)) {
|
|
102
|
+
normalizedPages[key] = normalizeDescriptor(config);
|
|
103
|
+
}
|
|
104
|
+
const normalizedOverlays = {};
|
|
105
|
+
if (options.overlays) {
|
|
106
|
+
for (const [key, config] of Object.entries(options.overlays)) {
|
|
107
|
+
normalizedOverlays[key] = normalizeDescriptor(config);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Initialize navigation state
|
|
111
|
+
const navigationState = (0, valtio_1.proxy)({
|
|
112
|
+
currentPage: options.initialPage,
|
|
113
|
+
pageParams: {},
|
|
114
|
+
overlayStack: [],
|
|
115
|
+
overlayParams: {},
|
|
116
|
+
});
|
|
117
|
+
// Create navigator API
|
|
118
|
+
const navigator = {
|
|
119
|
+
navigate: (page, params) => {
|
|
120
|
+
// Check if page exists
|
|
121
|
+
if (!normalizedPages[page]) {
|
|
122
|
+
console.error(`Navigation Error: Page "${page}" not found in navigator configuration.`);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
// Validate parameters
|
|
126
|
+
validateParams('page', page, normalizedPages[page], params);
|
|
127
|
+
navigationState.currentPage = page;
|
|
128
|
+
if (params !== undefined) {
|
|
129
|
+
navigationState.pageParams[page] = params;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
// Clear params if no params provided
|
|
133
|
+
delete navigationState.pageParams[page];
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
goBack: () => {
|
|
137
|
+
// TODO: Implement history stack
|
|
138
|
+
console.warn('goBack() not implemented yet');
|
|
139
|
+
},
|
|
140
|
+
pushOverlay: (overlay, params) => {
|
|
141
|
+
// Check if overlay exists
|
|
142
|
+
if (!normalizedOverlays[overlay]) {
|
|
143
|
+
console.error(`Navigation Error: Overlay "${overlay}" not found in navigator configuration.`);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
// Validate parameters
|
|
147
|
+
validateParams('overlay', overlay, normalizedOverlays[overlay], params);
|
|
148
|
+
const id = generateOverlayId();
|
|
149
|
+
const overlayInfo = { type: overlay, id };
|
|
150
|
+
navigationState.overlayStack.push(overlayInfo);
|
|
151
|
+
if (params !== undefined) {
|
|
152
|
+
navigationState.overlayParams[id] = params;
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
popOverlay: () => {
|
|
156
|
+
const overlay = navigationState.overlayStack.pop();
|
|
157
|
+
if (overlay) {
|
|
158
|
+
delete navigationState.overlayParams[overlay.id];
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
clearOverlays: () => {
|
|
162
|
+
// Clear all overlay params
|
|
163
|
+
for (const overlay of navigationState.overlayStack) {
|
|
164
|
+
delete navigationState.overlayParams[overlay.id];
|
|
165
|
+
}
|
|
166
|
+
// Clear stack
|
|
167
|
+
navigationState.overlayStack = [];
|
|
168
|
+
},
|
|
169
|
+
getCurrentPage: () => {
|
|
170
|
+
return navigationState.currentPage;
|
|
171
|
+
},
|
|
172
|
+
getParams: () => {
|
|
173
|
+
return navigationState.pageParams[navigationState.currentPage];
|
|
174
|
+
},
|
|
175
|
+
getOverlayStack: () => {
|
|
176
|
+
return [...navigationState.overlayStack];
|
|
177
|
+
},
|
|
178
|
+
isOverlayActive: (type) => {
|
|
179
|
+
return navigationState.overlayStack.some((overlay) => overlay.type === type);
|
|
180
|
+
},
|
|
181
|
+
_descriptors: {
|
|
182
|
+
pages: normalizedPages,
|
|
183
|
+
overlays: normalizedOverlays,
|
|
184
|
+
},
|
|
185
|
+
_state: navigationState,
|
|
186
|
+
};
|
|
187
|
+
// Store as global navigator
|
|
188
|
+
globalNavigator = navigator;
|
|
189
|
+
return navigator;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Create a navigation component for a navigator
|
|
193
|
+
* @param navigator The navigator instance
|
|
194
|
+
* @returns A React component that renders the navigation state
|
|
195
|
+
*/
|
|
196
|
+
function createStaticNavigation(navigator) {
|
|
197
|
+
return () => {
|
|
198
|
+
// navigator._state is a Valtio proxy, useSnapshot makes it reactive
|
|
199
|
+
const navState = (0, valtio_1.useSnapshot)(navigator._state);
|
|
200
|
+
const { pages, overlays } = navigator._descriptors;
|
|
201
|
+
// Get current page component
|
|
202
|
+
const pageDescriptor = pages[navState.currentPage];
|
|
203
|
+
const Page = pageDescriptor?.component || (() => null);
|
|
204
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
205
|
+
react_1.default.createElement(exports.PageParamsContext.Provider, { value: navState.pageParams[navState.currentPage] },
|
|
206
|
+
react_1.default.createElement(Page, null)),
|
|
207
|
+
navState.overlayStack.map((overlay) => {
|
|
208
|
+
const overlayDescriptor = overlays[overlay.type];
|
|
209
|
+
const OverlayComponent = overlayDescriptor?.component || (() => null);
|
|
210
|
+
return (react_1.default.createElement(exports.OverlayParamsContext.Provider, { key: overlay.id, value: navState.overlayParams[overlay.id] },
|
|
211
|
+
react_1.default.createElement(OverlayComponent, null)));
|
|
212
|
+
})));
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
// ============================================================================
|
|
216
|
+
// React Hooks
|
|
217
|
+
// ============================================================================
|
|
218
|
+
/**
|
|
219
|
+
* Get the navigator instance (stable reference)
|
|
220
|
+
* Can be used in both components and state logic
|
|
221
|
+
* @returns Navigator object
|
|
222
|
+
*/
|
|
223
|
+
function getNavigator() {
|
|
224
|
+
if (!globalNavigator) {
|
|
225
|
+
throw new Error('Navigator not initialized. Call createStackNavigator first.');
|
|
226
|
+
}
|
|
227
|
+
return globalNavigator;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Hook to get the navigator instance in components
|
|
231
|
+
*/
|
|
232
|
+
exports.useNavigation = getNavigator;
|
|
233
|
+
/**
|
|
234
|
+
* Get navigation parameters for current component
|
|
235
|
+
* @returns Parameters object (cast as T)
|
|
236
|
+
*
|
|
237
|
+
* This hook reads params from React Context, which is provided by the router.
|
|
238
|
+
* - If called from within an overlay context, returns overlay params
|
|
239
|
+
* - If called from within a page context, returns page params
|
|
240
|
+
* - Supports multiple nested overlays (each gets its own params)
|
|
241
|
+
*
|
|
242
|
+
* Note: We cast the result to T and provide an empty object as fallback.
|
|
243
|
+
* Since required parameters are validated at navigation entry points, we can
|
|
244
|
+
* safely assume the runtime object matches T.
|
|
245
|
+
*/
|
|
246
|
+
function useNavigationParams() {
|
|
247
|
+
const overlayParams = (0, react_1.useContext)(exports.OverlayParamsContext);
|
|
248
|
+
const pageParams = (0, react_1.useContext)(exports.PageParamsContext);
|
|
249
|
+
// If in overlay context, return overlay params; otherwise return page params
|
|
250
|
+
// Default to empty object if both are undefined
|
|
251
|
+
return (overlayParams ?? pageParams ?? {});
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=navigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/components/navigation.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { ClassAttributes, ReactNode } from 'react';
|
|
2
|
+
import type { Node } from './node';
|
|
3
|
+
import type { BubbleEvent } from './events/base';
|
|
4
|
+
import type { MouseEvent } from './events/mouse';
|
|
5
|
+
import type { TouchEvent } from './events/touch';
|
|
6
|
+
import type { KeyboardEvent } from './events/keyboard';
|
|
7
|
+
import { NodeProps } from './bindings/NodeProps';
|
|
8
|
+
import { ClipProps } from './bindings/ClipProps';
|
|
9
|
+
import { FilterProps } from './bindings/FilterProps';
|
|
10
|
+
import { BackdropProps } from './bindings/BackdropProps';
|
|
11
|
+
import { SpriteProps } from './bindings/SpriteProps';
|
|
12
|
+
import { TextProps } from './bindings/TextProps';
|
|
13
|
+
import { AnimationProps } from './bindings/AnimationProps';
|
|
14
|
+
export type Tuple2 = [number, number];
|
|
15
|
+
export type Tuple3 = [number, number, number];
|
|
16
|
+
export type Tuple4 = [number, number, number, number];
|
|
17
|
+
export type DetailedMoyuProps<E extends MoyuNodeAttributes> = ClassAttributes<Node> & E;
|
|
18
|
+
export type MoyuEventHandler<T extends BubbleEvent> = (event: T) => void;
|
|
19
|
+
export interface MoyuListenerAttributes {
|
|
20
|
+
onClick?: MoyuEventHandler<MouseEvent>;
|
|
21
|
+
onMouseEnter?: MoyuEventHandler<MouseEvent>;
|
|
22
|
+
onMouseLeave?: MoyuEventHandler<MouseEvent>;
|
|
23
|
+
onMouseDown?: MoyuEventHandler<MouseEvent>;
|
|
24
|
+
onMouseUp?: MoyuEventHandler<MouseEvent>;
|
|
25
|
+
onMouseMove?: MoyuEventHandler<MouseEvent>;
|
|
26
|
+
onKeyDown?: MoyuEventHandler<KeyboardEvent>;
|
|
27
|
+
onKeyUp?: MoyuEventHandler<KeyboardEvent>;
|
|
28
|
+
onKeyPress?: MoyuEventHandler<KeyboardEvent>;
|
|
29
|
+
onTouchStart?: MoyuEventHandler<TouchEvent>;
|
|
30
|
+
onTouchMove?: MoyuEventHandler<TouchEvent>;
|
|
31
|
+
onTouchEnd?: MoyuEventHandler<TouchEvent>;
|
|
32
|
+
onTouchCancel?: MoyuEventHandler<TouchEvent>;
|
|
33
|
+
}
|
|
34
|
+
export type MoyuNodeAttributes = MoyuListenerAttributes & NodeProps & {
|
|
35
|
+
children?: ReactNode;
|
|
36
|
+
};
|
|
37
|
+
export type MoyuContainerAttributes = MoyuNodeAttributes;
|
|
38
|
+
export type MoyuClipAttributes = ClipProps & MoyuNodeAttributes;
|
|
39
|
+
export type MoyuFilterAttributes = FilterProps & MoyuNodeAttributes;
|
|
40
|
+
export type MoyuBackdropAttributes = BackdropProps & MoyuNodeAttributes;
|
|
41
|
+
export type MoyuAnimationAttributes = AnimationProps & MoyuNodeAttributes;
|
|
42
|
+
export type MoyuSpriteAttributes = SpriteProps & MoyuNodeAttributes;
|
|
43
|
+
export type MoyuTextAttributes = TextProps & MoyuNodeAttributes & {
|
|
44
|
+
onStart?: () => void;
|
|
45
|
+
onFinish?: () => void;
|
|
46
|
+
onProgress?: (progress: number) => void;
|
|
47
|
+
};
|
|
48
|
+
export declare namespace JSX {
|
|
49
|
+
type ElementType = string | React.JSXElementConstructor<any>;
|
|
50
|
+
interface Element extends React.ReactElement<any, any> {
|
|
51
|
+
}
|
|
52
|
+
interface ElementClass extends React.Component<any> {
|
|
53
|
+
render(): React.ReactNode;
|
|
54
|
+
}
|
|
55
|
+
interface ElementAttributesProperty {
|
|
56
|
+
props: {};
|
|
57
|
+
}
|
|
58
|
+
interface ElementChildrenAttribute {
|
|
59
|
+
children: {};
|
|
60
|
+
}
|
|
61
|
+
interface IntrinsicAttributes extends React.Attributes {
|
|
62
|
+
}
|
|
63
|
+
interface IntrinsicClassAttributes<T> extends React.ClassAttributes<T> {
|
|
64
|
+
}
|
|
65
|
+
interface IntrinsicElements {
|
|
66
|
+
container: DetailedMoyuProps<MoyuContainerAttributes>;
|
|
67
|
+
sprite: DetailedMoyuProps<MoyuSpriteAttributes>;
|
|
68
|
+
text: DetailedMoyuProps<MoyuTextAttributes>;
|
|
69
|
+
clip: DetailedMoyuProps<MoyuClipAttributes>;
|
|
70
|
+
filter: DetailedMoyuProps<MoyuFilterAttributes>;
|
|
71
|
+
backdrop: DetailedMoyuProps<MoyuBackdropAttributes>;
|
|
72
|
+
animation: DetailedMoyuProps<MoyuAnimationAttributes>;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declaration.js","sourceRoot":"","sources":["../src/declaration.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface MoyuEvent<T extends Record<string, unknown> = Record<string, unknown>> {
|
|
2
|
+
name: string;
|
|
3
|
+
body: T;
|
|
4
|
+
}
|
|
5
|
+
export interface BubbleEvent {
|
|
6
|
+
targetId: number;
|
|
7
|
+
bubbleTargetIds: number[];
|
|
8
|
+
currentTargetId: number;
|
|
9
|
+
stopPropagation: () => void;
|
|
10
|
+
preventDefault: () => void;
|
|
11
|
+
defaultPrevented: boolean;
|
|
12
|
+
bubbles: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function createBubbleEvent<T extends BubbleEvent>(body: Record<string, any> & {
|
|
15
|
+
bubbleTargetIds: number[];
|
|
16
|
+
}, targetId: number): T;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createBubbleEvent = createBubbleEvent;
|
|
4
|
+
function createBubbleEvent(body, targetId) {
|
|
5
|
+
const event = {
|
|
6
|
+
...body,
|
|
7
|
+
targetId,
|
|
8
|
+
currentTargetId: targetId,
|
|
9
|
+
stopPropagation: () => {
|
|
10
|
+
event.bubbles = false;
|
|
11
|
+
},
|
|
12
|
+
preventDefault: () => {
|
|
13
|
+
event.defaultPrevented = true;
|
|
14
|
+
},
|
|
15
|
+
defaultPrevented: false,
|
|
16
|
+
bubbles: true,
|
|
17
|
+
};
|
|
18
|
+
return event;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/events/base.ts"],"names":[],"mappings":";;AAeA,8CAmBC;AAnBD,SAAgB,iBAAiB,CAC/B,IAAyD,EACzD,QAAgB;IAEhB,MAAM,KAAK,GAAgB;QACzB,GAAG,IAAI;QACP,QAAQ;QACR,eAAe,EAAE,QAAQ;QACzB,eAAe,EAAE,GAAG,EAAE;YACpB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QACxB,CAAC;QACD,cAAc,EAAE,GAAG,EAAE;YACnB,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,gBAAgB,EAAE,KAAK;QACvB,OAAO,EAAE,IAAI;KACd,CAAC;IAEF,OAAO,KAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.globalRequestAnimationFrameListeners = exports.globalEventListeners = void 0;
|
|
4
|
+
const state_1 = require("../state");
|
|
5
|
+
const base_1 = require("./base");
|
|
6
|
+
exports.globalEventListeners = {};
|
|
7
|
+
exports.globalRequestAnimationFrameListeners = [];
|
|
8
|
+
const BUBBLE_EVENT_NAMES = ['mouseevent', 'touchevent', 'keyboardevent'];
|
|
9
|
+
globalThis.__moyu_receive_event = (raw_event) => {
|
|
10
|
+
const { name, body } = raw_event;
|
|
11
|
+
if (BUBBLE_EVENT_NAMES.includes(name)) {
|
|
12
|
+
handleBubbleEvent(name, body);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
// handles non-dom events and return
|
|
16
|
+
switch (name) {
|
|
17
|
+
case 'customevent': {
|
|
18
|
+
const { name, body: _body, targetId } = body;
|
|
19
|
+
// if targetId is 0, it is a global event (send to root node or send from plugin)
|
|
20
|
+
if (targetId === 0) {
|
|
21
|
+
for (const listener of exports.globalEventListeners[name.toLowerCase()] ?? []) {
|
|
22
|
+
listener(_body);
|
|
23
|
+
}
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
state_1.STATE.nodeMap[targetId]?.listeners?.[`on${name.charAt(0).toUpperCase() + name.slice(1)}`]?.(_body);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
case 'nodeevent': {
|
|
30
|
+
const { kind, targetId } = body;
|
|
31
|
+
if (kind === 'Destory') {
|
|
32
|
+
delete state_1.STATE.nodeMap[targetId];
|
|
33
|
+
}
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
case 'animationframecallbackevent': {
|
|
37
|
+
const listeners = exports.globalRequestAnimationFrameListeners.splice(0);
|
|
38
|
+
const { timestamp } = body;
|
|
39
|
+
for (const listener of listeners) {
|
|
40
|
+
listener?.(timestamp);
|
|
41
|
+
}
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
default: {
|
|
45
|
+
exports.globalEventListeners[name]?.forEach((listener) => listener(body));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
function handleBubbleEvent(name, body) {
|
|
52
|
+
const event = (0, base_1.createBubbleEvent)(body, body.targetId);
|
|
53
|
+
const { kind, bubbleTargetIds } = body;
|
|
54
|
+
// if targetId is 0, it is a global event (send to root node or send from plugin)
|
|
55
|
+
if (body.targetId !== 0) {
|
|
56
|
+
const node = state_1.STATE.nodeMap[body.targetId];
|
|
57
|
+
if (!node) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (['mouseevent', 'keyboardevent'].includes(name)) {
|
|
61
|
+
node?.listeners?.[`on${kind}`]?.(event);
|
|
62
|
+
while (event.bubbles && bubbleTargetIds.length) {
|
|
63
|
+
// biome-ignore lint/style/noNonNullAssertion: we are sure that the array is not empty, it is a bug of biomejs
|
|
64
|
+
event.currentTargetId = bubbleTargetIds.pop();
|
|
65
|
+
event.currentTargetLabel = state_1.STATE.nodeMap[event.currentTargetId]?.label;
|
|
66
|
+
state_1.STATE.nodeMap[event.currentTargetId]?.listeners?.[`on${kind}`]?.(event);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else if (name === 'touchevent') {
|
|
70
|
+
const { identifier } = body;
|
|
71
|
+
event.identifier = identifier;
|
|
72
|
+
node?.listeners?.[`on${kind}`]?.(event);
|
|
73
|
+
{
|
|
74
|
+
const _bubbleTargetIds = [...bubbleTargetIds];
|
|
75
|
+
while (event.bubbles && _bubbleTargetIds.length) {
|
|
76
|
+
// biome-ignore lint/style/noNonNullAssertion: we are sure that the array is not empty, it is a bug of biomejs
|
|
77
|
+
event.currentTargetId = _bubbleTargetIds.pop();
|
|
78
|
+
event.currentTargetLabel = state_1.STATE.nodeMap[event.currentTargetId]?.label;
|
|
79
|
+
state_1.STATE.nodeMap[event.currentTargetId]?.listeners?.[`on${kind}`]?.(event);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// simulate mouse events as same as browsers
|
|
83
|
+
// if (kind === TouchEventKind.TouchEnd && !STATE.touchMoved[identifier] && !event.defaultPrevented) {
|
|
84
|
+
// for (const eventKind of ['MouseMove', 'MouseDown', 'MouseUp', 'Click'] as MouseEventKind[]) {
|
|
85
|
+
// event.bubbles = true;
|
|
86
|
+
// event.kind = eventKind;
|
|
87
|
+
// node?.listeners?.[`on${eventKind}`]?.(event);
|
|
88
|
+
// const _bubbleTargetIds = [...bubbleTargetIds];
|
|
89
|
+
// while (event.bubbles && _bubbleTargetIds.length) {
|
|
90
|
+
// // biome-ignore lint/style/noNonNullAssertion: we are sure that the array is not empty, it is a bug of biomejs
|
|
91
|
+
// event.currentTargetId = _bubbleTargetIds.pop()!;
|
|
92
|
+
// event.currentTargetLabel = STATE.nodeMap[event.currentTargetId]?.label;
|
|
93
|
+
// STATE.nodeMap[event.currentTargetId]?.listeners?.[`on${eventKind}`]?.(event);
|
|
94
|
+
// }
|
|
95
|
+
// }
|
|
96
|
+
// }
|
|
97
|
+
if (kind === 'TouchStart') {
|
|
98
|
+
state_1.STATE.touchMoved[identifier] = false;
|
|
99
|
+
}
|
|
100
|
+
else if (kind === 'TouchMove') {
|
|
101
|
+
state_1.STATE.touchMoved[identifier] = true;
|
|
102
|
+
}
|
|
103
|
+
else if (kind === 'TouchEnd' || kind === 'TouchCancel') {
|
|
104
|
+
delete state_1.STATE.touchMoved[identifier];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (event.bubbles) {
|
|
109
|
+
for (const listener of exports.globalEventListeners[kind.toLowerCase()] ?? []) {
|
|
110
|
+
listener(event);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (globalThis.__moyu_native) {
|
|
115
|
+
// detect if it is running in browser, if not, polyfill requestAnimationFrame
|
|
116
|
+
globalThis.requestAnimationFrame = (callback) => {
|
|
117
|
+
return exports.globalRequestAnimationFrameListeners.push(callback) - 1;
|
|
118
|
+
};
|
|
119
|
+
globalThis.cancelAnimationFrame = (handle) => {
|
|
120
|
+
exports.globalRequestAnimationFrameListeners.splice(handle, 1);
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=globals.js.map
|