@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.
Files changed (85) hide show
  1. package/.env.example +22 -0
  2. package/.github/workflows/publish.yml +20 -0
  3. package/LICENSE.txt +201 -0
  4. package/README.md +621 -0
  5. package/babel.config.js +29 -0
  6. package/dist/adapters/__tests__/expo-router-adapter.test.d.ts +1 -0
  7. package/dist/adapters/expo-router-adapter.d.ts +16 -0
  8. package/dist/adapters/expo-router-adapter.js +521 -0
  9. package/dist/adapters/navigation-adapter.d.ts +20 -0
  10. package/dist/adapters/navigation-adapter.js +137 -0
  11. package/dist/audio-visualizer.d.ts +14 -0
  12. package/dist/audio-visualizer.js +123 -0
  13. package/dist/current-selection.d.ts +27 -0
  14. package/dist/current-selection.js +94 -0
  15. package/dist/errors.d.ts +19 -0
  16. package/dist/errors.js +37 -0
  17. package/dist/genie/DateTime.d.ts +66 -0
  18. package/dist/genie/DateTime.js +399 -0
  19. package/dist/genie/TimeDelta.d.ts +35 -0
  20. package/dist/genie/TimeDelta.js +169 -0
  21. package/dist/genie-view-wrapper.d.ts +1 -0
  22. package/dist/genie-view-wrapper.js +377 -0
  23. package/dist/hooks/__tests__/useSpeechRecognition.test.d.ts +1 -0
  24. package/dist/hooks/useSpeechRecognition.d.ts +28 -0
  25. package/dist/hooks/useSpeechRecognition.js +118 -0
  26. package/dist/index.d.ts +30 -0
  27. package/dist/index.js +469 -0
  28. package/dist/logger.d.ts +23 -0
  29. package/dist/logger.js +597 -0
  30. package/dist/logger.remote.test.d.ts +0 -0
  31. package/dist/modality-provider-v2.d.ts +28 -0
  32. package/dist/modality-provider-v2.js +1321 -0
  33. package/dist/modality-provider.d.ts +22 -0
  34. package/dist/modality-provider.js +373 -0
  35. package/dist/native-visibility.d.ts +28 -0
  36. package/dist/native-visibility.js +50 -0
  37. package/dist/platform/VoiceRecognitionBar.d.ts +17 -0
  38. package/dist/platform/VoiceRecognitionBar.js +332 -0
  39. package/dist/platform/components.d.ts +32 -0
  40. package/dist/platform/components.js +351 -0
  41. package/dist/platform/events.d.ts +31 -0
  42. package/dist/platform/events.js +274 -0
  43. package/dist/platform/index.d.ts +3 -0
  44. package/dist/platform/index.js +39 -0
  45. package/dist/platform/types.d.ts +79 -0
  46. package/dist/platform/types.js +97 -0
  47. package/dist/react-decorators.d.ts +87 -0
  48. package/dist/react-decorators.js +368 -0
  49. package/dist/shared-store.d.ts +74 -0
  50. package/dist/shared-store.js +589 -0
  51. package/dist/speech-recognition/__tests__/speech-recognition-groq-transport.test.d.ts +1 -0
  52. package/dist/speech-recognition/__tests__/speech-recognition-native.test.d.ts +1 -0
  53. package/dist/speech-recognition/__tests__/speech-recognition-openai-native.test.d.ts +1 -0
  54. package/dist/speech-recognition/__tests__/speech-recognition-openai.test.d.ts +1 -0
  55. package/dist/speech-recognition/__tests__/speech-recognition-unified-import.test.d.ts +0 -0
  56. package/dist/speech-recognition/__tests__/speech-recognition-unified.test.d.ts +1 -0
  57. package/dist/speech-recognition/speech-recognition-groq.d.ts +21 -0
  58. package/dist/speech-recognition/speech-recognition-groq.js +409 -0
  59. package/dist/speech-recognition/speech-recognition-mlx.d.ts +15 -0
  60. package/dist/speech-recognition/speech-recognition-mlx.js +393 -0
  61. package/dist/speech-recognition/speech-recognition-native.d.ts +24 -0
  62. package/dist/speech-recognition/speech-recognition-native.js +632 -0
  63. package/dist/speech-recognition/speech-recognition-openai-native.d.ts +40 -0
  64. package/dist/speech-recognition/speech-recognition-openai-native.js +653 -0
  65. package/dist/speech-recognition/speech-recognition-openai.d.ts +39 -0
  66. package/dist/speech-recognition/speech-recognition-openai.js +718 -0
  67. package/dist/speech-recognition/speech-recognition-unified.d.ts +93 -0
  68. package/dist/speech-recognition/speech-recognition-unified.js +589 -0
  69. package/dist/speech-recognition/utils/groq-transcription.d.ts +41 -0
  70. package/dist/speech-recognition/utils/groq-transcription.js +382 -0
  71. package/dist/speech-recognition.d.ts +7 -0
  72. package/dist/speech-recognition.js +61 -0
  73. package/dist/voice-pipeline-telemetry.d.ts +26 -0
  74. package/dist/voice-pipeline-telemetry.js +15 -0
  75. package/garrix82-reactgenie-lib-1.3.0.tgz +0 -0
  76. package/metro/index.js +3 -0
  77. package/metro/with-genie-registry.js +47 -0
  78. package/package.json +111 -0
  79. package/scripts/dry-run.js +23 -0
  80. package/scripts/generate-genie-registry.js +278 -0
  81. package/scripts/log-file-test.js +51 -0
  82. package/scripts/parse.js +26 -0
  83. package/scripts/prompt.js +19 -0
  84. package/scripts/set-script.js +200 -0
  85. 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,3 @@
1
+ export * from './types';
2
+ export * from './events';
3
+ export * from './components';
@@ -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;