@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,137 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createScreenWrapper = createScreenWrapper;
7
+ exports.isExpoRouter = isExpoRouter;
8
+ exports.useNavigationAdapter = useNavigationAdapter;
9
+ exports.useRouteParams = useRouteParams;
10
+ exports.withNavigationAdapter = withNavigationAdapter;
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /**
14
+ * Navigation Adapter for expo-router and @react-navigation/native
15
+ * Provides a unified navigation interface that works with both paradigms
16
+ */
17
+ // Type definitions for navigation adapters
18
+
19
+ // Detect if expo-router is available
20
+ let expoRouter = null;
21
+ let expoRouterHooks = null;
22
+ try {
23
+ expoRouter = require('expo-router');
24
+ expoRouterHooks = {
25
+ useRouter: expoRouter.useRouter,
26
+ useLocalSearchParams: expoRouter.useLocalSearchParams,
27
+ usePathname: expoRouter.usePathname,
28
+ useNavigation: expoRouter.useNavigation
29
+ };
30
+ } catch (e) {
31
+ // expo-router not available, will use @react-navigation/native
32
+ }
33
+
34
+ /**
35
+ * Hook to get unified navigation adapter
36
+ * Works with both expo-router and @react-navigation/native
37
+ */
38
+ function useNavigationAdapter() {
39
+ if (expoRouterHooks) {
40
+ // Use expo-router
41
+ const router = expoRouterHooks.useRouter();
42
+ const navigation = expoRouterHooks.useNavigation();
43
+ return {
44
+ push: (routeName, params) => {
45
+ // Convert route name to expo-router path
46
+ const path = routeName.toLowerCase().replace(/\s+/g, '-');
47
+ router.push({
48
+ pathname: `/${path}`,
49
+ params: params || {}
50
+ });
51
+ },
52
+ navigate: (routeName, params) => {
53
+ const path = routeName.toLowerCase().replace(/\s+/g, '-');
54
+ router.navigate({
55
+ pathname: `/${path}`,
56
+ params: params || {}
57
+ });
58
+ },
59
+ goBack: () => {
60
+ if (router.canGoBack()) {
61
+ router.back();
62
+ }
63
+ },
64
+ canGoBack: () => router.canGoBack(),
65
+ setOptions: options => {
66
+ if (navigation && navigation.setOptions) {
67
+ navigation.setOptions(options);
68
+ }
69
+ },
70
+ getState: () => navigation?.getState?.() || null
71
+ };
72
+ } else {
73
+ // Fallback: will be injected by NavigationContainer
74
+ throw new Error('Navigation adapter must be used within NavigationContainer or expo-router context');
75
+ }
76
+ }
77
+
78
+ /**
79
+ * HOC to inject navigation adapter into components
80
+ * Provides backward compatibility with class components
81
+ */
82
+ function withNavigationAdapter(Component) {
83
+ return props => {
84
+ const navigation = useNavigationAdapter();
85
+ return /*#__PURE__*/_react.default.createElement(Component, _extends({}, props, {
86
+ navigation: navigation
87
+ }));
88
+ };
89
+ }
90
+
91
+ /**
92
+ * Hook to get route params (works with both navigation systems)
93
+ */
94
+ function useRouteParams() {
95
+ if (expoRouterHooks) {
96
+ return expoRouterHooks.useLocalSearchParams();
97
+ }
98
+ // Will be provided by NavigationContainer route prop
99
+ return {};
100
+ }
101
+
102
+ /**
103
+ * Compatibility wrapper for screens
104
+ * Normalizes props between expo-router and react-navigation
105
+ */
106
+ function createScreenWrapper(Screen, options) {
107
+ return function WrappedScreen(props) {
108
+ const params = useRouteParams();
109
+ const navigation = props.navigation || useNavigationAdapter();
110
+ (0, _react.useEffect)(() => {
111
+ if (options && navigation.setOptions) {
112
+ const screenOptions = {
113
+ headerShown: options.headerShown !== false
114
+ };
115
+ if (options.title) {
116
+ screenOptions.title = options.title(params);
117
+ }
118
+ navigation.setOptions(screenOptions);
119
+ }
120
+ }, [navigation, params]);
121
+ return /*#__PURE__*/_react.default.createElement(Screen, _extends({}, props, params, {
122
+ navigation: navigation
123
+ }));
124
+ };
125
+ }
126
+
127
+ /**
128
+ * Check if running in expo-router environment
129
+ */
130
+ function isExpoRouter() {
131
+ return expoRouter !== null;
132
+ }
133
+
134
+ /**
135
+ * Export for type checking
136
+ */
137
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJfZXh0ZW5kcyIsImFzc2lnbiIsImJpbmQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcHBseSIsImV4cG9Sb3V0ZXIiLCJleHBvUm91dGVySG9va3MiLCJ1c2VSb3V0ZXIiLCJ1c2VMb2NhbFNlYXJjaFBhcmFtcyIsInVzZVBhdGhuYW1lIiwidXNlTmF2aWdhdGlvbiIsInVzZU5hdmlnYXRpb25BZGFwdGVyIiwicm91dGVyIiwibmF2aWdhdGlvbiIsInB1c2giLCJyb3V0ZU5hbWUiLCJwYXJhbXMiLCJwYXRoIiwidG9Mb3dlckNhc2UiLCJyZXBsYWNlIiwicGF0aG5hbWUiLCJuYXZpZ2F0ZSIsImdvQmFjayIsImNhbkdvQmFjayIsImJhY2siLCJzZXRPcHRpb25zIiwib3B0aW9ucyIsImdldFN0YXRlIiwiRXJyb3IiLCJ3aXRoTmF2aWdhdGlvbkFkYXB0ZXIiLCJDb21wb25lbnQiLCJwcm9wcyIsImNyZWF0ZUVsZW1lbnQiLCJ1c2VSb3V0ZVBhcmFtcyIsImNyZWF0ZVNjcmVlbldyYXBwZXIiLCJTY3JlZW4iLCJXcmFwcGVkU2NyZWVuIiwidXNlRWZmZWN0Iiwic2NyZWVuT3B0aW9ucyIsImhlYWRlclNob3duIiwidGl0bGUiLCJpc0V4cG9Sb3V0ZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRhcHRlcnMvbmF2aWdhdGlvbi1hZGFwdGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE5hdmlnYXRpb24gQWRhcHRlciBmb3IgZXhwby1yb3V0ZXIgYW5kIEByZWFjdC1uYXZpZ2F0aW9uL25hdGl2ZVxuICogUHJvdmlkZXMgYSB1bmlmaWVkIG5hdmlnYXRpb24gaW50ZXJmYWNlIHRoYXQgd29ya3Mgd2l0aCBib3RoIHBhcmFkaWdtc1xuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIG5hdmlnYXRpb24gYWRhcHRlcnNcbmV4cG9ydCBpbnRlcmZhY2UgTmF2aWdhdGlvbkFkYXB0ZXIge1xuICBwdXNoOiAocm91dGVOYW1lOiBzdHJpbmcsIHBhcmFtcz86IGFueSkgPT4gdm9pZDtcbiAgbmF2aWdhdGU6IChyb3V0ZU5hbWU6IHN0cmluZywgcGFyYW1zPzogYW55KSA9PiB2b2lkO1xuICBnb0JhY2s6ICgpID0+IHZvaWQ7XG4gIGNhbkdvQmFjazogKCkgPT4gYm9vbGVhbjtcbiAgc2V0T3B0aW9uczogKG9wdGlvbnM6IGFueSkgPT4gdm9pZDtcbiAgZ2V0U3RhdGU6ICgpID0+IGFueTtcbn1cblxuLy8gRGV0ZWN0IGlmIGV4cG8tcm91dGVyIGlzIGF2YWlsYWJsZVxubGV0IGV4cG9Sb3V0ZXI6IGFueSA9IG51bGw7XG5sZXQgZXhwb1JvdXRlckhvb2tzOiBhbnkgPSBudWxsO1xudHJ5IHtcbiAgZXhwb1JvdXRlciA9IHJlcXVpcmUoJ2V4cG8tcm91dGVyJyk7XG4gIGV4cG9Sb3V0ZXJIb29rcyA9IHtcbiAgICB1c2VSb3V0ZXI6IGV4cG9Sb3V0ZXIudXNlUm91dGVyLFxuICAgIHVzZUxvY2FsU2VhcmNoUGFyYW1zOiBleHBvUm91dGVyLnVzZUxvY2FsU2VhcmNoUGFyYW1zLFxuICAgIHVzZVBhdGhuYW1lOiBleHBvUm91dGVyLnVzZVBhdGhuYW1lLFxuICAgIHVzZU5hdmlnYXRpb246IGV4cG9Sb3V0ZXIudXNlTmF2aWdhdGlvbixcbiAgfTtcbn0gY2F0Y2ggKGUpIHtcbiAgLy8gZXhwby1yb3V0ZXIgbm90IGF2YWlsYWJsZSwgd2lsbCB1c2UgQHJlYWN0LW5hdmlnYXRpb24vbmF0aXZlXG59XG5cbi8qKlxuICogSG9vayB0byBnZXQgdW5pZmllZCBuYXZpZ2F0aW9uIGFkYXB0ZXJcbiAqIFdvcmtzIHdpdGggYm90aCBleHBvLXJvdXRlciBhbmQgQHJlYWN0LW5hdmlnYXRpb24vbmF0aXZlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VOYXZpZ2F0aW9uQWRhcHRlcigpOiBOYXZpZ2F0aW9uQWRhcHRlciB7XG4gIGlmIChleHBvUm91dGVySG9va3MpIHtcbiAgICAvLyBVc2UgZXhwby1yb3V0ZXJcbiAgICBjb25zdCByb3V0ZXIgPSBleHBvUm91dGVySG9va3MudXNlUm91dGVyKCk7XG4gICAgY29uc3QgbmF2aWdhdGlvbiA9IGV4cG9Sb3V0ZXJIb29rcy51c2VOYXZpZ2F0aW9uKCk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHB1c2g6IChyb3V0ZU5hbWU6IHN0cmluZywgcGFyYW1zPzogYW55KSA9PiB7XG4gICAgICAgIC8vIENvbnZlcnQgcm91dGUgbmFtZSB0byBleHBvLXJvdXRlciBwYXRoXG4gICAgICAgIGNvbnN0IHBhdGggPSByb3V0ZU5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICctJyk7XG4gICAgICAgIHJvdXRlci5wdXNoKHtcbiAgICAgICAgICBwYXRobmFtZTogYC8ke3BhdGh9YCxcbiAgICAgICAgICBwYXJhbXM6IHBhcmFtcyB8fCB7fSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgbmF2aWdhdGU6IChyb3V0ZU5hbWU6IHN0cmluZywgcGFyYW1zPzogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGggPSByb3V0ZU5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICctJyk7XG4gICAgICAgIHJvdXRlci5uYXZpZ2F0ZSh7XG4gICAgICAgICAgcGF0aG5hbWU6IGAvJHtwYXRofWAsXG4gICAgICAgICAgcGFyYW1zOiBwYXJhbXMgfHwge30sXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGdvQmFjazogKCkgPT4ge1xuICAgICAgICBpZiAocm91dGVyLmNhbkdvQmFjaygpKSB7XG4gICAgICAgICAgcm91dGVyLmJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNhbkdvQmFjazogKCkgPT4gcm91dGVyLmNhbkdvQmFjaygpLFxuICAgICAgc2V0T3B0aW9uczogKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgICAgICBpZiAobmF2aWdhdGlvbiAmJiBuYXZpZ2F0aW9uLnNldE9wdGlvbnMpIHtcbiAgICAgICAgICBuYXZpZ2F0aW9uLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBnZXRTdGF0ZTogKCkgPT4gbmF2aWdhdGlvbj8uZ2V0U3RhdGU/LigpIHx8IG51bGwsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogd2lsbCBiZSBpbmplY3RlZCBieSBOYXZpZ2F0aW9uQ29udGFpbmVyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdOYXZpZ2F0aW9uIGFkYXB0ZXIgbXVzdCBiZSB1c2VkIHdpdGhpbiBOYXZpZ2F0aW9uQ29udGFpbmVyIG9yIGV4cG8tcm91dGVyIGNvbnRleHQnKTtcbiAgfVxufVxuXG4vKipcbiAqIEhPQyB0byBpbmplY3QgbmF2aWdhdGlvbiBhZGFwdGVyIGludG8gY29tcG9uZW50c1xuICogUHJvdmlkZXMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGNsYXNzIGNvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhOYXZpZ2F0aW9uQWRhcHRlcjxQIGV4dGVuZHMgb2JqZWN0PihcbiAgQ29tcG9uZW50OiBSZWFjdC5Db21wb25lbnRUeXBlPFAgJiB7IG5hdmlnYXRpb246IE5hdmlnYXRpb25BZGFwdGVyIH0+XG4pOiBSZWFjdC5GQzxQPiB7XG4gIHJldHVybiAocHJvcHM6IFApID0+IHtcbiAgICBjb25zdCBuYXZpZ2F0aW9uID0gdXNlTmF2aWdhdGlvbkFkYXB0ZXIoKTtcbiAgICByZXR1cm4gPENvbXBvbmVudCB7Li4ucHJvcHN9IG5hdmlnYXRpb249e25hdmlnYXRpb259IC8+O1xuICB9O1xufVxuXG4vKipcbiAqIEhvb2sgdG8gZ2V0IHJvdXRlIHBhcmFtcyAod29ya3Mgd2l0aCBib3RoIG5hdmlnYXRpb24gc3lzdGVtcylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVJvdXRlUGFyYW1zPFQgPSBhbnk+KCk6IFQge1xuICBpZiAoZXhwb1JvdXRlckhvb2tzKSB7XG4gICAgcmV0dXJuIGV4cG9Sb3V0ZXJIb29rcy51c2VMb2NhbFNlYXJjaFBhcmFtcygpIGFzIFQ7XG4gIH1cbiAgLy8gV2lsbCBiZSBwcm92aWRlZCBieSBOYXZpZ2F0aW9uQ29udGFpbmVyIHJvdXRlIHByb3BcbiAgcmV0dXJuIHt9IGFzIFQ7XG59XG5cbi8qKlxuICogQ29tcGF0aWJpbGl0eSB3cmFwcGVyIGZvciBzY3JlZW5zXG4gKiBOb3JtYWxpemVzIHByb3BzIGJldHdlZW4gZXhwby1yb3V0ZXIgYW5kIHJlYWN0LW5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNjcmVlbldyYXBwZXIoXG4gIFNjcmVlbjogUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+LFxuICBvcHRpb25zPzoge1xuICAgIHRpdGxlPzogKHBhcmFtcz86IGFueSkgPT4gc3RyaW5nO1xuICAgIGhlYWRlclNob3duPzogYm9vbGVhbjtcbiAgfVxuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBXcmFwcGVkU2NyZWVuKHByb3BzOiBhbnkpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB1c2VSb3V0ZVBhcmFtcygpO1xuICAgIGNvbnN0IG5hdmlnYXRpb24gPSBwcm9wcy5uYXZpZ2F0aW9uIHx8IHVzZU5hdmlnYXRpb25BZGFwdGVyKCk7XG4gICAgXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChvcHRpb25zICYmIG5hdmlnYXRpb24uc2V0T3B0aW9ucykge1xuICAgICAgICBjb25zdCBzY3JlZW5PcHRpb25zOiBhbnkgPSB7XG4gICAgICAgICAgaGVhZGVyU2hvd246IG9wdGlvbnMuaGVhZGVyU2hvd24gIT09IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgaWYgKG9wdGlvbnMudGl0bGUpIHtcbiAgICAgICAgICBzY3JlZW5PcHRpb25zLnRpdGxlID0gb3B0aW9ucy50aXRsZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBuYXZpZ2F0aW9uLnNldE9wdGlvbnMoc2NyZWVuT3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSwgW25hdmlnYXRpb24sIHBhcmFtc10pO1xuICAgIFxuICAgIHJldHVybiA8U2NyZWVuIHsuLi5wcm9wc30gey4uLnBhcmFtc30gbmF2aWdhdGlvbj17bmF2aWdhdGlvbn0gLz47XG4gIH07XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgcnVubmluZyBpbiBleHBvLXJvdXRlciBlbnZpcm9ubWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFeHBvUm91dGVyKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZXhwb1JvdXRlciAhPT0gbnVsbDtcbn1cblxuLyoqXG4gKiBFeHBvcnQgZm9yIHR5cGUgY2hlY2tpbmdcbiAqL1xuZXhwb3J0IHR5cGUgeyBOYXZpZ2F0aW9uQWRhcHRlciBhcyBOYXZpZ2F0aW9uIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFLQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFBeUMsU0FBQUQsd0JBQUFFLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFKLHVCQUFBLFlBQUFBLENBQUFFLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJB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
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ export interface AudioVisualizerProps {
3
+ audioLevel: number;
4
+ barCount?: number;
5
+ barColor?: string;
6
+ style?: any;
7
+ }
8
+ export declare const AudioVisualizer: React.FC<AudioVisualizerProps>;
9
+ export declare const AudioLevelIndicator: React.FC<{
10
+ audioLevel: number;
11
+ size?: number;
12
+ color?: string;
13
+ }>;
14
+ export default AudioVisualizer;
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.AudioVisualizer = exports.AudioLevelIndicator = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _reactNative = require("react-native");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ /**
11
+ * Audio Level Visualization Component
12
+ * Shows real-time audio levels with animated bars
13
+ * Works on Web, iOS, and Android
14
+ */
15
+
16
+ /**
17
+ * Audio Visualizer Component
18
+ * Displays animated bars representing audio input level
19
+ */
20
+ const AudioVisualizer = ({
21
+ audioLevel,
22
+ barCount = 5,
23
+ barColor = '#0000ff',
24
+ style
25
+ }) => {
26
+ // Create animated values for each bar
27
+ const animatedValues = _react.default.useMemo(() => Array.from({
28
+ length: barCount
29
+ }, () => new _reactNative.Animated.Value(0.2)), [barCount]);
30
+
31
+ // Animate bars based on audio level
32
+ _react.default.useEffect(() => {
33
+ const normalizedLevel = Math.min(100, Math.max(0, audioLevel)) / 100;
34
+ animatedValues.forEach((animValue, index) => {
35
+ // Each bar has slightly different timing for wave effect
36
+ const delay = index * 50;
37
+ const targetHeight = 0.2 + normalizedLevel * 0.8 * (Math.random() * 0.3 + 0.7);
38
+ _reactNative.Animated.timing(animValue, {
39
+ toValue: targetHeight,
40
+ duration: 100,
41
+ delay,
42
+ useNativeDriver: false
43
+ }).start();
44
+ });
45
+ }, [audioLevel, animatedValues]);
46
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
47
+ style: [styles.container, style]
48
+ }, animatedValues.map((animValue, index) => /*#__PURE__*/_react.default.createElement(_reactNative.Animated.View, {
49
+ key: index,
50
+ style: [styles.bar, {
51
+ backgroundColor: barColor,
52
+ height: animValue.interpolate({
53
+ inputRange: [0, 1],
54
+ outputRange: ['20%', '100%']
55
+ })
56
+ }]
57
+ })));
58
+ };
59
+
60
+ /**
61
+ * Circular Audio Level Indicator
62
+ * Shows audio level as a pulsing circle
63
+ */
64
+ exports.AudioVisualizer = AudioVisualizer;
65
+ const AudioLevelIndicator = ({
66
+ audioLevel,
67
+ size = 80,
68
+ color = '#0000ff'
69
+ }) => {
70
+ const scale = _react.default.useMemo(() => new _reactNative.Animated.Value(1), []);
71
+ _react.default.useEffect(() => {
72
+ const normalizedLevel = Math.min(100, Math.max(0, audioLevel)) / 100;
73
+ const targetScale = 1 + normalizedLevel * 0.3;
74
+ _reactNative.Animated.spring(scale, {
75
+ toValue: targetScale,
76
+ tension: 50,
77
+ friction: 3,
78
+ useNativeDriver: true
79
+ }).start();
80
+ }, [audioLevel, scale]);
81
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
82
+ style: [indicatorStyles.indicatorContainer, {
83
+ width: size,
84
+ height: size
85
+ }]
86
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Animated.View, {
87
+ style: [indicatorStyles.indicator, {
88
+ backgroundColor: color,
89
+ transform: [{
90
+ scale
91
+ }],
92
+ opacity: 0.7
93
+ }]
94
+ }));
95
+ };
96
+ exports.AudioLevelIndicator = AudioLevelIndicator;
97
+ const styles = _reactNative.StyleSheet.create({
98
+ container: {
99
+ flexDirection: 'row',
100
+ alignItems: 'center',
101
+ justifyContent: 'center',
102
+ height: 60,
103
+ gap: 4
104
+ },
105
+ bar: {
106
+ width: 4,
107
+ borderRadius: 2,
108
+ minHeight: '20%'
109
+ }
110
+ });
111
+ const indicatorStyles = _reactNative.StyleSheet.create({
112
+ indicatorContainer: {
113
+ justifyContent: 'center',
114
+ alignItems: 'center'
115
+ },
116
+ indicator: {
117
+ width: '100%',
118
+ height: '100%',
119
+ borderRadius: 999
120
+ }
121
+ });
122
+ var _default = exports.default = AudioVisualizer;
123
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdE5hdGl2ZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkF1ZGlvVmlzdWFsaXplciIsImF1ZGlvTGV2ZWwiLCJiYXJDb3VudCIsImJhckNvbG9yIiwic3R5bGUiLCJhbmltYXRlZFZhbHVlcyIsIlJlYWN0IiwidXNlTWVtbyIsIkFycmF5IiwiZnJvbSIsImxlbmd0aCIsIkFuaW1hdGVkIiwiVmFsdWUiLCJ1c2VFZmZlY3QiLCJub3JtYWxpemVkTGV2ZWwiLCJNYXRoIiwibWluIiwibWF4IiwiZm9yRWFjaCIsImFuaW1WYWx1ZSIsImluZGV4IiwiZGVsYXkiLCJ0YXJnZXRIZWlnaHQiLCJyYW5kb20iLCJ0aW1pbmciLCJ0b1ZhbHVlIiwiZHVyYXRpb24iLCJ1c2VOYXRpdmVEcml2ZXIiLCJzdGFydCIsImNyZWF0ZUVsZW1lbnQiLCJWaWV3Iiwic3R5bGVzIiwiY29udGFpbmVyIiwibWFwIiwia2V5IiwiYmFyIiwiYmFja2dyb3VuZENvbG9yIiwiaGVpZ2h0IiwiaW50ZXJwb2xhdGUiLCJpbnB1dFJhbmdlIiwib3V0cHV0UmFuZ2UiLCJleHBvcnRzIiwiQXVkaW9MZXZlbEluZGljYXRvciIsInNpemUiLCJjb2xvciIsInNjYWxlIiwidGFyZ2V0U2NhbGUiLCJzcHJpbmciLCJ0ZW5zaW9uIiwiZnJpY3Rpb24iLCJpbmRpY2F0b3JTdHlsZXMiLCJpbmRpY2F0b3JDb250YWluZXIiLCJ3aWR0aCIsImluZGljYXRvciIsInRyYW5zZm9ybSIsIm9wYWNpdHkiLCJTdHlsZVNoZWV0IiwiY3JlYXRlIiwiZmxleERpcmVjdGlvbiIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsImdhcCIsImJvcmRlclJhZGl1cyIsIm1pbkhlaWdodCIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2F1ZGlvLXZpc3VhbGl6ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXVkaW8gTGV2ZWwgVmlzdWFsaXphdGlvbiBDb21wb25lbnRcbiAqIFNob3dzIHJlYWwtdGltZSBhdWRpbyBsZXZlbHMgd2l0aCBhbmltYXRlZCBiYXJzXG4gKiBXb3JrcyBvbiBXZWIsIGlPUywgYW5kIEFuZHJvaWRcbiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVmlldywgQW5pbWF0ZWQsIFN0eWxlU2hlZXQgfSBmcm9tICdyZWFjdC1uYXRpdmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvVmlzdWFsaXplclByb3BzIHtcbiAgYXVkaW9MZXZlbDogbnVtYmVyOyAvLyAwLTEwMFxuICBiYXJDb3VudD86IG51bWJlcjtcbiAgYmFyQ29sb3I/OiBzdHJpbmc7XG4gIHN0eWxlPzogYW55O1xufVxuXG4vKipcbiAqIEF1ZGlvIFZpc3VhbGl6ZXIgQ29tcG9uZW50XG4gKiBEaXNwbGF5cyBhbmltYXRlZCBiYXJzIHJlcHJlc2VudGluZyBhdWRpbyBpbnB1dCBsZXZlbFxuICovXG5leHBvcnQgY29uc3QgQXVkaW9WaXN1YWxpemVyOiBSZWFjdC5GQzxBdWRpb1Zpc3VhbGl6ZXJQcm9wcz4gPSAoe1xuICBhdWRpb0xldmVsLFxuICBiYXJDb3VudCA9IDUsXG4gIGJhckNvbG9yID0gJyMwMDAwZmYnLFxuICBzdHlsZSxcbn0pID0+IHtcbiAgLy8gQ3JlYXRlIGFuaW1hdGVkIHZhbHVlcyBmb3IgZWFjaCBiYXJcbiAgY29uc3QgYW5pbWF0ZWRWYWx1ZXMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IEFycmF5LmZyb20oeyBsZW5ndGg6IGJhckNvdW50IH0sICgpID0+IG5ldyBBbmltYXRlZC5WYWx1ZSgwLjIpKSxcbiAgICBbYmFyQ291bnRdXG4gICk7XG5cbiAgLy8gQW5pbWF0ZSBiYXJzIGJhc2VkIG9uIGF1ZGlvIGxldmVsXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZExldmVsID0gTWF0aC5taW4oMTAwLCBNYXRoLm1heCgwLCBhdWRpb0xldmVsKSkgLyAxMDA7XG5cbiAgICBhbmltYXRlZFZhbHVlcy5mb3JFYWNoKChhbmltVmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAvLyBFYWNoIGJhciBoYXMgc2xpZ2h0bHkgZGlmZmVyZW50IHRpbWluZyBmb3Igd2F2ZSBlZmZlY3RcbiAgICAgIGNvbnN0IGRlbGF5ID0gaW5kZXggKiA1MDtcbiAgICAgIGNvbnN0IHRhcmdldEhlaWdodCA9IDAuMiArIG5vcm1hbGl6ZWRMZXZlbCAqIDAuOCAqIChNYXRoLnJhbmRvbSgpICogMC4zICsgMC43KTtcblxuICAgICAgQW5pbWF0ZWQudGltaW5nKGFuaW1WYWx1ZSwge1xuICAgICAgICB0b1ZhbHVlOiB0YXJnZXRIZWlnaHQsXG4gICAgICAgIGR1cmF0aW9uOiAxMDAsXG4gICAgICAgIGRlbGF5LFxuICAgICAgICB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlLFxuICAgICAgfSkuc3RhcnQoKTtcbiAgICB9KTtcbiAgfSwgW2F1ZGlvTGV2ZWwsIGFuaW1hdGVkVmFsdWVzXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8VmlldyBzdHlsZT17W3N0eWxlcy5jb250YWluZXIsIHN0eWxlXX0+XG4gICAgICB7YW5pbWF0ZWRWYWx1ZXMubWFwKChhbmltVmFsdWUsIGluZGV4KSA9PiAoXG4gICAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICBzdHlsZT17W1xuICAgICAgICAgICAgc3R5bGVzLmJhcixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBiYXJDb2xvcixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBhbmltVmFsdWUuaW50ZXJwb2xhdGUoe1xuICAgICAgICAgICAgICAgIGlucHV0UmFuZ2U6IFswLCAxXSxcbiAgICAgICAgICAgICAgICBvdXRwdXRSYW5nZTogWycyMCUnLCAnMTAwJSddLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXX1cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgIDwvVmlldz5cbiAgKTtcbn07XG5cbi8qKlxuICogQ2lyY3VsYXIgQXVkaW8gTGV2ZWwgSW5kaWNhdG9yXG4gKiBTaG93cyBhdWRpbyBsZXZlbCBhcyBhIHB1bHNpbmcgY2lyY2xlXG4gKi9cbmV4cG9ydCBjb25zdCBBdWRpb0xldmVsSW5kaWNhdG9yOiBSZWFjdC5GQzx7XG4gIGF1ZGlvTGV2ZWw6IG51bWJlcjtcbiAgc2l6ZT86IG51bWJlcjtcbiAgY29sb3I/OiBzdHJpbmc7XG59PiA9ICh7IGF1ZGlvTGV2ZWwsIHNpemUgPSA4MCwgY29sb3IgPSAnIzAwMDBmZicgfSkgPT4ge1xuICBjb25zdCBzY2FsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gbmV3IEFuaW1hdGVkLlZhbHVlKDEpLCBbXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkTGV2ZWwgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIGF1ZGlvTGV2ZWwpKSAvIDEwMDtcbiAgICBjb25zdCB0YXJnZXRTY2FsZSA9IDEgKyBub3JtYWxpemVkTGV2ZWwgKiAwLjM7XG5cbiAgICBBbmltYXRlZC5zcHJpbmcoc2NhbGUsIHtcbiAgICAgIHRvVmFsdWU6IHRhcmdldFNjYWxlLFxuICAgICAgdGVuc2lvbjogNTAsXG4gICAgICBmcmljdGlvbjogMyxcbiAgICAgIHVzZU5hdGl2ZURyaXZlcjogdHJ1ZSxcbiAgICB9KS5zdGFydCgpO1xuICB9LCBbYXVkaW9MZXZlbCwgc2NhbGVdKTtcblxuICByZXR1cm4gKFxuICAgIDxWaWV3IHN0eWxlPXtbaW5kaWNhdG9yU3R5bGVzLmluZGljYXRvckNvbnRhaW5lciwgeyB3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplIH1dfT5cbiAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgIHN0eWxlPXtbXG4gICAgICAgICAgaW5kaWNhdG9yU3R5bGVzLmluZGljYXRvcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLFxuICAgICAgICAgICAgdHJhbnNmb3JtOiBbeyBzY2FsZSB9XSxcbiAgICAgICAgICAgIG9wYWNpdHk6IDAuNyxcbiAgICAgICAgICB9LFxuICAgICAgICBdfVxuICAgICAgLz5cbiAgICA8L1ZpZXc+XG4gICk7XG59O1xuXG5jb25zdCBzdHlsZXMgPSBTdHlsZVNoZWV0LmNyZWF0ZSh7XG4gIGNvbnRhaW5lcjoge1xuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBoZWlnaHQ6IDYwLFxuICAgIGdhcDogNCxcbiAgfSxcbiAgYmFyOiB7XG4gICAgd2lkdGg6IDQsXG4gICAgYm9yZGVyUmFkaXVzOiAyLFxuICAgIG1pbkhlaWdodDogJzIwJScsXG4gIH0sXG59KTtcblxuY29uc3QgaW5kaWNhdG9yU3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBpbmRpY2F0b3JDb250YWluZXI6IHtcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH0sXG4gIGluZGljYXRvcjoge1xuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgYm9yZGVyUmFkaXVzOiA5OTksXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXVkaW9WaXN1YWxpemVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFNQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxZQUFBLEdBQUFELE9BQUE7QUFBMEQsU0FBQUQsdUJBQUFHLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFQMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFZQTtBQUNB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
@@ -0,0 +1,27 @@
1
+ export interface CurrentSelectionRect {
2
+ x: number;
3
+ y: number;
4
+ width: number;
5
+ height: number;
6
+ }
7
+ export interface CurrentSelectionInterface {
8
+ className: string;
9
+ key: any;
10
+ rect: CurrentSelectionRect;
11
+ }
12
+ type CurrentSelectionOptions = {
13
+ tapSlopPx?: number;
14
+ blockedRects?: CurrentSelectionRect[];
15
+ };
16
+ export declare class CurrentContextError extends Error {
17
+ constructor(message: string);
18
+ }
19
+ export declare function pickNearestInterface(candidates: CurrentSelectionInterface[], clickPoint: {
20
+ x: number;
21
+ y: number;
22
+ }): CurrentSelectionInterface;
23
+ export declare function pickCurrentInterface(currentClassName: string, interfaces: CurrentSelectionInterface[], clickPoints: {
24
+ x: number;
25
+ y: number;
26
+ }[], options?: CurrentSelectionOptions): CurrentSelectionInterface;
27
+ export {};
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CurrentContextError = void 0;
7
+ exports.pickCurrentInterface = pickCurrentInterface;
8
+ exports.pickNearestInterface = pickNearestInterface;
9
+ class CurrentContextError extends Error {
10
+ constructor(message) {
11
+ super(message);
12
+ this.name = 'CurrentContextError';
13
+ }
14
+ }
15
+ exports.CurrentContextError = CurrentContextError;
16
+ function pointToRectDistanceSq(pointX, pointY, rect) {
17
+ const closestX = Math.max(rect.x, Math.min(pointX, rect.x + rect.width));
18
+ const closestY = Math.max(rect.y, Math.min(pointY, rect.y + rect.height));
19
+ return Math.pow(pointX - closestX, 2) + Math.pow(pointY - closestY, 2);
20
+ }
21
+ function pointHitsRect(pointX, pointY, rect, slopPx) {
22
+ const left = rect.x - slopPx;
23
+ const right = rect.x + rect.width + slopPx;
24
+ const top = rect.y - slopPx;
25
+ const bottom = rect.y + rect.height + slopPx;
26
+ return pointX >= left && pointX <= right && pointY >= top && pointY <= bottom;
27
+ }
28
+ function pointIsBlocked(pointX, pointY, blockedRects) {
29
+ for (const rect of blockedRects) {
30
+ if (pointHitsRect(pointX, pointY, rect, 0)) {
31
+ return true;
32
+ }
33
+ }
34
+ return false;
35
+ }
36
+ function pickNearestInterface(candidates, clickPoint) {
37
+ let closest = candidates[0];
38
+ let closestDistance = pointToRectDistanceSq(clickPoint.x, clickPoint.y, closest.rect);
39
+ for (let i = 1; i < candidates.length; i++) {
40
+ const distance = pointToRectDistanceSq(clickPoint.x, clickPoint.y, candidates[i].rect);
41
+ if (distance < closestDistance) {
42
+ closest = candidates[i];
43
+ closestDistance = distance;
44
+ }
45
+ }
46
+ console.log(`[Current] nearest match for tap (${clickPoint.x}, ${clickPoint.y}) -> ${closest.className} ${JSON.stringify(closest.key)} distance=${closestDistance}`);
47
+ return closest;
48
+ }
49
+ function pickCurrentInterface(currentClassName, interfaces, clickPoints, options = {}) {
50
+ const tapSlopPx = options.tapSlopPx ?? 14;
51
+ const blockedRects = options.blockedRects ?? [];
52
+ console.log(`[Current] resolving ${currentClassName}; interfaces=${interfaces.length}; clickPoints=${clickPoints.length}`);
53
+ console.log(`[Current] interfaces: ${interfaces.map(genieInterface => `${genieInterface.className}:${JSON.stringify(genieInterface.key)}@(${genieInterface.rect.x},${genieInterface.rect.y},${genieInterface.rect.width},${genieInterface.rect.height})`).join(" | ")}`);
54
+ const candidates = interfaces.filter(genieInterface => genieInterface.className === currentClassName);
55
+ console.log(`[Current] candidates for ${currentClassName}: ${candidates.map(genieInterface => `${JSON.stringify(genieInterface.key)}@(${genieInterface.rect.x},${genieInterface.rect.y},${genieInterface.rect.width},${genieInterface.rect.height})`).join(" | ") || "none"}`);
56
+ if (candidates.length === 0) {
57
+ throw new CurrentContextError(`No visible ${currentClassName} context is available on this screen.`);
58
+ }
59
+
60
+ // Resolution order:
61
+ // 1. If the user tapped while listening (for example on /probes), resolve the
62
+ // nearest visible wrapper of the requested class only.
63
+ // 2. Otherwise fall back to the largest visible wrapper of that class (for
64
+ // example the single Probe on /probes/[probeId]).
65
+ if (clickPoints.length > 0) {
66
+ for (let index = clickPoints.length - 1; index >= 0; index -= 1) {
67
+ const tap = clickPoints[index];
68
+ if (pointIsBlocked(tap.x, tap.y, blockedRects)) {
69
+ console.log(`[Current] skipping tap (${tap.x}, ${tap.y}) at index ${index}; occluded by voice UI`);
70
+ continue;
71
+ }
72
+ const tappedCandidates = candidates.filter(candidate => pointHitsRect(tap.x, tap.y, candidate.rect, tapSlopPx));
73
+ if (tappedCandidates.length === 0) {
74
+ console.log(`[Current] skipping tap (${tap.x}, ${tap.y}) at index ${index}; no ${currentClassName} hit`);
75
+ continue;
76
+ }
77
+ console.log(`[Current] using tap (${tap.x}, ${tap.y}) at index ${index}; matched ${tappedCandidates.length} candidate(s)`);
78
+ return pickNearestInterface(tappedCandidates, tap);
79
+ }
80
+ console.log(`[Current] no captured taps hit visible ${currentClassName}; falling back to largest visible candidate`);
81
+ }
82
+ let result = candidates[0];
83
+ let biggestArea = result.rect.width * result.rect.height;
84
+ for (let i = 1; i < candidates.length; i++) {
85
+ const area = candidates[i].rect.width * candidates[i].rect.height;
86
+ if (area > biggestArea) {
87
+ result = candidates[i];
88
+ biggestArea = area;
89
+ }
90
+ }
91
+ console.log(`[Current] no tap available; using largest visible ${currentClassName} ${JSON.stringify(result.key)} area=${biggestArea}`);
92
+ return result;
93
+ }
94
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDdXJyZW50Q29udGV4dEVycm9yIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsIm1lc3NhZ2UiLCJuYW1lIiwiZXhwb3J0cyIsInBvaW50VG9SZWN0RGlzdGFuY2VTcSIsInBvaW50WCIsInBvaW50WSIsInJlY3QiLCJjbG9zZXN0WCIsIk1hdGgiLCJtYXgiLCJ4IiwibWluIiwid2lkdGgiLCJjbG9zZXN0WSIsInkiLCJoZWlnaHQiLCJwb3ciLCJwb2ludEhpdHNSZWN0Iiwic2xvcFB4IiwibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwicG9pbnRJc0Jsb2NrZWQiLCJibG9ja2VkUmVjdHMiLCJwaWNrTmVhcmVzdEludGVyZmFjZSIsImNhbmRpZGF0ZXMiLCJjbGlja1BvaW50IiwiY2xvc2VzdCIsImNsb3Nlc3REaXN0YW5jZSIsImkiLCJsZW5ndGgiLCJkaXN0YW5jZSIsImNvbnNvbGUiLCJsb2ciLCJjbGFzc05hbWUiLCJKU09OIiwic3RyaW5naWZ5Iiwia2V5IiwicGlja0N1cnJlbnRJbnRlcmZhY2UiLCJjdXJyZW50Q2xhc3NOYW1lIiwiaW50ZXJmYWNlcyIsImNsaWNrUG9pbnRzIiwib3B0aW9ucyIsInRhcFNsb3BQeCIsIm1hcCIsImdlbmllSW50ZXJmYWNlIiwiam9pbiIsImZpbHRlciIsImluZGV4IiwidGFwIiwidGFwcGVkQ2FuZGlkYXRlcyIsImNhbmRpZGF0ZSIsInJlc3VsdCIsImJpZ2dlc3RBcmVhIiwiYXJlYSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9jdXJyZW50LXNlbGVjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEN1cnJlbnRTZWxlY3Rpb25SZWN0IHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1cnJlbnRTZWxlY3Rpb25JbnRlcmZhY2Uge1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAga2V5OiBhbnk7XG4gIHJlY3Q6IEN1cnJlbnRTZWxlY3Rpb25SZWN0O1xufVxuXG50eXBlIEN1cnJlbnRTZWxlY3Rpb25PcHRpb25zID0ge1xuICB0YXBTbG9wUHg/OiBudW1iZXI7XG4gIGJsb2NrZWRSZWN0cz86IEN1cnJlbnRTZWxlY3Rpb25SZWN0W107XG59O1xuXG5leHBvcnQgY2xhc3MgQ3VycmVudENvbnRleHRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0N1cnJlbnRDb250ZXh0RXJyb3InO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvaW50VG9SZWN0RGlzdGFuY2VTcShcbiAgcG9pbnRYOiBudW1iZXIsXG4gIHBvaW50WTogbnVtYmVyLFxuICByZWN0OiBDdXJyZW50U2VsZWN0aW9uUmVjdCxcbik6IG51bWJlciB7XG4gIGNvbnN0IGNsb3Nlc3RYID0gTWF0aC5tYXgocmVjdC54LCBNYXRoLm1pbihwb2ludFgsIHJlY3QueCArIHJlY3Qud2lkdGgpKTtcbiAgY29uc3QgY2xvc2VzdFkgPSBNYXRoLm1heChyZWN0LnksIE1hdGgubWluKHBvaW50WSwgcmVjdC55ICsgcmVjdC5oZWlnaHQpKTtcbiAgcmV0dXJuIE1hdGgucG93KHBvaW50WCAtIGNsb3Nlc3RYLCAyKSArIE1hdGgucG93KHBvaW50WSAtIGNsb3Nlc3RZLCAyKTtcbn1cblxuZnVuY3Rpb24gcG9pbnRIaXRzUmVjdChcbiAgcG9pbnRYOiBudW1iZXIsXG4gIHBvaW50WTogbnVtYmVyLFxuICByZWN0OiBDdXJyZW50U2VsZWN0aW9uUmVjdCxcbiAgc2xvcFB4OiBudW1iZXIsXG4pOiBib29sZWFuIHtcbiAgY29uc3QgbGVmdCA9IHJlY3QueCAtIHNsb3BQeDtcbiAgY29uc3QgcmlnaHQgPSByZWN0LnggKyByZWN0LndpZHRoICsgc2xvcFB4O1xuICBjb25zdCB0b3AgPSByZWN0LnkgLSBzbG9wUHg7XG4gIGNvbnN0IGJvdHRvbSA9IHJlY3QueSArIHJlY3QuaGVpZ2h0ICsgc2xvcFB4O1xuICByZXR1cm4gcG9pbnRYID49IGxlZnQgJiYgcG9pbnRYIDw9IHJpZ2h0ICYmIHBvaW50WSA+PSB0b3AgJiYgcG9pbnRZIDw9IGJvdHRvbTtcbn1cblxuZnVuY3Rpb24gcG9pbnRJc0Jsb2NrZWQoXG4gIHBvaW50WDogbnVtYmVyLFxuICBwb2ludFk6IG51bWJlcixcbiAgYmxvY2tlZFJlY3RzOiBDdXJyZW50U2VsZWN0aW9uUmVjdFtdLFxuKTogYm9vbGVhbiB7XG4gIGZvciAoY29uc3QgcmVjdCBvZiBibG9ja2VkUmVjdHMpIHtcbiAgICBpZiAocG9pbnRIaXRzUmVjdChwb2ludFgsIHBvaW50WSwgcmVjdCwgMCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaWNrTmVhcmVzdEludGVyZmFjZShcbiAgY2FuZGlkYXRlczogQ3VycmVudFNlbGVjdGlvbkludGVyZmFjZVtdLFxuICBjbGlja1BvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sXG4pOiBDdXJyZW50U2VsZWN0aW9uSW50ZXJmYWNlIHtcbiAgbGV0IGNsb3Nlc3QgPSBjYW5kaWRhdGVzWzBdO1xuICBsZXQgY2xvc2VzdERpc3RhbmNlID0gcG9pbnRUb1JlY3REaXN0YW5jZVNxKFxuICAgIGNsaWNrUG9pbnQueCxcbiAgICBjbGlja1BvaW50LnksXG4gICAgY2xvc2VzdC5yZWN0LFxuICApO1xuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgY2FuZGlkYXRlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGRpc3RhbmNlID0gcG9pbnRUb1JlY3REaXN0YW5jZVNxKFxuICAgICAgY2xpY2tQb2ludC54LFxuICAgICAgY2xpY2tQb2ludC55LFxuICAgICAgY2FuZGlkYXRlc1tpXS5yZWN0LFxuICAgICk7XG4gICAgaWYgKGRpc3RhbmNlIDwgY2xvc2VzdERpc3RhbmNlKSB7XG4gICAgICBjbG9zZXN0ID0gY2FuZGlkYXRlc1tpXTtcbiAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnNvbGUubG9nKFxuICAgIGBbQ3VycmVudF0gbmVhcmVzdCBtYXRjaCBmb3IgdGFwICgke2NsaWNrUG9pbnQueH0sICR7Y2xpY2tQb2ludC55fSkgLT4gJHtjbG9zZXN0LmNsYXNzTmFtZX0gJHtKU09OLnN0cmluZ2lmeShjbG9zZXN0LmtleSl9IGRpc3RhbmNlPSR7Y2xvc2VzdERpc3RhbmNlfWAsXG4gICk7XG4gIHJldHVybiBjbG9zZXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGlja0N1cnJlbnRJbnRlcmZhY2UoXG4gIGN1cnJlbnRDbGFzc05hbWU6IHN0cmluZyxcbiAgaW50ZXJmYWNlczogQ3VycmVudFNlbGVjdGlvbkludGVyZmFjZVtdLFxuICBjbGlja1BvaW50czogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9W10sXG4gIG9wdGlvbnM6IEN1cnJlbnRTZWxlY3Rpb25PcHRpb25zID0ge30sXG4pOiBDdXJyZW50U2VsZWN0aW9uSW50ZXJmYWNlIHtcbiAgY29uc3QgdGFwU2xvcFB4ID0gb3B0aW9ucy50YXBTbG9wUHggPz8gMTQ7XG4gIGNvbnN0IGJsb2NrZWRSZWN0cyA9IG9wdGlvbnMuYmxvY2tlZFJlY3RzID8/IFtdO1xuICBjb25zb2xlLmxvZyhcbiAgICBgW0N1cnJlbnRdIHJlc29sdmluZyAke2N1cnJlbnRDbGFzc05hbWV9OyBpbnRlcmZhY2VzPSR7aW50ZXJmYWNlcy5sZW5ndGh9OyBjbGlja1BvaW50cz0ke2NsaWNrUG9pbnRzLmxlbmd0aH1gLFxuICApO1xuICBjb25zb2xlLmxvZyhcbiAgICBgW0N1cnJlbnRdIGludGVyZmFjZXM6ICR7aW50ZXJmYWNlc1xuICAgICAgLm1hcChcbiAgICAgICAgKGdlbmllSW50ZXJmYWNlKSA9PlxuICAgICAgICAgIGAke2dlbmllSW50ZXJmYWNlLmNsYXNzTmFtZX06JHtKU09OLnN0cmluZ2lmeShnZW5pZUludGVyZmFjZS5rZXkpfUAoJHtnZW5pZUludGVyZmFjZS5yZWN0Lnh9LCR7Z2VuaWVJbnRlcmZhY2UucmVjdC55fSwke2dlbmllSW50ZXJmYWNlLnJlY3Qud2lkdGh9LCR7Z2VuaWVJbnRlcmZhY2UucmVjdC5oZWlnaHR9KWAsXG4gICAgICApXG4gICAgICAuam9pbihcIiB8IFwiKX1gLFxuICApO1xuICBjb25zdCBjYW5kaWRhdGVzID0gaW50ZXJmYWNlcy5maWx0ZXIoXG4gICAgKGdlbmllSW50ZXJmYWNlKSA9PiBnZW5pZUludGVyZmFjZS5jbGFzc05hbWUgPT09IGN1cnJlbnRDbGFzc05hbWUsXG4gICk7XG5cbiAgY29uc29sZS5sb2coXG4gICAgYFtDdXJyZW50XSBjYW5kaWRhdGVzIGZvciAke2N1cnJlbnRDbGFzc05hbWV9OiAke2NhbmRpZGF0ZXNcbiAgICAgIC5tYXAoXG4gICAgICAgIChnZW5pZUludGVyZmFjZSkgPT5cbiAgICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShnZW5pZUludGVyZmFjZS5rZXkpfUAoJHtnZW5pZUludGVyZmFjZS5yZWN0Lnh9LCR7Z2VuaWVJbnRlcmZhY2UucmVjdC55fSwke2dlbmllSW50ZXJmYWNlLnJlY3Qud2lkdGh9LCR7Z2VuaWVJbnRlcmZhY2UucmVjdC5oZWlnaHR9KWAsXG4gICAgICApXG4gICAgICAuam9pbihcIiB8IFwiKSB8fCBcIm5vbmVcIn1gLFxuICApO1xuXG4gIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBDdXJyZW50Q29udGV4dEVycm9yKFxuICAgICAgYE5vIHZpc2libGUgJHtjdXJyZW50Q2xhc3NOYW1lfSBjb250ZXh0IGlzIGF2YWlsYWJsZSBvbiB0aGlzIHNjcmVlbi5gLFxuICAgICk7XG4gIH1cblxuICAvLyBSZXNvbHV0aW9uIG9yZGVyOlxuICAvLyAxLiBJZiB0aGUgdXNlciB0YXBwZWQgd2hpbGUgbGlzdGVuaW5nIChmb3IgZXhhbXBsZSBvbiAvcHJvYmVzKSwgcmVzb2x2ZSB0aGVcbiAgLy8gICAgbmVhcmVzdCB2aXNpYmxlIHdyYXBwZXIgb2YgdGhlIHJlcXVlc3RlZCBjbGFzcyBvbmx5LlxuICAvLyAyLiBPdGhlcndpc2UgZmFsbCBiYWNrIHRvIHRoZSBsYXJnZXN0IHZpc2libGUgd3JhcHBlciBvZiB0aGF0IGNsYXNzIChmb3JcbiAgLy8gICAgZXhhbXBsZSB0aGUgc2luZ2xlIFByb2JlIG9uIC9wcm9iZXMvW3Byb2JlSWRdKS5cbiAgaWYgKGNsaWNrUG9pbnRzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IGNsaWNrUG9pbnRzLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4IC09IDEpIHtcbiAgICAgIGNvbnN0IHRhcCA9IGNsaWNrUG9pbnRzW2luZGV4XTtcbiAgICAgIGlmIChwb2ludElzQmxvY2tlZCh0YXAueCwgdGFwLnksIGJsb2NrZWRSZWN0cykpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYFtDdXJyZW50XSBza2lwcGluZyB0YXAgKCR7dGFwLnh9LCAke3RhcC55fSkgYXQgaW5kZXggJHtpbmRleH07IG9jY2x1ZGVkIGJ5IHZvaWNlIFVJYCxcbiAgICAgICAgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcHBlZENhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLmZpbHRlcigoY2FuZGlkYXRlKSA9PlxuICAgICAgICBwb2ludEhpdHNSZWN0KHRhcC54LCB0YXAueSwgY2FuZGlkYXRlLnJlY3QsIHRhcFNsb3BQeCksXG4gICAgICApO1xuICAgICAgaWYgKHRhcHBlZENhbmRpZGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBbQ3VycmVudF0gc2tpcHBpbmcgdGFwICgke3RhcC54fSwgJHt0YXAueX0pIGF0IGluZGV4ICR7aW5kZXh9OyBubyAke2N1cnJlbnRDbGFzc05hbWV9IGhpdGAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFtDdXJyZW50XSB1c2luZyB0YXAgKCR7dGFwLnh9LCAke3RhcC55fSkgYXQgaW5kZXggJHtpbmRleH07IG1hdGNoZWQgJHt0YXBwZWRDYW5kaWRhdGVzLmxlbmd0aH0gY2FuZGlkYXRlKHMpYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gcGlja05lYXJlc3RJbnRlcmZhY2UodGFwcGVkQ2FuZGlkYXRlcywgdGFwKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBbQ3VycmVudF0gbm8gY2FwdHVyZWQgdGFwcyBoaXQgdmlzaWJsZSAke2N1cnJlbnRDbGFzc05hbWV9OyBmYWxsaW5nIGJhY2sgdG8gbGFyZ2VzdCB2aXNpYmxlIGNhbmRpZGF0ZWAsXG4gICAgKTtcbiAgfVxuXG4gIGxldCByZXN1bHQgPSBjYW5kaWRhdGVzWzBdO1xuICBsZXQgYmlnZ2VzdEFyZWEgPSByZXN1bHQucmVjdC53aWR0aCAqIHJlc3VsdC5yZWN0LmhlaWdodDtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGNhbmRpZGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcmVhID0gY2FuZGlkYXRlc1tpXS5yZWN0LndpZHRoICogY2FuZGlkYXRlc1tpXS5yZWN0LmhlaWdodDtcbiAgICBpZiAoYXJlYSA+IGJpZ2dlc3RBcmVhKSB7XG4gICAgICByZXN1bHQgPSBjYW5kaWRhdGVzW2ldO1xuICAgICAgYmlnZ2VzdEFyZWEgPSBhcmVhO1xuICAgIH1cbiAgfVxuXG4gIGNvbnNvbGUubG9nKFxuICAgIGBbQ3VycmVudF0gbm8gdGFwIGF2YWlsYWJsZTsgdXNpbmcgbGFyZ2VzdCB2aXNpYmxlICR7Y3VycmVudENsYXNzTmFtZX0gJHtKU09OLnN0cmluZ2lmeShyZXN1bHQua2V5KX0gYXJlYT0ke2JpZ2dlc3RBcmVhfWAsXG4gICk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4iXSwibWFwcGluZ3MiOiI7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QUFNLENBQUVJLFNBQVMsSUFDbkRuQyxhQUFhLENBQUNpQyxHQUFHLENBQUN4QyxDQUFDLEVBQUV3QyxHQUFHLENBQUNwQyxDQUFDLEVBQUVzQyxTQUFTLENBQUM5QyxJQUFJLEVBQUVzQyxTQUFTLENBQ3ZELENBQUM7TUFDRCxJQUFJTyxnQkFBZ0IsQ0FBQ3BCLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDakNFLE9BQU8sQ0FBQ0MsR0FBRyxDQUNULDJCQUEyQmdCLEdBQUcsQ0FBQ3hDLENBQUMsS0FBS3dDLEdBQUcsQ0FBQ3BDLENBQUMsY0FBY21DLEtBQUssUUFBUVQsZ0JBQWdCLE1BQ3ZGLENBQUM7UUFDRDtNQUNGO01BRUFQLE9BQU8sQ0FBQ0MsR0FBRyxDQUNULHdCQUF3QmdCLEdBQUcsQ0FBQ3hDLENBQUMsS0FBS3dDLEdBQUcsQ0FBQ3BDLENBQUMsY0FBY21DLEtBQUssYUFBYUUsZ0JBQWdCLENBQUNwQixNQUFNLGVBQ2hHLENBQUM7TUFDRCxPQUFPTixvQkFBb0IsQ0FBQzBCLGdCQUFnQixFQUFFRCxHQUFHLENBQUM7SUFDcEQ7SUFFQWpCLE9BQU8sQ0FBQ0MsR0FBRyxDQUNULDBDQUEwQ00sZ0JBQWdCLDZDQUM1RCxDQUFDO0VBQ0g7RUFFQSxJQUFJYSxNQUFNLEdBQUczQixVQUFVLENBQUMsQ0FBQyxDQUFDO0VBQzFCLElBQUk0QixXQUFXLEdBQUdELE1BQU0sQ0FBQy9DLElBQUksQ0FBQ00sS0FBSyxHQUFHeUMsTUFBTSxDQUFDL0MsSUFBSSxDQUFDUyxNQUFNO0VBRXhELEtBQUssSUFBSWUsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHSixVQUFVLENBQUNLLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7SUFDMUMsTUFBTXlCLElBQUksR0FBRzdCLFVBQVUsQ0FBQ0ksQ0FBQyxDQUFDLENBQUN4QixJQUFJLENBQUNNLEtBQUssR0FBR2MsVUFBVSxDQUFDSSxDQUFDLENBQUMsQ0FBQ3hCLElBQUksQ0FBQ1MsTUFBTTtJQUNqRSxJQUFJd0MsSUFBSSxHQUFHRCxXQUFXLEVBQUU7TUFDdEJELE1BQU0sR0FBRzNCLFVBQVUsQ0FBQ0ksQ0FBQyxDQUFDO01BQ3RCd0IsV0FBVyxHQUFHQyxJQUFJO0lBQ3BCO0VBQ0Y7RUFFQXRCLE9BQU8sQ0FBQ0MsR0FBRyxDQUNULHFEQUFxRE0sZ0JBQWdCLElBQUlKLElBQUksQ0FBQ0MsU0FBUyxDQUFDZ0IsTUFBTSxDQUFDZixHQUFHLENBQUMsU0FBU2dCLFdBQVcsRUFDekgsQ0FBQztFQUNELE9BQU9ELE1BQU07QUFDZiIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,19 @@
1
+ export type GenieUserFacingErrorType = "info" | "error" | "success" | "warning";
2
+ export type GenieUserFacingErrorParams = {
3
+ minimalText: string;
4
+ fullText?: string;
5
+ type?: GenieUserFacingErrorType;
6
+ code?: string;
7
+ shouldSpeak?: boolean;
8
+ cause?: unknown;
9
+ };
10
+ export declare class GenieUserFacingError extends Error {
11
+ code?: string;
12
+ minimalText: string;
13
+ fullText: string;
14
+ type: GenieUserFacingErrorType;
15
+ shouldSpeak?: boolean;
16
+ cause?: unknown;
17
+ constructor({ minimalText, fullText, type, code, shouldSpeak, cause, }: GenieUserFacingErrorParams);
18
+ }
19
+ export declare function isGenieUserFacingError(error: unknown): error is GenieUserFacingError;
package/dist/errors.js ADDED
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.GenieUserFacingError = void 0;
7
+ exports.isGenieUserFacingError = isGenieUserFacingError;
8
+ class GenieUserFacingError extends Error {
9
+ constructor({
10
+ minimalText,
11
+ fullText,
12
+ type = "error",
13
+ code,
14
+ shouldSpeak,
15
+ cause
16
+ }) {
17
+ super(fullText || minimalText);
18
+ this.code = void 0;
19
+ this.minimalText = void 0;
20
+ this.fullText = void 0;
21
+ this.type = void 0;
22
+ this.shouldSpeak = void 0;
23
+ this.cause = void 0;
24
+ this.name = "GenieUserFacingError";
25
+ this.code = code;
26
+ this.minimalText = minimalText;
27
+ this.fullText = fullText || minimalText;
28
+ this.type = type;
29
+ this.shouldSpeak = shouldSpeak;
30
+ this.cause = cause;
31
+ }
32
+ }
33
+ exports.GenieUserFacingError = GenieUserFacingError;
34
+ function isGenieUserFacingError(error) {
35
+ return error instanceof GenieUserFacingError;
36
+ }
37
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJHZW5pZVVzZXJGYWNpbmdFcnJvciIsIkVycm9yIiwiY29uc3RydWN0b3IiLCJtaW5pbWFsVGV4dCIsImZ1bGxUZXh0IiwidHlwZSIsImNvZGUiLCJzaG91bGRTcGVhayIsImNhdXNlIiwibmFtZSIsImV4cG9ydHMiLCJpc0dlbmllVXNlckZhY2luZ0Vycm9yIiwiZXJyb3IiXSwic291cmNlcyI6WyIuLi9zcmMvZXJyb3JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEdlbmllVXNlckZhY2luZ0Vycm9yVHlwZSA9IFwiaW5mb1wiIHwgXCJlcnJvclwiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIjtcblxuZXhwb3J0IHR5cGUgR2VuaWVVc2VyRmFjaW5nRXJyb3JQYXJhbXMgPSB7XG4gIG1pbmltYWxUZXh0OiBzdHJpbmc7XG4gIGZ1bGxUZXh0Pzogc3RyaW5nO1xuICB0eXBlPzogR2VuaWVVc2VyRmFjaW5nRXJyb3JUeXBlO1xuICBjb2RlPzogc3RyaW5nO1xuICBzaG91bGRTcGVhaz86IGJvb2xlYW47XG4gIGNhdXNlPzogdW5rbm93bjtcbn07XG5cbmV4cG9ydCBjbGFzcyBHZW5pZVVzZXJGYWNpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29kZT86IHN0cmluZztcbiAgbWluaW1hbFRleHQ6IHN0cmluZztcbiAgZnVsbFRleHQ6IHN0cmluZztcbiAgdHlwZTogR2VuaWVVc2VyRmFjaW5nRXJyb3JUeXBlO1xuICBzaG91bGRTcGVhaz86IGJvb2xlYW47XG4gIG92ZXJyaWRlIGNhdXNlPzogdW5rbm93bjtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgbWluaW1hbFRleHQsXG4gICAgZnVsbFRleHQsXG4gICAgdHlwZSA9IFwiZXJyb3JcIixcbiAgICBjb2RlLFxuICAgIHNob3VsZFNwZWFrLFxuICAgIGNhdXNlLFxuICB9OiBHZW5pZVVzZXJGYWNpbmdFcnJvclBhcmFtcykge1xuICAgIHN1cGVyKGZ1bGxUZXh0IHx8IG1pbmltYWxUZXh0KTtcbiAgICB0aGlzLm5hbWUgPSBcIkdlbmllVXNlckZhY2luZ0Vycm9yXCI7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICB0aGlzLm1pbmltYWxUZXh0ID0gbWluaW1hbFRleHQ7XG4gICAgdGhpcy5mdWxsVGV4dCA9IGZ1bGxUZXh0IHx8IG1pbmltYWxUZXh0O1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5zaG91bGRTcGVhayA9IHNob3VsZFNwZWFrO1xuICAgIHRoaXMuY2F1c2UgPSBjYXVzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNHZW5pZVVzZXJGYWNpbmdFcnJvcihlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIEdlbmllVXNlckZhY2luZ0Vycm9yIHtcbiAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgR2VuaWVVc2VyRmFjaW5nRXJyb3I7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFXTyxNQUFNQSxvQkFBb0IsU0FBU0MsS0FBSyxDQUFDO0VBUTlDQyxXQUFXQSxDQUFDO0lBQ1ZDLFdBQVc7SUFDWEMsUUFBUTtJQUNSQyxJQUFJLEdBQUcsT0FBTztJQUNkQyxJQUFJO0lBQ0pDLFdBQVc7SUFDWEM7RUFDMEIsQ0FBQyxFQUFFO0lBQzdCLEtBQUssQ0FBQ0osUUFBUSxJQUFJRCxXQUFXLENBQUM7SUFBQyxLQWZqQ0csSUFBSTtJQUFBLEtBQ0pILFdBQVc7SUFBQSxLQUNYQyxRQUFRO0lBQUEsS0FDUkMsSUFBSTtJQUFBLEtBQ0pFLFdBQVc7SUFBQSxLQUNGQyxLQUFLO0lBV1osSUFBSSxDQUFDQyxJQUFJLEdBQUcsc0JBQXNCO0lBQ2xDLElBQUksQ0FBQ0gsSUFBSSxHQUFHQSxJQUFJO0lBQ2hCLElBQUksQ0FBQ0gsV0FBVyxHQUFHQSxXQUFXO0lBQzlCLElBQUksQ0FBQ0MsUUFBUSxHQUFHQSxRQUFRLElBQUlELFdBQVc7SUFDdkMsSUFBSSxDQUFDRSxJQUFJLEdBQUdBLElBQUk7SUFDaEIsSUFBSSxDQUFDRSxXQUFXLEdBQUdBLFdBQVc7SUFDOUIsSUFBSSxDQUFDQyxLQUFLLEdBQUdBLEtBQUs7RUFDcEI7QUFDRjtBQUFDRSxPQUFBLENBQUFWLG9CQUFBLEdBQUFBLG9CQUFBO0FBRU0sU0FBU1csc0JBQXNCQSxDQUFDQyxLQUFjLEVBQWlDO0VBQ3BGLE9BQU9BLEtBQUssWUFBWVosb0JBQW9CO0FBQzlDIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,66 @@
1
+ import { HelperClass } from "@garrix82/reactgenie-dsl";
2
+ import "reflect-metadata";
3
+ import { int } from "@garrix82/reactgenie-dsl";
4
+ export declare class DateTime extends HelperClass {
5
+ private _date;
6
+ year: int;
7
+ month: int;
8
+ day: int;
9
+ dayOfWeek: int;
10
+ hour: int;
11
+ minute: int;
12
+ second: int;
13
+ static sunday: int;
14
+ static monday: int;
15
+ static tuesday: int;
16
+ static wednesday: int;
17
+ static thursday: int;
18
+ static friday: int;
19
+ static saturday: int;
20
+ private updateDate;
21
+ static now(): DateTime;
22
+ static today(): DateTime;
23
+ static fromDate(date: Date): DateTime;
24
+ constructor({ year, month, day, hour, minute, second, }: {
25
+ year?: int;
26
+ month?: int;
27
+ day?: int;
28
+ hour?: int;
29
+ minute?: int;
30
+ second?: int;
31
+ });
32
+ static setup(): void;
33
+ static compare(a: DateTime, b: DateTime): number;
34
+ static fromString(data: string): DateTime;
35
+ static CreateDatetime({ year, month, day, hour, minute, second, }: {
36
+ year?: int;
37
+ month?: int;
38
+ day?: int;
39
+ hour?: int;
40
+ minute?: int;
41
+ second?: int;
42
+ }): DateTime;
43
+ addDateOffset({ year, month, day, hour, minute, second, }: {
44
+ year?: int;
45
+ month?: int;
46
+ day?: int;
47
+ hour?: int;
48
+ minute?: int;
49
+ second?: int;
50
+ }): DateTime;
51
+ setDate({ year, month, day, hour, minute, second, day_of_the_week, }: {
52
+ year?: int;
53
+ month?: int;
54
+ day?: int;
55
+ hour?: int;
56
+ minute?: int;
57
+ second?: int;
58
+ day_of_the_week?: int;
59
+ }): DateTime;
60
+ toString(): string;
61
+ getDate(): Date;
62
+ static Examples: {
63
+ user_utterance: string;
64
+ example_parsed: string;
65
+ }[];
66
+ }