@garrix82/reactgenie-lib 1.3.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/.env.example +22 -0
- package/.github/workflows/publish.yml +20 -0
- package/LICENSE.txt +201 -0
- package/README.md +621 -0
- package/babel.config.js +29 -0
- package/dist/adapters/__tests__/expo-router-adapter.test.d.ts +1 -0
- package/dist/adapters/expo-router-adapter.d.ts +16 -0
- package/dist/adapters/expo-router-adapter.js +521 -0
- package/dist/adapters/navigation-adapter.d.ts +20 -0
- package/dist/adapters/navigation-adapter.js +137 -0
- package/dist/audio-visualizer.d.ts +14 -0
- package/dist/audio-visualizer.js +123 -0
- package/dist/current-selection.d.ts +27 -0
- package/dist/current-selection.js +94 -0
- package/dist/errors.d.ts +19 -0
- package/dist/errors.js +37 -0
- package/dist/genie/DateTime.d.ts +66 -0
- package/dist/genie/DateTime.js +399 -0
- package/dist/genie/TimeDelta.d.ts +35 -0
- package/dist/genie/TimeDelta.js +169 -0
- package/dist/genie-view-wrapper.d.ts +1 -0
- package/dist/genie-view-wrapper.js +377 -0
- package/dist/hooks/__tests__/useSpeechRecognition.test.d.ts +1 -0
- package/dist/hooks/useSpeechRecognition.d.ts +28 -0
- package/dist/hooks/useSpeechRecognition.js +118 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.js +469 -0
- package/dist/logger.d.ts +23 -0
- package/dist/logger.js +597 -0
- package/dist/logger.remote.test.d.ts +0 -0
- package/dist/modality-provider-v2.d.ts +28 -0
- package/dist/modality-provider-v2.js +1321 -0
- package/dist/modality-provider.d.ts +22 -0
- package/dist/modality-provider.js +373 -0
- package/dist/native-visibility.d.ts +28 -0
- package/dist/native-visibility.js +50 -0
- package/dist/platform/VoiceRecognitionBar.d.ts +17 -0
- package/dist/platform/VoiceRecognitionBar.js +332 -0
- package/dist/platform/components.d.ts +32 -0
- package/dist/platform/components.js +351 -0
- package/dist/platform/events.d.ts +31 -0
- package/dist/platform/events.js +274 -0
- package/dist/platform/index.d.ts +3 -0
- package/dist/platform/index.js +39 -0
- package/dist/platform/types.d.ts +79 -0
- package/dist/platform/types.js +97 -0
- package/dist/react-decorators.d.ts +87 -0
- package/dist/react-decorators.js +368 -0
- package/dist/shared-store.d.ts +74 -0
- package/dist/shared-store.js +589 -0
- package/dist/speech-recognition/__tests__/speech-recognition-groq-transport.test.d.ts +1 -0
- package/dist/speech-recognition/__tests__/speech-recognition-native.test.d.ts +1 -0
- package/dist/speech-recognition/__tests__/speech-recognition-openai-native.test.d.ts +1 -0
- package/dist/speech-recognition/__tests__/speech-recognition-openai.test.d.ts +1 -0
- package/dist/speech-recognition/__tests__/speech-recognition-unified-import.test.d.ts +0 -0
- package/dist/speech-recognition/__tests__/speech-recognition-unified.test.d.ts +1 -0
- package/dist/speech-recognition/speech-recognition-groq.d.ts +21 -0
- package/dist/speech-recognition/speech-recognition-groq.js +409 -0
- package/dist/speech-recognition/speech-recognition-mlx.d.ts +15 -0
- package/dist/speech-recognition/speech-recognition-mlx.js +393 -0
- package/dist/speech-recognition/speech-recognition-native.d.ts +24 -0
- package/dist/speech-recognition/speech-recognition-native.js +632 -0
- package/dist/speech-recognition/speech-recognition-openai-native.d.ts +40 -0
- package/dist/speech-recognition/speech-recognition-openai-native.js +653 -0
- package/dist/speech-recognition/speech-recognition-openai.d.ts +39 -0
- package/dist/speech-recognition/speech-recognition-openai.js +718 -0
- package/dist/speech-recognition/speech-recognition-unified.d.ts +93 -0
- package/dist/speech-recognition/speech-recognition-unified.js +589 -0
- package/dist/speech-recognition/utils/groq-transcription.d.ts +41 -0
- package/dist/speech-recognition/utils/groq-transcription.js +382 -0
- package/dist/speech-recognition.d.ts +7 -0
- package/dist/speech-recognition.js +61 -0
- package/dist/voice-pipeline-telemetry.d.ts +26 -0
- package/dist/voice-pipeline-telemetry.js +15 -0
- package/garrix82-reactgenie-lib-1.3.0.tgz +0 -0
- package/metro/index.js +3 -0
- package/metro/with-genie-registry.js +47 -0
- package/package.json +111 -0
- package/scripts/dry-run.js +23 -0
- package/scripts/generate-genie-registry.js +278 -0
- package/scripts/log-file-test.js +51 -0
- package/scripts/parse.js +26 -0
- package/scripts/prompt.js +19 -0
- package/scripts/set-script.js +200 -0
- package/tsconfig.json +36 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createDebouncedPressHandler = createDebouncedPressHandler;
|
|
7
|
+
exports.createPressHandler = createPressHandler;
|
|
8
|
+
exports.getAbsoluteCoordinates = getAbsoluteCoordinates;
|
|
9
|
+
exports.getClosestPointOnRect = getClosestPointOnRect;
|
|
10
|
+
exports.getCoordinates = getCoordinates;
|
|
11
|
+
exports.getDistance = getDistance;
|
|
12
|
+
exports.getDistanceToRectSquared = getDistanceToRectSquared;
|
|
13
|
+
exports.getPlatformCapabilities = getPlatformCapabilities;
|
|
14
|
+
exports.isAndroidPlatform = isAndroidPlatform;
|
|
15
|
+
exports.isCoordinateInRect = isCoordinateInRect;
|
|
16
|
+
exports.isIOSPlatform = isIOSPlatform;
|
|
17
|
+
exports.isNativePlatform = isNativePlatform;
|
|
18
|
+
exports.isWebPlatform = isWebPlatform;
|
|
19
|
+
exports.preventDefault = preventDefault;
|
|
20
|
+
exports.stopPropagation = stopPropagation;
|
|
21
|
+
var _reactNative = require("react-native");
|
|
22
|
+
var _types = require("./types");
|
|
23
|
+
/**
|
|
24
|
+
* Platform-aware event handling utilities
|
|
25
|
+
* Provides unified interface for web and native events
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// Coordinate Extraction
|
|
30
|
+
// ============================================================================
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Extract coordinates from platform-specific event
|
|
34
|
+
* Works for both web pointer events and native touch events
|
|
35
|
+
*
|
|
36
|
+
* @param event - Platform press event
|
|
37
|
+
* @returns Coordinates object with x and y properties
|
|
38
|
+
*/
|
|
39
|
+
function getCoordinates(event) {
|
|
40
|
+
if ((0, _types.isWebPointerEvent)(event)) {
|
|
41
|
+
return {
|
|
42
|
+
x: event.clientX,
|
|
43
|
+
y: event.clientY
|
|
44
|
+
};
|
|
45
|
+
} else if ((0, _types.isNativeTouchEvent)(event)) {
|
|
46
|
+
const {
|
|
47
|
+
pageX,
|
|
48
|
+
pageY,
|
|
49
|
+
locationX,
|
|
50
|
+
locationY
|
|
51
|
+
} = event.nativeEvent;
|
|
52
|
+
return {
|
|
53
|
+
x: pageX ?? locationX ?? 0,
|
|
54
|
+
y: pageY ?? locationY ?? 0
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Fallback
|
|
59
|
+
console.warn('Unable to extract coordinates from event', event);
|
|
60
|
+
return {
|
|
61
|
+
x: 0,
|
|
62
|
+
y: 0
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Get absolute screen coordinates (useful for global positioning)
|
|
68
|
+
*
|
|
69
|
+
* @param event - Platform press event
|
|
70
|
+
* @returns Coordinates object with absolute screen position
|
|
71
|
+
*/
|
|
72
|
+
function getAbsoluteCoordinates(event) {
|
|
73
|
+
if ((0, _types.isWebPointerEvent)(event)) {
|
|
74
|
+
return {
|
|
75
|
+
x: event.clientX,
|
|
76
|
+
y: event.clientY
|
|
77
|
+
};
|
|
78
|
+
} else if ((0, _types.isNativeTouchEvent)(event)) {
|
|
79
|
+
const {
|
|
80
|
+
pageX,
|
|
81
|
+
pageY
|
|
82
|
+
} = event.nativeEvent;
|
|
83
|
+
return {
|
|
84
|
+
x: pageX ?? 0,
|
|
85
|
+
y: pageY ?? 0
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
x: 0,
|
|
90
|
+
y: 0
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// ============================================================================
|
|
95
|
+
// Event Prevention
|
|
96
|
+
// ============================================================================
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Prevent default behavior in a platform-aware way
|
|
100
|
+
*
|
|
101
|
+
* @param event - Platform press event
|
|
102
|
+
*/
|
|
103
|
+
function preventDefault(event) {
|
|
104
|
+
if ((0, _types.isWebPointerEvent)(event) && event.preventDefault) {
|
|
105
|
+
event.preventDefault();
|
|
106
|
+
}
|
|
107
|
+
// Native events don't need preventDefault
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Stop event propagation in a platform-aware way
|
|
112
|
+
*
|
|
113
|
+
* @param event - Platform press event
|
|
114
|
+
*/
|
|
115
|
+
function stopPropagation(event) {
|
|
116
|
+
if ((0, _types.isWebPointerEvent)(event) && event.stopPropagation) {
|
|
117
|
+
event.stopPropagation();
|
|
118
|
+
}
|
|
119
|
+
// Native events handle propagation differently
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// ============================================================================
|
|
123
|
+
// Platform Capabilities Detection
|
|
124
|
+
// ============================================================================
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Detect platform capabilities for adaptive behavior
|
|
128
|
+
*
|
|
129
|
+
* @returns Object describing platform capabilities
|
|
130
|
+
*/
|
|
131
|
+
function getPlatformCapabilities() {
|
|
132
|
+
const isWeb = _reactNative.Platform.OS === 'web';
|
|
133
|
+
const isIOS = _reactNative.Platform.OS === 'ios';
|
|
134
|
+
const isAndroid = _reactNative.Platform.OS === 'android';
|
|
135
|
+
|
|
136
|
+
// Check for Web Speech API (browser only)
|
|
137
|
+
const supportsWebSpeechAPI = isWeb && typeof window !== 'undefined' && ('SpeechRecognition' in window || 'webkitSpeechRecognition' in window);
|
|
138
|
+
return {
|
|
139
|
+
supportsSpeechRecognition: true,
|
|
140
|
+
// All platforms can have speech
|
|
141
|
+
supportsWebSpeechAPI,
|
|
142
|
+
supportsNativeSpeech: isIOS || isAndroid,
|
|
143
|
+
supportsMouseEvents: isWeb,
|
|
144
|
+
supportsTouchEvents: !isWeb,
|
|
145
|
+
supportsPointerEvents: isWeb
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Check if current platform is web
|
|
151
|
+
*/
|
|
152
|
+
function isWebPlatform() {
|
|
153
|
+
return _reactNative.Platform.OS === 'web';
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Check if current platform is iOS
|
|
158
|
+
*/
|
|
159
|
+
function isIOSPlatform() {
|
|
160
|
+
return _reactNative.Platform.OS === 'ios';
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Check if current platform is Android
|
|
165
|
+
*/
|
|
166
|
+
function isAndroidPlatform() {
|
|
167
|
+
return _reactNative.Platform.OS === 'android';
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Check if current platform is native (iOS or Android)
|
|
172
|
+
*/
|
|
173
|
+
function isNativePlatform() {
|
|
174
|
+
return isIOSPlatform() || isAndroidPlatform();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// ============================================================================
|
|
178
|
+
// Event Handler Creators
|
|
179
|
+
// ============================================================================
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Create a platform-aware press handler
|
|
183
|
+
* Automatically extracts coordinates and handles platform differences
|
|
184
|
+
*
|
|
185
|
+
* @param handler - Function to call with coordinates
|
|
186
|
+
* @returns Platform-aware event handler
|
|
187
|
+
*/
|
|
188
|
+
function createPressHandler(handler) {
|
|
189
|
+
return event => {
|
|
190
|
+
const coords = getCoordinates(event);
|
|
191
|
+
handler(coords, event);
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Create a debounced press handler (prevents rapid firing)
|
|
197
|
+
*
|
|
198
|
+
* @param handler - Function to call with coordinates
|
|
199
|
+
* @param delay - Debounce delay in milliseconds
|
|
200
|
+
* @returns Debounced event handler
|
|
201
|
+
*/
|
|
202
|
+
function createDebouncedPressHandler(handler, delay = 300) {
|
|
203
|
+
let timeoutId = null;
|
|
204
|
+
return event => {
|
|
205
|
+
if (timeoutId) {
|
|
206
|
+
clearTimeout(timeoutId);
|
|
207
|
+
}
|
|
208
|
+
const coords = getCoordinates(event);
|
|
209
|
+
timeoutId = setTimeout(() => {
|
|
210
|
+
handler(coords, event);
|
|
211
|
+
timeoutId = null;
|
|
212
|
+
}, delay);
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// ============================================================================
|
|
217
|
+
// Coordinate Utilities
|
|
218
|
+
// ============================================================================
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Calculate distance between two coordinates
|
|
222
|
+
*
|
|
223
|
+
* @param coord1 - First coordinate
|
|
224
|
+
* @param coord2 - Second coordinate
|
|
225
|
+
* @returns Distance in pixels
|
|
226
|
+
*/
|
|
227
|
+
function getDistance(coord1, coord2) {
|
|
228
|
+
const dx = coord1.x - coord2.x;
|
|
229
|
+
const dy = coord1.y - coord2.y;
|
|
230
|
+
return Math.sqrt(dx * dx + dy * dy);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Check if coordinate is within a rectangular bounds
|
|
235
|
+
*
|
|
236
|
+
* @param coord - Coordinate to check
|
|
237
|
+
* @param rect - Rectangle bounds
|
|
238
|
+
* @returns True if coordinate is inside rectangle
|
|
239
|
+
*/
|
|
240
|
+
function isCoordinateInRect(coord, rect) {
|
|
241
|
+
return coord.x >= rect.x && coord.x <= rect.x + rect.width && coord.y >= rect.y && coord.y <= rect.y + rect.height;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Find closest point on rectangle to given coordinate
|
|
246
|
+
*
|
|
247
|
+
* @param coord - Coordinate point
|
|
248
|
+
* @param rect - Rectangle bounds
|
|
249
|
+
* @returns Closest point on rectangle
|
|
250
|
+
*/
|
|
251
|
+
function getClosestPointOnRect(coord, rect) {
|
|
252
|
+
const closestX = Math.max(rect.x, Math.min(coord.x, rect.x + rect.width));
|
|
253
|
+
const closestY = Math.max(rect.y, Math.min(coord.y, rect.y + rect.height));
|
|
254
|
+
return {
|
|
255
|
+
x: closestX,
|
|
256
|
+
y: closestY
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Calculate squared distance from point to rectangle
|
|
262
|
+
* (More efficient than distance for comparison purposes)
|
|
263
|
+
*
|
|
264
|
+
* @param coord - Coordinate point
|
|
265
|
+
* @param rect - Rectangle bounds
|
|
266
|
+
* @returns Squared distance
|
|
267
|
+
*/
|
|
268
|
+
function getDistanceToRectSquared(coord, rect) {
|
|
269
|
+
const closest = getClosestPointOnRect(coord, rect);
|
|
270
|
+
const dx = coord.x - closest.x;
|
|
271
|
+
const dy = coord.y - closest.y;
|
|
272
|
+
return dx * dx + dy * dy;
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3ROYXRpdmUiLCJyZXF1aXJlIiwiX3R5cGVzIiwiZ2V0Q29vcmRpbmF0ZXMiLCJldmVudCIsImlzV2ViUG9pbnRlckV2ZW50IiwieCIsImNsaWVudFgiLCJ5IiwiY2xpZW50WSIsImlzTmF0aXZlVG91Y2hFdmVudCIsInBhZ2VYIiwicGFnZVkiLCJsb2NhdGlvblgiLCJsb2NhdGlvblkiLCJuYXRpdmVFdmVudCIsImNvbnNvbGUiLCJ3YXJuIiwiZ2V0QWJzb2x1dGVDb29yZGluYXRlcyIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiZ2V0UGxhdGZvcm1DYXBhYmlsaXRpZXMiLCJpc1dlYiIsIlBsYXRmb3JtIiwiT1MiLCJpc0lPUyIsImlzQW5kcm9pZCIsInN1cHBvcnRzV2ViU3BlZWNoQVBJIiwid2luZG93Iiwic3VwcG9ydHNTcGVlY2hSZWNvZ25pdGlvbiIsInN1cHBvcnRzTmF0aXZlU3BlZWNoIiwic3VwcG9ydHNNb3VzZUV2ZW50cyIsInN1cHBvcnRzVG91Y2hFdmVudHMiLCJzdXBwb3J0c1BvaW50ZXJFdmVudHMiLCJpc1dlYlBsYXRmb3JtIiwiaXNJT1NQbGF0Zm9ybSIsImlzQW5kcm9pZFBsYXRmb3JtIiwiaXNOYXRpdmVQbGF0Zm9ybSIsImNyZWF0ZVByZXNzSGFuZGxlciIsImhhbmRsZXIiLCJjb29yZHMiLCJjcmVhdGVEZWJvdW5jZWRQcmVzc0hhbmRsZXIiLCJkZWxheSIsInRpbWVvdXRJZCIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJnZXREaXN0YW5jZSIsImNvb3JkMSIsImNvb3JkMiIsImR4IiwiZHkiLCJNYXRoIiwic3FydCIsImlzQ29vcmRpbmF0ZUluUmVjdCIsImNvb3JkIiwicmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwiZ2V0Q2xvc2VzdFBvaW50T25SZWN0IiwiY2xvc2VzdFgiLCJtYXgiLCJtaW4iLCJjbG9zZXN0WSIsImdldERpc3RhbmNlVG9SZWN0U3F1YXJlZCIsImNsb3Nlc3QiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvcGxhdGZvcm0vZXZlbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGxhdGZvcm0tYXdhcmUgZXZlbnQgaGFuZGxpbmcgdXRpbGl0aWVzXG4gKiBQcm92aWRlcyB1bmlmaWVkIGludGVyZmFjZSBmb3Igd2ViIGFuZCBuYXRpdmUgZXZlbnRzXG4gKi9cblxuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuaW1wb3J0IHtcbiAgV2ViUG9pbnRlckV2ZW50LFxuICBOYXRpdmVUb3VjaEV2ZW50LFxuICBQbGF0Zm9ybVByZXNzRXZlbnQsXG4gIENvb3JkaW5hdGVzLFxuICBpc1dlYlBvaW50ZXJFdmVudCxcbiAgaXNOYXRpdmVUb3VjaEV2ZW50LFxuICBQbGF0Zm9ybUNhcGFiaWxpdGllcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvb3JkaW5hdGUgRXh0cmFjdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEV4dHJhY3QgY29vcmRpbmF0ZXMgZnJvbSBwbGF0Zm9ybS1zcGVjaWZpYyBldmVudFxuICogV29ya3MgZm9yIGJvdGggd2ViIHBvaW50ZXIgZXZlbnRzIGFuZCBuYXRpdmUgdG91Y2ggZXZlbnRzXG4gKiBcbiAqIEBwYXJhbSBldmVudCAtIFBsYXRmb3JtIHByZXNzIGV2ZW50XG4gKiBAcmV0dXJucyBDb29yZGluYXRlcyBvYmplY3Qgd2l0aCB4IGFuZCB5IHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvb3JkaW5hdGVzKGV2ZW50OiBQbGF0Zm9ybVByZXNzRXZlbnQpOiBDb29yZGluYXRlcyB7XG4gIGlmIChpc1dlYlBvaW50ZXJFdmVudChldmVudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogZXZlbnQuY2xpZW50WCxcbiAgICAgIHk6IGV2ZW50LmNsaWVudFksXG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc05hdGl2ZVRvdWNoRXZlbnQoZXZlbnQpKSB7XG4gICAgY29uc3QgeyBwYWdlWCwgcGFnZVksIGxvY2F0aW9uWCwgbG9jYXRpb25ZIH0gPSBldmVudC5uYXRpdmVFdmVudDtcbiAgICByZXR1cm4ge1xuICAgICAgeDogcGFnZVggPz8gbG9jYXRpb25YID8/IDAsXG4gICAgICB5OiBwYWdlWSA/PyBsb2NhdGlvblkgPz8gMCxcbiAgICB9O1xuICB9XG4gIFxuICAvLyBGYWxsYmFja1xuICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBleHRyYWN0IGNvb3JkaW5hdGVzIGZyb20gZXZlbnQnLCBldmVudCk7XG4gIHJldHVybiB7IHg6IDAsIHk6IDAgfTtcbn1cblxuLyoqXG4gKiBHZXQgYWJzb2x1dGUgc2NyZWVuIGNvb3JkaW5hdGVzICh1c2VmdWwgZm9yIGdsb2JhbCBwb3NpdGlvbmluZylcbiAqIFxuICogQHBhcmFtIGV2ZW50IC0gUGxhdGZvcm0gcHJlc3MgZXZlbnRcbiAqIEByZXR1cm5zIENvb3JkaW5hdGVzIG9iamVjdCB3aXRoIGFic29sdXRlIHNjcmVlbiBwb3NpdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJzb2x1dGVDb29yZGluYXRlcyhldmVudDogUGxhdGZvcm1QcmVzc0V2ZW50KTogQ29vcmRpbmF0ZXMge1xuICBpZiAoaXNXZWJQb2ludGVyRXZlbnQoZXZlbnQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGV2ZW50LmNsaWVudFgsXG4gICAgICB5OiBldmVudC5jbGllbnRZLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNOYXRpdmVUb3VjaEV2ZW50KGV2ZW50KSkge1xuICAgIGNvbnN0IHsgcGFnZVgsIHBhZ2VZIH0gPSBldmVudC5uYXRpdmVFdmVudDtcbiAgICByZXR1cm4ge1xuICAgICAgeDogcGFnZVggPz8gMCxcbiAgICAgIHk6IHBhZ2VZID8/IDAsXG4gICAgfTtcbiAgfVxuICBcbiAgcmV0dXJuIHsgeDogMCwgeTogMCB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFdmVudCBQcmV2ZW50aW9uXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUHJldmVudCBkZWZhdWx0IGJlaGF2aW9yIGluIGEgcGxhdGZvcm0tYXdhcmUgd2F5XG4gKiBcbiAqIEBwYXJhbSBldmVudCAtIFBsYXRmb3JtIHByZXNzIGV2ZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudDogUGxhdGZvcm1QcmVzc0V2ZW50KTogdm9pZCB7XG4gIGlmIChpc1dlYlBvaW50ZXJFdmVudChldmVudCkgJiYgZXZlbnQucHJldmVudERlZmF1bHQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIC8vIE5hdGl2ZSBldmVudHMgZG9uJ3QgbmVlZCBwcmV2ZW50RGVmYXVsdFxufVxuXG4vKipcbiAqIFN0b3AgZXZlbnQgcHJvcGFnYXRpb24gaW4gYSBwbGF0Zm9ybS1hd2FyZSB3YXlcbiAqIFxuICogQHBhcmFtIGV2ZW50IC0gUGxhdGZvcm0gcHJlc3MgZXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbihldmVudDogUGxhdGZvcm1QcmVzc0V2ZW50KTogdm9pZCB7XG4gIGlmIChpc1dlYlBvaW50ZXJFdmVudChldmVudCkgJiYgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbiAgLy8gTmF0aXZlIGV2ZW50cyBoYW5kbGUgcHJvcGFnYXRpb24gZGlmZmVyZW50bHlcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUGxhdGZvcm0gQ2FwYWJpbGl0aWVzIERldGVjdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIERldGVjdCBwbGF0Zm9ybSBjYXBhYmlsaXRpZXMgZm9yIGFkYXB0aXZlIGJlaGF2aW9yXG4gKiBcbiAqIEByZXR1cm5zIE9iamVjdCBkZXNjcmliaW5nIHBsYXRmb3JtIGNhcGFiaWxpdGllc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGxhdGZvcm1DYXBhYmlsaXRpZXMoKTogUGxhdGZvcm1DYXBhYmlsaXRpZXMge1xuICBjb25zdCBpc1dlYiA9IFBsYXRmb3JtLk9TID09PSAnd2ViJztcbiAgY29uc3QgaXNJT1MgPSBQbGF0Zm9ybS5PUyA9PT0gJ2lvcyc7XG4gIGNvbnN0IGlzQW5kcm9pZCA9IFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCc7XG4gIFxuICAvLyBDaGVjayBmb3IgV2ViIFNwZWVjaCBBUEkgKGJyb3dzZXIgb25seSlcbiAgY29uc3Qgc3VwcG9ydHNXZWJTcGVlY2hBUEkgPSBpc1dlYiAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiBcbiAgICAoJ1NwZWVjaFJlY29nbml0aW9uJyBpbiB3aW5kb3cgfHwgJ3dlYmtpdFNwZWVjaFJlY29nbml0aW9uJyBpbiB3aW5kb3cpO1xuICBcbiAgcmV0dXJuIHtcbiAgICBzdXBwb3J0c1NwZWVjaFJlY29nbml0aW9uOiB0cnVlLCAvLyBBbGwgcGxhdGZvcm1zIGNhbiBoYXZlIHNwZWVjaFxuICAgIHN1cHBvcnRzV2ViU3BlZWNoQVBJLFxuICAgIHN1cHBvcnRzTmF0aXZlU3BlZWNoOiBpc0lPUyB8fCBpc0FuZHJvaWQsXG4gICAgc3VwcG9ydHNNb3VzZUV2ZW50czogaXNXZWIsXG4gICAgc3VwcG9ydHNUb3VjaEV2ZW50czogIWlzV2ViLFxuICAgIHN1cHBvcnRzUG9pbnRlckV2ZW50czogaXNXZWIsXG4gIH07XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgY3VycmVudCBwbGF0Zm9ybSBpcyB3ZWJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV2ViUGxhdGZvcm0oKTogYm9vbGVhbiB7XG4gIHJldHVybiBQbGF0Zm9ybS5PUyA9PT0gJ3dlYic7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgY3VycmVudCBwbGF0Zm9ybSBpcyBpT1NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSU9TUGxhdGZvcm0oKTogYm9vbGVhbiB7XG4gIHJldHVybiBQbGF0Zm9ybS5PUyA9PT0gJ2lvcyc7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgY3VycmVudCBwbGF0Zm9ybSBpcyBBbmRyb2lkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FuZHJvaWRQbGF0Zm9ybSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIFBsYXRmb3JtLk9TID09PSAnYW5kcm9pZCc7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgY3VycmVudCBwbGF0Zm9ybSBpcyBuYXRpdmUgKGlPUyBvciBBbmRyb2lkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOYXRpdmVQbGF0Zm9ybSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzSU9TUGxhdGZvcm0oKSB8fCBpc0FuZHJvaWRQbGF0Zm9ybSgpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFdmVudCBIYW5kbGVyIENyZWF0b3JzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ3JlYXRlIGEgcGxhdGZvcm0tYXdhcmUgcHJlc3MgaGFuZGxlclxuICogQXV0b21hdGljYWxseSBleHRyYWN0cyBjb29yZGluYXRlcyBhbmQgaGFuZGxlcyBwbGF0Zm9ybSBkaWZmZXJlbmNlc1xuICogXG4gKiBAcGFyYW0gaGFuZGxlciAtIEZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBjb29yZGluYXRlc1xuICogQHJldHVybnMgUGxhdGZvcm0tYXdhcmUgZXZlbnQgaGFuZGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJlc3NIYW5kbGVyKFxuICBoYW5kbGVyOiAoY29vcmRzOiBDb29yZGluYXRlcywgZXZlbnQ6IFBsYXRmb3JtUHJlc3NFdmVudCkgPT4gdm9pZFxuKTogKGV2ZW50OiBQbGF0Zm9ybVByZXNzRXZlbnQpID0+IHZvaWQge1xuICByZXR1cm4gKGV2ZW50OiBQbGF0Zm9ybVByZXNzRXZlbnQpID0+IHtcbiAgICBjb25zdCBjb29yZHMgPSBnZXRDb29yZGluYXRlcyhldmVudCk7XG4gICAgaGFuZGxlcihjb29yZHMsIGV2ZW50KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBkZWJvdW5jZWQgcHJlc3MgaGFuZGxlciAocHJldmVudHMgcmFwaWQgZmlyaW5nKVxuICogXG4gKiBAcGFyYW0gaGFuZGxlciAtIEZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBjb29yZGluYXRlc1xuICogQHBhcmFtIGRlbGF5IC0gRGVib3VuY2UgZGVsYXkgaW4gbWlsbGlzZWNvbmRzXG4gKiBAcmV0dXJucyBEZWJvdW5jZWQgZXZlbnQgaGFuZGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVib3VuY2VkUHJlc3NIYW5kbGVyKFxuICBoYW5kbGVyOiAoY29vcmRzOiBDb29yZGluYXRlcywgZXZlbnQ6IFBsYXRmb3JtUHJlc3NFdmVudCkgPT4gdm9pZCxcbiAgZGVsYXk6IG51bWJlciA9IDMwMFxuKTogKGV2ZW50OiBQbGF0Zm9ybVByZXNzRXZlbnQpID0+IHZvaWQge1xuICBsZXQgdGltZW91dElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBcbiAgcmV0dXJuIChldmVudDogUGxhdGZvcm1QcmVzc0V2ZW50KSA9PiB7XG4gICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGNvb3JkcyA9IGdldENvb3JkaW5hdGVzKGV2ZW50KTtcbiAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGhhbmRsZXIoY29vcmRzLCBldmVudCk7XG4gICAgICB0aW1lb3V0SWQgPSBudWxsO1xuICAgIH0sIGRlbGF5KTtcbiAgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29vcmRpbmF0ZSBVdGlsaXRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDYWxjdWxhdGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gY29vcmRpbmF0ZXNcbiAqIFxuICogQHBhcmFtIGNvb3JkMSAtIEZpcnN0IGNvb3JkaW5hdGVcbiAqIEBwYXJhbSBjb29yZDIgLSBTZWNvbmQgY29vcmRpbmF0ZVxuICogQHJldHVybnMgRGlzdGFuY2UgaW4gcGl4ZWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXN0YW5jZShjb29yZDE6IENvb3JkaW5hdGVzLCBjb29yZDI6IENvb3JkaW5hdGVzKTogbnVtYmVyIHtcbiAgY29uc3QgZHggPSBjb29yZDEueCAtIGNvb3JkMi54O1xuICBjb25zdCBkeSA9IGNvb3JkMS55IC0gY29vcmQyLnk7XG4gIHJldHVybiBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGNvb3JkaW5hdGUgaXMgd2l0aGluIGEgcmVjdGFuZ3VsYXIgYm91bmRzXG4gKiBcbiAqIEBwYXJhbSBjb29yZCAtIENvb3JkaW5hdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSByZWN0IC0gUmVjdGFuZ2xlIGJvdW5kc1xuICogQHJldHVybnMgVHJ1ZSBpZiBjb29yZGluYXRlIGlzIGluc2lkZSByZWN0YW5nbGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29vcmRpbmF0ZUluUmVjdChcbiAgY29vcmQ6IENvb3JkaW5hdGVzLFxuICByZWN0OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9XG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBjb29yZC54ID49IHJlY3QueCAmJlxuICAgIGNvb3JkLnggPD0gcmVjdC54ICsgcmVjdC53aWR0aCAmJlxuICAgIGNvb3JkLnkgPj0gcmVjdC55ICYmXG4gICAgY29vcmQueSA8PSByZWN0LnkgKyByZWN0LmhlaWdodFxuICApO1xufVxuXG4vKipcbiAqIEZpbmQgY2xvc2VzdCBwb2ludCBvbiByZWN0YW5nbGUgdG8gZ2l2ZW4gY29vcmRpbmF0ZVxuICogXG4gKiBAcGFyYW0gY29vcmQgLSBDb29yZGluYXRlIHBvaW50XG4gKiBAcGFyYW0gcmVjdCAtIFJlY3RhbmdsZSBib3VuZHNcbiAqIEByZXR1cm5zIENsb3Nlc3QgcG9pbnQgb24gcmVjdGFuZ2xlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbG9zZXN0UG9pbnRPblJlY3QoXG4gIGNvb3JkOiBDb29yZGluYXRlcyxcbiAgcmVjdDogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfVxuKTogQ29vcmRpbmF0ZXMge1xuICBjb25zdCBjbG9zZXN0WCA9IE1hdGgubWF4KHJlY3QueCwgTWF0aC5taW4oY29vcmQueCwgcmVjdC54ICsgcmVjdC53aWR0aCkpO1xuICBjb25zdCBjbG9zZXN0WSA9IE1hdGgubWF4KHJlY3QueSwgTWF0aC5taW4oY29vcmQueSwgcmVjdC55ICsgcmVjdC5oZWlnaHQpKTtcbiAgXG4gIHJldHVybiB7IHg6IGNsb3Nlc3RYLCB5OiBjbG9zZXN0WSB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBzcXVhcmVkIGRpc3RhbmNlIGZyb20gcG9pbnQgdG8gcmVjdGFuZ2xlXG4gKiAoTW9yZSBlZmZpY2llbnQgdGhhbiBkaXN0YW5jZSBmb3IgY29tcGFyaXNvbiBwdXJwb3NlcylcbiAqIFxuICogQHBhcmFtIGNvb3JkIC0gQ29vcmRpbmF0ZSBwb2ludFxuICogQHBhcmFtIHJlY3QgLSBSZWN0YW5nbGUgYm91bmRzXG4gKiBAcmV0dXJucyBTcXVhcmVkIGRpc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXN0YW5jZVRvUmVjdFNxdWFyZWQoXG4gIGNvb3JkOiBDb29yZGluYXRlcyxcbiAgcmVjdDogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfVxuKTogbnVtYmVyIHtcbiAgY29uc3QgY2xvc2VzdCA9IGdldENsb3Nlc3RQb2ludE9uUmVjdChjb29yZCwgcmVjdCk7XG4gIGNvbnN0IGR4ID0gY29vcmQueCAtIGNsb3Nlc3QueDtcbiAgY29uc3QgZHkgPSBjb29yZC55IC0gY2xvc2VzdC55O1xuICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS0EsSUFBQUEsWUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBTkE7QUFDQTtBQUNBO0FBQ0E7O0FBYUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0UsY0FBY0EsQ0FBQ0MsS0FBeUIsRUFBZTtFQUNyRSxJQUFJLElBQUFDLHdCQUFpQixFQUFDRCxLQUFLLENBQUMsRUFBRTtJQUM1QixPQUFPO01BQ0xFLENBQUMsRUFBRUYsS0FBSyxDQUFDRyxPQUFP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
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _types = require("./types");
|
|
7
|
+
Object.keys(_types).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _types[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _types[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
var _events = require("./events");
|
|
18
|
+
Object.keys(_events).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _events[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _events[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
var _components = require("./components");
|
|
29
|
+
Object.keys(_components).forEach(function (key) {
|
|
30
|
+
if (key === "default" || key === "__esModule") return;
|
|
31
|
+
if (key in exports && exports[key] === _components[key]) return;
|
|
32
|
+
Object.defineProperty(exports, key, {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function () {
|
|
35
|
+
return _components[key];
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZXMiLCJyZXF1aXJlIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJleHBvcnRzIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2V2ZW50cyIsIl9jb21wb25lbnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsYXRmb3JtL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIgZW50cnkgcG9pbnRcbiAqIEV4cG9ydHMgYWxsIHBsYXRmb3JtLWF3YXJlIHV0aWxpdGllcywgdHlwZXMsIGFuZCBjb21wb25lbnRzXG4gKi9cblxuLy8gVHlwZXNcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuXG4vLyBFdmVudCB1dGlsaXRpZXNcbmV4cG9ydCAqIGZyb20gJy4vZXZlbnRzJztcblxuLy8gQ29tcG9uZW50c1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnRzJztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFNQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFILE1BQUEsRUFBQUksT0FBQSxXQUFBQyxHQUFBO0VBQUEsSUFBQUEsR0FBQSxrQkFBQUEsR0FBQTtFQUFBLElBQUFBLEdBQUEsSUFBQUMsT0FBQSxJQUFBQSxPQUFBLENBQUFELEdBQUEsTUFBQUwsTUFBQSxDQUFBSyxHQUFBO0VBQUFILE1BQUEsQ0FBQUssY0FBQSxDQUFBRCxPQUFBLEVBQUFELEdBQUE7SUFBQUcsVUFBQTtJQUFBQyxHQUFBLFdBQUFBLENBQUE7TUFBQSxPQUFBVCxNQUFBLENBQUFLLEdBQUE7SUFBQTtFQUFBO0FBQUE7QUFHQSxJQUFBSyxPQUFBLEdBQUFULE9BQUE7QUFBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFPLE9BQUEsRUFBQU4sT0FBQSxXQUFBQyxHQUFBO0VBQUEsSUFBQUEsR0FBQSxrQkFBQUEsR0FBQTtFQUFBLElBQUFBLEdBQUEsSUFBQUMsT0FBQSxJQUFBQSxPQUFBLENBQUFELEdBQUEsTUFBQUssT0FBQSxDQUFBTCxHQUFBO0VBQUFILE1BQUEsQ0FBQUssY0FBQSxDQUFBRCxPQUFBLEVBQUFELEdBQUE7SUFBQUcsVUFBQTtJQUFBQyxHQUFBLFdBQUFBLENBQUE7TUFBQSxPQUFBQyxPQUFBLENBQUFMLEdBQUE7SUFBQTtFQUFBO0FBQUE7QUFHQSxJQUFBTSxXQUFBLEdBQUFWLE9BQUE7QUFBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFRLFdBQUEsRUFBQVAsT0FBQSxXQUFBQyxHQUFBO0VBQUEsSUFBQUEsR0FBQSxrQkFBQUEsR0FBQTtFQUFBLElBQUFBLEdBQUEsSUFBQUMsT0FBQSxJQUFBQSxPQUFBLENBQUFELEdBQUEsTUFBQU0sV0FBQSxDQUFBTixHQUFBO0VBQUFILE1BQUEsQ0FBQUssY0FBQSxDQUFBRCxPQUFBLEVBQUFELEdBQUE7SUFBQUcsVUFBQTtJQUFBQyxHQUFBLFdBQUFBLENBQUE7TUFBQSxPQUFBRSxXQUFBLENBQUFOLEdBQUE7SUFBQTtFQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { GestureResponderEvent } from 'react-native';
|
|
2
|
+
export interface WebPointerEvent {
|
|
3
|
+
clientX: number;
|
|
4
|
+
clientY: number;
|
|
5
|
+
target: EventTarget;
|
|
6
|
+
preventDefault: () => void;
|
|
7
|
+
stopPropagation: () => void;
|
|
8
|
+
}
|
|
9
|
+
export type NativeTouchEvent = GestureResponderEvent;
|
|
10
|
+
export type PlatformPressEvent = WebPointerEvent | NativeTouchEvent;
|
|
11
|
+
export interface Coordinates {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
}
|
|
15
|
+
export interface Rect {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
}
|
|
21
|
+
export interface PlatformOverlayProps {
|
|
22
|
+
visible: boolean;
|
|
23
|
+
onPress: (event: PlatformPressEvent) => void;
|
|
24
|
+
onPressDown?: (event: PlatformPressEvent) => void;
|
|
25
|
+
interactive?: boolean;
|
|
26
|
+
backgroundColor?: string;
|
|
27
|
+
opacity?: number;
|
|
28
|
+
children?: React.ReactNode;
|
|
29
|
+
}
|
|
30
|
+
export interface PlatformButtonProps {
|
|
31
|
+
onPress: () => void;
|
|
32
|
+
backgroundColor?: string;
|
|
33
|
+
size?: number;
|
|
34
|
+
style?: any;
|
|
35
|
+
disabled?: boolean;
|
|
36
|
+
children?: React.ReactNode;
|
|
37
|
+
}
|
|
38
|
+
export interface SpeechRecognitionProps {
|
|
39
|
+
shouldListen: boolean;
|
|
40
|
+
speechStatusCallback: (status: boolean, transcript: string) => void;
|
|
41
|
+
speechResultCallback: (result: string) => void;
|
|
42
|
+
language?: string;
|
|
43
|
+
continuous?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export type PlatformType = 'web' | 'ios' | 'android' | 'windows' | 'macos';
|
|
46
|
+
export interface PlatformCapabilities {
|
|
47
|
+
supportsSpeechRecognition: boolean;
|
|
48
|
+
supportsWebSpeechAPI: boolean;
|
|
49
|
+
supportsNativeSpeech: boolean;
|
|
50
|
+
supportsMouseEvents: boolean;
|
|
51
|
+
supportsTouchEvents: boolean;
|
|
52
|
+
supportsPointerEvents: boolean;
|
|
53
|
+
}
|
|
54
|
+
export declare enum ListenerState {
|
|
55
|
+
Idle = "idle",
|
|
56
|
+
Listening = "listening",
|
|
57
|
+
Processing = "processing"
|
|
58
|
+
}
|
|
59
|
+
export interface FeedbackMessage {
|
|
60
|
+
message?: string;
|
|
61
|
+
minimalText?: string;
|
|
62
|
+
fullText?: string;
|
|
63
|
+
type: 'info' | 'error' | 'success' | 'warning';
|
|
64
|
+
shouldSpeak?: boolean;
|
|
65
|
+
origin?: 'voice' | 'system';
|
|
66
|
+
}
|
|
67
|
+
export declare function isWebPointerEvent(event: any): event is WebPointerEvent;
|
|
68
|
+
export declare function isNativeTouchEvent(event: any): event is NativeTouchEvent;
|
|
69
|
+
export type PlatformStyle = {
|
|
70
|
+
[key: string]: any;
|
|
71
|
+
};
|
|
72
|
+
export interface PlatformConfig {
|
|
73
|
+
enableVoiceRecognition?: boolean;
|
|
74
|
+
enableClickTracking?: boolean;
|
|
75
|
+
enableTranscriptDisplay?: boolean;
|
|
76
|
+
speechLanguage?: string;
|
|
77
|
+
overlayOpacity?: number;
|
|
78
|
+
buttonSize?: number;
|
|
79
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ListenerState = void 0;
|
|
7
|
+
exports.isNativeTouchEvent = isNativeTouchEvent;
|
|
8
|
+
exports.isWebPointerEvent = isWebPointerEvent;
|
|
9
|
+
/**
|
|
10
|
+
* Platform-aware type definitions for cross-platform compatibility
|
|
11
|
+
* Supports Web, iOS, and Android platforms
|
|
12
|
+
*/
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Event Types
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Web-specific pointer event with mouse coordinates
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Native touch event (iOS/Android)
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Unified platform event type
|
|
24
|
+
* Use type guards (isWebPointerEvent, isNativeTouchEvent) to narrow the type
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Unified coordinate representation
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Rectangle bounds for UI elements
|
|
31
|
+
*/
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// Component Props Types
|
|
34
|
+
// ============================================================================
|
|
35
|
+
/**
|
|
36
|
+
* Platform-aware overlay props
|
|
37
|
+
*/
|
|
38
|
+
/**
|
|
39
|
+
* Platform-aware button props
|
|
40
|
+
*/
|
|
41
|
+
/**
|
|
42
|
+
* Platform-aware speech recognition props
|
|
43
|
+
*/
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// Platform Detection Types
|
|
46
|
+
// ============================================================================
|
|
47
|
+
/**
|
|
48
|
+
* Platform types
|
|
49
|
+
*/
|
|
50
|
+
/**
|
|
51
|
+
* Platform capabilities
|
|
52
|
+
*/
|
|
53
|
+
// ============================================================================
|
|
54
|
+
// Listener State Types
|
|
55
|
+
// ============================================================================
|
|
56
|
+
/**
|
|
57
|
+
* Voice interaction state
|
|
58
|
+
*/
|
|
59
|
+
let ListenerState = exports.ListenerState = /*#__PURE__*/function (ListenerState) {
|
|
60
|
+
ListenerState["Idle"] = "idle";
|
|
61
|
+
ListenerState["Listening"] = "listening";
|
|
62
|
+
ListenerState["Processing"] = "processing";
|
|
63
|
+
return ListenerState;
|
|
64
|
+
}({});
|
|
65
|
+
/**
|
|
66
|
+
* Message type for user feedback
|
|
67
|
+
*/
|
|
68
|
+
// ============================================================================
|
|
69
|
+
// Type Guards
|
|
70
|
+
// ============================================================================
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Type guard to check if event is a web pointer event
|
|
74
|
+
*/
|
|
75
|
+
function isWebPointerEvent(event) {
|
|
76
|
+
return event && typeof event.clientX === 'number' && typeof event.clientY === 'number' && typeof event.preventDefault === 'function';
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Type guard to check if event is a native touch event
|
|
81
|
+
*/
|
|
82
|
+
function isNativeTouchEvent(event) {
|
|
83
|
+
return event && event.nativeEvent && typeof event.nativeEvent.locationX === 'number' && typeof event.nativeEvent.locationY === 'number';
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// ============================================================================
|
|
87
|
+
// Utility Types
|
|
88
|
+
// ============================================================================
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Style type that works across platforms
|
|
92
|
+
*/
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Configuration for platform-specific behavior
|
|
96
|
+
*/
|
|
97
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMaXN0ZW5lclN0YXRlIiwiZXhwb3J0cyIsImlzV2ViUG9pbnRlckV2ZW50IiwiZXZlbnQiLCJjbGllbnRYIiwiY2xpZW50WSIsInByZXZlbnREZWZhdWx0IiwiaXNOYXRpdmVUb3VjaEV2ZW50IiwibmF0aXZlRXZlbnQiLCJsb2NhdGlvblgiLCJsb2NhdGlvblkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvcGxhdGZvcm0vdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQbGF0Zm9ybS1hd2FyZSB0eXBlIGRlZmluaXRpb25zIGZvciBjcm9zcy1wbGF0Zm9ybSBjb21wYXRpYmlsaXR5XG4gKiBTdXBwb3J0cyBXZWIsIGlPUywgYW5kIEFuZHJvaWQgcGxhdGZvcm1zXG4gKi9cblxuaW1wb3J0IHsgUGxhdGZvcm0sIEdlc3R1cmVSZXNwb25kZXJFdmVudCB9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEV2ZW50IFR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogV2ViLXNwZWNpZmljIHBvaW50ZXIgZXZlbnQgd2l0aCBtb3VzZSBjb29yZGluYXRlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYlBvaW50ZXJFdmVudCB7XG4gIGNsaWVudFg6IG51bWJlcjtcbiAgY2xpZW50WTogbnVtYmVyO1xuICB0YXJnZXQ6IEV2ZW50VGFyZ2V0O1xuICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIE5hdGl2ZSB0b3VjaCBldmVudCAoaU9TL0FuZHJvaWQpXG4gKi9cbmV4cG9ydCB0eXBlIE5hdGl2ZVRvdWNoRXZlbnQgPSBHZXN0dXJlUmVzcG9uZGVyRXZlbnQ7XG5cbi8qKlxuICogVW5pZmllZCBwbGF0Zm9ybSBldmVudCB0eXBlXG4gKiBVc2UgdHlwZSBndWFyZHMgKGlzV2ViUG9pbnRlckV2ZW50LCBpc05hdGl2ZVRvdWNoRXZlbnQpIHRvIG5hcnJvdyB0aGUgdHlwZVxuICovXG5leHBvcnQgdHlwZSBQbGF0Zm9ybVByZXNzRXZlbnQgPSBXZWJQb2ludGVyRXZlbnQgfCBOYXRpdmVUb3VjaEV2ZW50O1xuXG4vKipcbiAqIFVuaWZpZWQgY29vcmRpbmF0ZSByZXByZXNlbnRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvb3JkaW5hdGVzIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVjdGFuZ2xlIGJvdW5kcyBmb3IgVUkgZWxlbWVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWN0IHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb21wb25lbnQgUHJvcHMgVHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBQbGF0Zm9ybS1hd2FyZSBvdmVybGF5IHByb3BzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1PdmVybGF5UHJvcHMge1xuICB2aXNpYmxlOiBib29sZWFuO1xuICBvblByZXNzOiAoZXZlbnQ6IFBsYXRmb3JtUHJlc3NFdmVudCkgPT4gdm9pZDtcbiAgb25QcmVzc0Rvd24/OiAoZXZlbnQ6IFBsYXRmb3JtUHJlc3NFdmVudCkgPT4gdm9pZDtcbiAgaW50ZXJhY3RpdmU/OiBib29sZWFuO1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIG9wYWNpdHk/OiBudW1iZXI7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG4vKipcbiAqIFBsYXRmb3JtLWF3YXJlIGJ1dHRvbiBwcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYXRmb3JtQnV0dG9uUHJvcHMge1xuICBvblByZXNzOiAoKSA9PiB2b2lkO1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIHNpemU/OiBudW1iZXI7XG4gIHN0eWxlPzogYW55O1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG4vKipcbiAqIFBsYXRmb3JtLWF3YXJlIHNwZWVjaCByZWNvZ25pdGlvbiBwcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwZWVjaFJlY29nbml0aW9uUHJvcHMge1xuICBzaG91bGRMaXN0ZW46IGJvb2xlYW47XG4gIHNwZWVjaFN0YXR1c0NhbGxiYWNrOiAoc3RhdHVzOiBib29sZWFuLCB0cmFuc2NyaXB0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNwZWVjaFJlc3VsdENhbGxiYWNrOiAocmVzdWx0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGxhbmd1YWdlPzogc3RyaW5nO1xuICBjb250aW51b3VzPzogYm9vbGVhbjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUGxhdGZvcm0gRGV0ZWN0aW9uIFR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUGxhdGZvcm0gdHlwZXNcbiAqL1xuZXhwb3J0IHR5cGUgUGxhdGZvcm1UeXBlID0gJ3dlYicgfCAnaW9zJyB8ICdhbmRyb2lkJyB8ICd3aW5kb3dzJyB8ICdtYWNvcyc7XG5cbi8qKlxuICogUGxhdGZvcm0gY2FwYWJpbGl0aWVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1DYXBhYmlsaXRpZXMge1xuICBzdXBwb3J0c1NwZWVjaFJlY29nbml0aW9uOiBib29sZWFuO1xuICBzdXBwb3J0c1dlYlNwZWVjaEFQSTogYm9vbGVhbjtcbiAgc3VwcG9ydHNOYXRpdmVTcGVlY2g6IGJvb2xlYW47XG4gIHN1cHBvcnRzTW91c2VFdmVudHM6IGJvb2xlYW47XG4gIHN1cHBvcnRzVG91Y2hFdmVudHM6IGJvb2xlYW47XG4gIHN1cHBvcnRzUG9pbnRlckV2ZW50czogYm9vbGVhbjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTGlzdGVuZXIgU3RhdGUgVHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBWb2ljZSBpbnRlcmFjdGlvbiBzdGF0ZVxuICovXG5leHBvcnQgZW51bSBMaXN0ZW5lclN0YXRlIHtcbiAgSWRsZSA9ICdpZGxlJyxcbiAgTGlzdGVuaW5nID0gJ2xpc3RlbmluZycsXG4gIFByb2Nlc3NpbmcgPSAncHJvY2Vzc2luZycsXG59XG5cbi8qKlxuICogTWVzc2FnZSB0eXBlIGZvciB1c2VyIGZlZWRiYWNrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmVlZGJhY2tNZXNzYWdlIHtcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgbWluaW1hbFRleHQ/OiBzdHJpbmc7XG4gIGZ1bGxUZXh0Pzogc3RyaW5nO1xuICB0eXBlOiAnaW5mbycgfCAnZXJyb3InIHwgJ3N1Y2Nlc3MnIHwgJ3dhcm5pbmcnO1xuICBzaG91bGRTcGVhaz86IGJvb2xlYW47XG4gIG9yaWdpbj86ICd2b2ljZScgfCAnc3lzdGVtJztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVHlwZSBHdWFyZHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGV2ZW50IGlzIGEgd2ViIHBvaW50ZXIgZXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV2ViUG9pbnRlckV2ZW50KGV2ZW50OiBhbnkpOiBldmVudCBpcyBXZWJQb2ludGVyRXZlbnQge1xuICByZXR1cm4gKFxuICAgIGV2ZW50ICYmXG4gICAgdHlwZW9mIGV2ZW50LmNsaWVudFggPT09ICdudW1iZXInICYmXG4gICAgdHlwZW9mIGV2ZW50LmNsaWVudFkgPT09ICdudW1iZXInICYmXG4gICAgdHlwZW9mIGV2ZW50LnByZXZlbnREZWZhdWx0ID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBldmVudCBpcyBhIG5hdGl2ZSB0b3VjaCBldmVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOYXRpdmVUb3VjaEV2ZW50KGV2ZW50OiBhbnkpOiBldmVudCBpcyBOYXRpdmVUb3VjaEV2ZW50IHtcbiAgcmV0dXJuIChcbiAgICBldmVudCAmJlxuICAgIGV2ZW50Lm5hdGl2ZUV2ZW50ICYmXG4gICAgdHlwZW9mIGV2ZW50Lm5hdGl2ZUV2ZW50LmxvY2F0aW9uWCA9PT0gJ251bWJlcicgJiZcbiAgICB0eXBlb2YgZXZlbnQubmF0aXZlRXZlbnQubG9jYXRpb25ZID09PSAnbnVtYmVyJ1xuICApO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVdGlsaXR5IFR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogU3R5bGUgdHlwZSB0aGF0IHdvcmtzIGFjcm9zcyBwbGF0Zm9ybXNcbiAqL1xuZXhwb3J0IHR5cGUgUGxhdGZvcm1TdHlsZSA9IHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufTtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBiZWhhdmlvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYXRmb3JtQ29uZmlnIHtcbiAgZW5hYmxlVm9pY2VSZWNvZ25pdGlvbj86IGJvb2xlYW47XG4gIGVuYWJsZUNsaWNrVHJhY2tpbmc/OiBib29sZWFuO1xuICBlbmFibGVUcmFuc2NyaXB0RGlzcGxheT86IGJvb2xlYW47XG4gIHNwZWVjaExhbmd1YWdlPzogc3RyaW5nO1xuICBvdmVybGF5T3BhY2l0eT86IG51bWJlcjtcbiAgYnV0dG9uU2l6ZT86IG51bWJlcjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBV0E7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkEsSUFHWUEsYUFBYSxHQUFBQyxPQUFBLENBQUFELGFBQUEsMEJBQWJBLGFBQWE7RUFBYkEsYUFBYTtFQUFiQSxhQUFhO0VBQWJBLGFBQWE7RUFBQSxPQUFiQSxhQUFhO0FBQUE7QUFNekI7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNFLGlCQUFpQkEsQ0FBQ0MsS0FBVSxFQUE0QjtFQUN0RSxPQUNFQSxLQUFLLElBQ0wsT0FBT0EsS0FBSyxDQUFDQyxPQUFPLEtBQUssUUFBUSxJQUNqQyxPQUFPRCxLQUFLLENBQUNFLE9BQU8sS0FBSyxRQUFRLElBQ2pDLE9BQU9GLEtBQUssQ0FBQ0csY0FBYyxLQUFLLFVBQVU7QUFFOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBU0Msa0JBQWtCQSxDQUFDSixLQUFVLEVBQTZCO0VBQ3hFLE9BQ0VBLEtBQUssSUFDTEEsS0FBSyxDQUFDSyxXQUFXLElBQ2pCLE9BQU9MLEtBQUssQ0FBQ0ssV0FBVyxDQUFDQyxTQUFTLEtBQUssUUFBUSxJQUMvQyxPQUFPTixLQUFLLENBQUNLLFdBQVcsQ0FBQ0UsU0FBUyxLQUFLLFFBQVE7QUFFbkQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFLQTtBQUNBO0FBQ0EiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { GenieObject } from "@garrix82/reactgenie-dsl";
|
|
2
|
+
export { GenieClass, GenieFunction, GenieKey, GenieProperty, DataClass, HelperClass, int, float, ClassDescriptor, FieldDescriptor, FuncDescriptor, ParamDescriptor, } from "@garrix82/reactgenie-dsl";
|
|
3
|
+
import { Store } from 'redux';
|
|
4
|
+
import { type NativeVisibilityState } from "./native-visibility";
|
|
5
|
+
export { AllGenieObjects } from "@garrix82/reactgenie-dsl";
|
|
6
|
+
export interface GenieInterfaceStoreElement {
|
|
7
|
+
objectClassName: string;
|
|
8
|
+
viewClassName: string;
|
|
9
|
+
title: (any: any) => string;
|
|
10
|
+
function: any;
|
|
11
|
+
displayPriority: (target: any) => number;
|
|
12
|
+
}
|
|
13
|
+
declare class GenieInterfacesStore {
|
|
14
|
+
supportedTypes: Set<string>;
|
|
15
|
+
interfaces: {
|
|
16
|
+
[key: string]: GenieInterfaceStoreElement[];
|
|
17
|
+
};
|
|
18
|
+
addInterface(element: GenieInterfaceStoreElement): void;
|
|
19
|
+
getObjectClassName(object: GenieObject): string;
|
|
20
|
+
getInterfaces(object: GenieObject): GenieInterfaceStoreElement;
|
|
21
|
+
allInterfaces(): {
|
|
22
|
+
[key: string]: GenieInterfaceStoreElement;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export declare const AllGenieObjectInterfaces: GenieInterfacesStore;
|
|
26
|
+
export declare const AllGenieDisplayedInstances: {
|
|
27
|
+
[key: string]: () => GenieInterfaceSpec;
|
|
28
|
+
};
|
|
29
|
+
export declare const AllGenieDisplayedInstanceRefreshers: {
|
|
30
|
+
[key: string]: () => void;
|
|
31
|
+
};
|
|
32
|
+
export declare const ClickPoints: {
|
|
33
|
+
x: number;
|
|
34
|
+
y: number;
|
|
35
|
+
}[];
|
|
36
|
+
export declare const CurrentSelectionBlockedRects: Array<{
|
|
37
|
+
x: number;
|
|
38
|
+
y: number;
|
|
39
|
+
width: number;
|
|
40
|
+
height: number;
|
|
41
|
+
}>;
|
|
42
|
+
export type ExampleLike = {
|
|
43
|
+
user_utterance?: unknown;
|
|
44
|
+
example_parsed?: unknown;
|
|
45
|
+
};
|
|
46
|
+
export type FuncParamLike = {
|
|
47
|
+
name?: unknown;
|
|
48
|
+
type?: unknown;
|
|
49
|
+
required?: unknown;
|
|
50
|
+
};
|
|
51
|
+
export type FuncDescriptorLike = {
|
|
52
|
+
func_name?: unknown;
|
|
53
|
+
isStatic?: unknown;
|
|
54
|
+
returnType?: unknown;
|
|
55
|
+
parameters?: unknown;
|
|
56
|
+
};
|
|
57
|
+
export declare function hasSameFunctionSignature(left: FuncDescriptorLike, right: FuncDescriptorLike): boolean;
|
|
58
|
+
export declare function upsertFunctionDescriptor(functions: Set<FuncDescriptorLike>, candidate: FuncDescriptorLike): boolean;
|
|
59
|
+
export declare function mergeUniqueExamples<T extends ExampleLike>(existing: T[] | null | undefined, incoming: T[] | null | undefined): T[];
|
|
60
|
+
interface GenieObjectSpec {
|
|
61
|
+
className: string;
|
|
62
|
+
key: any;
|
|
63
|
+
}
|
|
64
|
+
interface GenieRect {
|
|
65
|
+
x: number;
|
|
66
|
+
y: number;
|
|
67
|
+
width: number;
|
|
68
|
+
height: number;
|
|
69
|
+
top: number;
|
|
70
|
+
left: number;
|
|
71
|
+
bottom: number;
|
|
72
|
+
right: number;
|
|
73
|
+
}
|
|
74
|
+
export interface GenieInterfaceSpec extends GenieObjectSpec {
|
|
75
|
+
rect: GenieRect;
|
|
76
|
+
isFocusedScreen?: boolean;
|
|
77
|
+
}
|
|
78
|
+
export interface RetrieveInterfacesResult {
|
|
79
|
+
interfaces: GenieInterfaceSpec[];
|
|
80
|
+
visibilityState: NativeVisibilityState;
|
|
81
|
+
}
|
|
82
|
+
export declare function InstantiateGenieObject(objectSpec: GenieObjectSpec): any;
|
|
83
|
+
export declare function RetrieveInterfaces(): GenieInterfaceSpec[];
|
|
84
|
+
export declare function RetrieveInterfacesSnapshot(): RetrieveInterfacesResult;
|
|
85
|
+
export declare function RefreshDisplayedInstanceRects(): void;
|
|
86
|
+
export declare function initReactGenie(): Store<any, any>;
|
|
87
|
+
export declare function GenieClassInterface(type: string, displayTitle?: string | ((any: any) => string) | undefined, displayPriority?: number | ((target: any) => number)): (target: any) => any;
|