react-native-srschat 0.1.60 → 0.1.62

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.
@@ -3,15 +3,18 @@
3
3
  import { Platform } from 'react-native';
4
4
  import Voice from '@react-native-voice/voice';
5
5
  import { check, PERMISSIONS, request, RESULTS } from 'react-native-permissions';
6
- import useAsyncStorage from '../hooks/useAsyncStorage';
7
6
  let resultCallback = null;
8
7
  let partialResultCallback = null;
9
8
  let silenceTimer = null;
10
- let isCurrentlyRecording = false;
11
9
  let finalResult = '';
12
- let lastPartialResultTime = 0;
13
- const SILENCE_DURATION = 1500; // 1.5 seconds of silence before stopping
14
- const PARTIAL_RESULT_THROTTLE = 100; // Throttle partial results to every 100ms
10
+ const SILENCE_DURATION = 1500;
11
+ const State = {
12
+ IDLE: 'IDLE',
13
+ LISTENING: 'LISTENING',
14
+ FINALIZING: 'FINALIZING'
15
+ };
16
+ let state = State.IDLE;
17
+ let listenersBound = false;
15
18
 
16
19
  // Add this constant for AsyncStorage key
17
20
  const PERMISSION_STORAGE_KEY = '@voice_permission_status';
@@ -25,12 +28,13 @@ export function setPermissionStatusHandlers(getter, setter) {
25
28
  permissionStatusSetter = setter;
26
29
  }
27
30
 
28
- // Initialize Voice handlers
31
+ // Initialize Voice handlers - modified to support live transcription
29
32
  export async function initVoice(onResult, onPartialResult = null) {
30
33
  try {
31
34
  resultCallback = onResult;
32
- partialResultCallback = onPartialResult;
35
+ partialResultCallback = onPartialResult; // Store partial callback
33
36
  finalResult = '';
37
+ if (listenersBound) return true;
34
38
 
35
39
  // Check if Voice module is available
36
40
  if (!Voice) {
@@ -44,114 +48,103 @@ export async function initVoice(onResult, onPartialResult = null) {
44
48
  console.error('Speech recognition is not available on this device');
45
49
  return false;
46
50
  }
47
-
48
- // Check if another recognition session is active
49
- try {
50
- const isRecognizing = await Voice.isRecognizing();
51
- if (isRecognizing) {
52
- console.log('Another recognition session is active, cleaning up...');
53
- await Voice.destroy();
54
- await new Promise(resolve => setTimeout(resolve, 300));
55
- }
56
- } catch (e) {
57
- // Ignore errors checking recognition state
58
- }
51
+ Voice.removeAllListeners();
59
52
 
60
53
  // Set up all event listeners
61
- Voice.onSpeechStart = e => {
62
- console.log('onSpeechStart: ', e);
63
- isCurrentlyRecording = true;
54
+ Voice.onSpeechStart = () => {
55
+ console.log('[onSpeechStart] Setting state to LISTENING');
56
+ state = State.LISTENING;
64
57
  finalResult = '';
65
- if (silenceTimer) {
66
- clearTimeout(silenceTimer);
67
- silenceTimer = null;
68
- }
69
-
70
- // Start initial silence detection
71
- handleSilenceDetection();
58
+ clearSilenceTimer();
72
59
  };
73
- Voice.onSpeechRecognized = e => {
74
- console.log('onSpeechRecognized: ', e);
75
- if (e.isFinal) {
76
- console.log('Speech recognition final');
77
- handleFinalResult();
78
- }
79
- };
80
- Voice.onSpeechEnd = async e => {
81
- console.log('onSpeechEnd: ', e);
82
- if (silenceTimer) {
83
- clearTimeout(silenceTimer);
84
- silenceTimer = null;
85
- }
86
60
 
87
- // On iOS, onSpeechEnd can fire multiple times, so check if we're still recording
88
- if (isCurrentlyRecording && finalResult) {
89
- // Don't call handleFinalResult here on iOS as it causes the error
90
- // Instead, just mark that speech ended and let silence detection handle it
91
- if (Platform.OS === 'ios') {
92
- console.log('iOS: Speech ended, waiting for silence detection to handle cleanup');
93
- } else {
94
- await handleFinalResult();
95
- }
61
+ // Optional: ignore onSpeechRecognized or just log
62
+ Voice.onSpeechRecognized = () => {};
63
+ Voice.onSpeechEnd = () => {
64
+ console.log('[onSpeechEnd] Speech ended, current state:', state);
65
+ clearSilenceTimer();
66
+ // Always reset to IDLE when speech ends (sessions should be considered over)
67
+ console.log('[onSpeechEnd] Scheduling IDLE reset');
68
+ if (Platform.OS === 'android') {
69
+ setTimeout(() => {
70
+ console.log('[onSpeechEnd] Android timeout - setting state to IDLE');
71
+ state = State.IDLE;
72
+ }, 800); // Increased delay
73
+ } else {
74
+ console.log('[onSpeechEnd] iOS - setting state to IDLE immediately');
75
+ state = State.IDLE;
96
76
  }
97
77
  };
98
- Voice.onSpeechError = async e => {
99
- var _e$error, _e$error2, _e$error3, _e$error4;
100
- console.error('onSpeechError: ', e);
101
- if (silenceTimer) {
102
- clearTimeout(silenceTimer);
103
- silenceTimer = null;
104
- }
105
-
106
- // Check for specific error types
107
- const isNoSpeechError = ((_e$error = e.error) === null || _e$error === void 0 ? void 0 : _e$error.code) === "recognition_fail" && ((_e$error2 = e.error) === null || _e$error2 === void 0 || (_e$error2 = _e$error2.message) === null || _e$error2 === void 0 ? void 0 : _e$error2.includes("No speech detected"));
78
+ Voice.onSpeechError = e => {
79
+ var _e$error, _e$error2;
80
+ console.log('[onSpeechError] Error occurred, current state:', state, 'error:', e);
81
+ clearSilenceTimer();
82
+ const code = (_e$error = e.error) === null || _e$error === void 0 || (_e$error = _e$error.code) === null || _e$error === void 0 ? void 0 : _e$error.toString();
83
+ const msg = ((_e$error2 = e.error) === null || _e$error2 === void 0 ? void 0 : _e$error2.message) || '';
108
84
 
109
- // iOS error 1101 is often transient and related to service availability
110
- const isTransientIOSError = Platform.OS === 'ios' && (((_e$error3 = e.error) === null || _e$error3 === void 0 ? void 0 : _e$error3.code) === "1101" || ((_e$error4 = e.error) === null || _e$error4 === void 0 || (_e$error4 = _e$error4.message) === null || _e$error4 === void 0 ? void 0 : _e$error4.includes("kAFAssistantErrorDomain")));
111
- await cleanupVoiceSession();
85
+ // Handle callback first
86
+ if (Platform.OS === 'android' && (code === '7' || code === '5')) {
87
+ if (finalResult && resultCallback) resultCallback(finalResult, null);else if (resultCallback) resultCallback(null, null);
88
+ } else if (!msg.includes('No speech detected') && resultCallback) {
89
+ resultCallback(null, msg);
90
+ } else if (resultCallback) {
91
+ resultCallback(null, null);
92
+ }
112
93
 
113
- // Only send error to callback for non-transient errors
114
- if (!isNoSpeechError && !isTransientIOSError && resultCallback) {
115
- var _e$error5;
116
- resultCallback(null, ((_e$error5 = e.error) === null || _e$error5 === void 0 ? void 0 : _e$error5.message) || 'Speech recognition error');
117
- } else if (isTransientIOSError) {
118
- console.log('Transient iOS speech recognition error, attempting to recover');
119
- // Send the final result if we have one
120
- if (finalResult && resultCallback) {
121
- resultCallback(finalResult);
122
- }
94
+ // Errors end the session immediately, reset to IDLE with delay
95
+ console.log('[onSpeechError] Scheduling IDLE reset');
96
+ if (Platform.OS === 'android') {
97
+ setTimeout(() => {
98
+ console.log('[onSpeechError] Android timeout - setting state to IDLE');
99
+ state = State.IDLE;
100
+ }, 800); // Increased delay to match onSpeechEnd
101
+ } else {
102
+ console.log('[onSpeechError] iOS - setting state to IDLE immediately');
103
+ state = State.IDLE;
123
104
  }
124
105
  };
125
106
  Voice.onSpeechResults = e => {
126
- console.log('onSpeechResults: ', e);
107
+ console.log('[onSpeechResults] Results received, current state:', state, 'results:', e);
108
+ clearSilenceTimer();
127
109
  if (e.value && e.value.length > 0) {
128
110
  finalResult = e.value[0];
129
- // Also trigger silence detection for final results
130
- handleSilenceDetection();
111
+ }
112
+
113
+ // Only call callback if we haven't already (avoid double-calling)
114
+ if (state === State.LISTENING && resultCallback) {
115
+ console.log('[onSpeechResults] Calling callback with results');
116
+ resultCallback(finalResult, null);
117
+ } else {
118
+ console.log('[onSpeechResults] Not calling callback - state:', state);
119
+ }
120
+
121
+ // On Android, we must explicitly stop to avoid session corruption
122
+ if (Platform.OS === 'android') {
123
+ console.log('[onSpeechResults] Android: Explicitly calling stopRecording()');
124
+ stopRecording();
125
+ }
126
+
127
+ // Results end the session, reset to IDLE with delay
128
+ console.log('[onSpeechResults] Scheduling IDLE reset');
129
+ if (Platform.OS === 'android') {
130
+ setTimeout(() => {
131
+ console.log('[onSpeechResults] Android timeout - setting state to IDLE');
132
+ state = State.IDLE;
133
+ }, 800); // Increased delay
134
+ } else {
135
+ console.log('[onSpeechResults] iOS - setting state to IDLE immediately');
136
+ state = State.IDLE;
131
137
  }
132
138
  };
133
139
  Voice.onSpeechPartialResults = e => {
134
- console.log('onSpeechPartialResults: ', e);
135
- if (silenceTimer) {
136
- clearTimeout(silenceTimer);
137
- }
138
140
  if (e.value && e.value.length > 0) {
139
141
  finalResult = e.value[0];
140
-
141
- // Throttle partial results to prevent overwhelming the UI and speech service
142
- const now = Date.now();
143
- if (partialResultCallback && now - lastPartialResultTime > PARTIAL_RESULT_THROTTLE) {
144
- partialResultCallback(e.value[0]);
145
- lastPartialResultTime = now;
146
- }
142
+ if (partialResultCallback) partialResultCallback(finalResult);
147
143
  handleSilenceDetection();
148
144
  }
149
145
  };
150
- if (Platform.OS === 'android') {
151
- Voice.onSpeechVolumeChanged = e => {
152
- console.log('onSpeechVolumeChanged: ', e);
153
- };
154
- }
146
+ if (Platform.OS === 'android') Voice.onSpeechVolumeChanged = () => {};
147
+ listenersBound = true;
155
148
  return true;
156
149
  } catch (error) {
157
150
  console.error('Error initializing Voice:', error);
@@ -163,191 +156,144 @@ const handleSilenceDetection = () => {
163
156
  clearTimeout(silenceTimer);
164
157
  }
165
158
  silenceTimer = setTimeout(async () => {
166
- console.log('Silence detected, stopping recording...');
167
- if (isCurrentlyRecording && finalResult) {
159
+ if (state === State.LISTENING) {
168
160
  await handleFinalResult();
169
161
  }
170
162
  }, SILENCE_DURATION);
171
163
  };
172
164
  const handleFinalResult = async () => {
173
- if (!isCurrentlyRecording) return;
174
-
175
- // Set flag immediately to prevent race conditions
176
- isCurrentlyRecording = false;
177
-
178
- // Clear silence timer first
179
- if (silenceTimer) {
180
- clearTimeout(silenceTimer);
181
- silenceTimer = null;
165
+ console.log('[handleFinalResult] Called, current state:', state);
166
+ if (state !== State.LISTENING) {
167
+ console.log('[handleFinalResult] State not LISTENING, returning');
168
+ return;
182
169
  }
183
170
 
184
- // Send result if we have one
185
- if (finalResult && resultCallback) {
186
- resultCallback(finalResult);
187
- }
171
+ // Set to FINALIZING first to prevent double callbacks
172
+ console.log('[handleFinalResult] Setting state to FINALIZING');
173
+ state = State.FINALIZING;
188
174
 
189
- // Give iOS time to finish processing before cleanup
190
- if (Platform.OS === 'ios') {
191
- await new Promise(resolve => setTimeout(resolve, 100));
175
+ // Call the callback with results
176
+ if (finalResult && resultCallback) {
177
+ console.log('[handleFinalResult] Calling callback with result:', finalResult);
178
+ resultCallback(finalResult, null);
192
179
  }
193
180
 
194
- // Stop recording with proper sequence
181
+ // Now stop recording (this will call Voice.stop())
182
+ console.log('[handleFinalResult] Calling stopRecording');
195
183
  await stopRecording();
196
184
  };
197
- const cleanupVoiceSession = async () => {
198
- isCurrentlyRecording = false;
185
+ const cleanupVoiceSession = () => {
186
+ console.log('[cleanupVoiceSession] Called, current state:', state);
187
+ finalResult = '';
188
+ clearSilenceTimer();
189
+
190
+ // Add delay before allowing next session on Android
191
+ if (Platform.OS === 'android') {
192
+ setTimeout(() => {
193
+ console.log('[cleanupVoiceSession] Android timeout - setting state to IDLE');
194
+ state = State.IDLE;
195
+ }, 800);
196
+ } else {
197
+ console.log('[cleanupVoiceSession] iOS - setting state to IDLE immediately');
198
+ state = State.IDLE;
199
+ }
200
+ };
201
+ const clearSilenceTimer = () => {
199
202
  if (silenceTimer) {
200
203
  clearTimeout(silenceTimer);
201
204
  silenceTimer = null;
202
205
  }
206
+ };
207
+ export async function startRecording() {
203
208
  try {
204
- // Check if Voice module is available
205
- if (!Voice) {
206
- console.log('Voice module not available during cleanup');
207
- return;
208
- }
209
+ console.log('[startRecording] Called, current state:', state);
209
210
 
210
- // First try to stop if still recognizing
211
- const isRecognizing = await Voice.isRecognizing();
212
- if (isRecognizing) {
211
+ // On Android, destroy any lingering instance before starting
212
+ if (Platform.OS === 'android') {
213
213
  try {
214
- await Voice.stop();
215
- await new Promise(resolve => setTimeout(resolve, 100));
216
- } catch (e) {
217
- console.error('Error stopping in cleanup:', e);
218
- }
219
- }
220
-
221
- // Then force destroy
222
- await Voice.destroy();
223
- await new Promise(resolve => setTimeout(resolve, 300));
224
-
225
- // Double check and force destroy again if needed
226
- const stillRecognizing = await Voice.isRecognizing();
227
- if (stillRecognizing) {
228
- await Voice.destroy();
229
- await new Promise(resolve => setTimeout(resolve, 300));
230
- }
231
- } catch (error) {
232
- console.error('Error in cleanupVoiceSession:', error);
233
- // Final attempt to destroy on error
234
- try {
235
- if (Voice) {
214
+ console.log('[startRecording] Android: Proactively destroying Voice instance');
236
215
  await Voice.destroy();
216
+ await new Promise(r => setTimeout(r, 100)); // Short delay for destroy to complete
217
+ } catch (e) {
218
+ console.log('[startRecording] Proactive destroy failed, may be okay:', e);
237
219
  }
238
- } catch (e) {
239
- console.error('Final destroy attempt failed:', e);
240
220
  }
241
- }
242
- finalResult = '';
243
- };
244
- export async function startRecording() {
245
- try {
246
- // Check if Voice module is available
247
221
  if (!Voice) {
248
- console.error('Voice module is not available');
222
+ console.log('[startRecording] Voice not available');
223
+ return false;
224
+ }
225
+ if (state !== State.IDLE) {
226
+ console.log('[startRecording] State not IDLE, returning false');
249
227
  return false;
250
228
  }
251
-
252
- // Ensure cleanup of any existing session
253
- await cleanupVoiceSession();
254
229
  const hasPermission = await requestAudioPermission();
255
230
  if (!hasPermission) {
256
231
  console.error('No permission to record audio');
257
232
  return false;
258
233
  }
234
+ const recognizing = await Voice.isRecognizing();
235
+ console.log('[startRecording] Voice.isRecognizing():', recognizing);
236
+ if (recognizing) {
237
+ console.log('[startRecording] Already recognizing, canceling first');
238
+ await Voice.cancel();
239
+ // Wait longer for cancel to take effect
240
+ await new Promise(r => setTimeout(r, 500));
259
241
 
260
- // Reset throttle timer
261
- lastPartialResultTime = 0;
242
+ // Double-check if still recognizing after cancel
243
+ const stillRecognizing = await Voice.isRecognizing();
244
+ console.log('[startRecording] After cancel, still recognizing:', stillRecognizing);
245
+ if (stillRecognizing) {
246
+ console.log('[startRecording] Still recognizing after cancel, stopping');
247
+ try {
248
+ await Voice.stop();
249
+ await new Promise(r => setTimeout(r, 300));
250
+ } catch (e) {
251
+ console.log('[startRecording] Error stopping:', e);
252
+ }
253
+ }
254
+ }
255
+ console.log('[startRecording] Calling Voice.start()');
262
256
  await Voice.start('en-US');
263
- isCurrentlyRecording = true;
257
+ console.log('[startRecording] Voice.start() completed, setting state to LISTENING');
258
+ state = State.LISTENING;
264
259
  return true;
265
260
  } catch (error) {
266
261
  console.error('Error starting voice recognition:', error);
267
- await cleanupVoiceSession();
262
+ cleanupVoiceSession();
268
263
  return false;
269
264
  }
270
265
  }
271
266
  export async function stopRecording() {
272
267
  try {
273
- if (!Voice) return;
274
-
275
- // Already stopped
276
- if (!isCurrentlyRecording) {
277
- // Still try to clean up any lingering session
278
- try {
279
- const isRecognizing = await Voice.isRecognizing();
280
- if (isRecognizing) {
281
- await Voice.stop();
282
- }
283
- } catch (e) {
284
- // Ignore errors checking recognition state
285
- }
268
+ console.log('[stopRecording] Called, current state:', state);
269
+ // Can be called from LISTENING or FINALIZING state
270
+ if (state !== State.LISTENING && state !== State.FINALIZING || !Voice) {
271
+ console.log('[stopRecording] Invalid state or no Voice, returning');
286
272
  return;
287
273
  }
288
274
 
289
- // Set this first to prevent race conditions
290
- isCurrentlyRecording = false;
291
- if (silenceTimer) {
292
- clearTimeout(silenceTimer);
293
- silenceTimer = null;
275
+ // Only set to FINALIZING if not already there
276
+ if (state === State.LISTENING) {
277
+ console.log('[stopRecording] Setting state to FINALIZING');
278
+ state = State.FINALIZING;
294
279
  }
295
-
296
- // For iOS, use a more careful approach
297
- if (Platform.OS === 'ios') {
298
- try {
299
- // First cancel any ongoing recognition
300
- await Voice.cancel();
301
- await new Promise(resolve => setTimeout(resolve, 50));
302
- } catch (error) {
303
- // Ignore cancel errors
304
- }
305
- try {
306
- // Then stop
307
- await Voice.stop();
308
- await new Promise(resolve => setTimeout(resolve, 100));
309
- } catch (error) {
310
- console.log('Error stopping Voice (expected on iOS):', error);
311
- }
312
- try {
313
- // Finally destroy
314
- await Voice.destroy();
315
- await new Promise(resolve => setTimeout(resolve, 200));
316
- } catch (error) {
317
- console.log('Error destroying Voice (expected on iOS):', error);
318
- }
319
- } else {
320
- // Android can handle the normal sequence
321
- try {
322
- await Voice.stop();
323
- await new Promise(resolve => setTimeout(resolve, 100));
324
- } catch (error) {
325
- console.error('Error stopping Voice:', error);
326
- }
327
- try {
328
- await Voice.destroy();
329
- await new Promise(resolve => setTimeout(resolve, 300));
330
- } catch (error) {
331
- console.error('Error destroying Voice:', error);
332
- }
333
- }
334
-
335
- // Final cleanup
336
- await cleanupVoiceSession();
280
+ clearSilenceTimer();
281
+ console.log('[stopRecording] Calling Voice.stop()');
282
+ await Voice.stop();
283
+ console.log('[stopRecording] Voice.stop() completed');
337
284
  } catch (error) {
338
285
  console.error('Error in stopRecording:', error);
339
- // Force cleanup on error
340
- await cleanupVoiceSession();
286
+ cleanupVoiceSession();
341
287
  }
342
288
  }
343
289
  export async function cancelRecording() {
344
290
  try {
345
291
  if (!Voice) return;
346
292
  await Voice.cancel();
347
- await cleanupVoiceSession();
293
+ cleanupVoiceSession();
348
294
  } catch (error) {
349
295
  console.error('Error canceling voice recognition:', error);
350
- await cleanupVoiceSession();
296
+ cleanupVoiceSession();
351
297
  }
352
298
  }
353
299
  export async function requestAudioPermission() {
@@ -384,11 +330,16 @@ async function requestAndroidPermission() {
384
330
  return false;
385
331
  }
386
332
 
387
- // Skip checking speech recognition services which is causing errors
388
- const services = await Voice.getSpeechRecognitionServices();
389
- if (!services || services.length === 0) {
390
- console.error('No speech recognition services available');
391
- return false;
333
+ // Check speech recognition services
334
+ try {
335
+ const services = await Voice.getSpeechRecognitionServices();
336
+ if (!services || services.length === 0) {
337
+ console.error('No speech recognition services available');
338
+ return false;
339
+ }
340
+ } catch (e) {
341
+ console.log('Error checking speech services:', e);
342
+ // Continue anyway - some devices report error but work fine
392
343
  }
393
344
  return true;
394
345
  } catch (error) {
@@ -425,19 +376,6 @@ export function resetStoredPermission() {
425
376
  return false;
426
377
  }
427
378
  export function cleanup() {
428
- if (!Voice) {
429
- console.log('Voice module not available during cleanup');
430
- return;
431
- }
432
- Voice.destroy().then(() => {
433
- Voice.removeAllListeners();
434
- cleanupVoiceSession();
435
- }).catch(error => {
436
- console.error('Error in cleanup:', error);
437
- // Try one more time
438
- if (Voice) {
439
- Voice.destroy().catch(e => console.error('Final cleanup attempt failed:', e));
440
- }
441
- });
379
+ cleanupVoiceSession();
442
380
  }
443
381
  //# sourceMappingURL=audioRecorder.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","Voice","check","PERMISSIONS","request","RESULTS","useAsyncStorage","resultCallback","partialResultCallback","silenceTimer","isCurrentlyRecording","finalResult","lastPartialResultTime","SILENCE_DURATION","PARTIAL_RESULT_THROTTLE","PERMISSION_STORAGE_KEY","permissionStatusGetter","permissionStatusSetter","setPermissionStatusHandlers","getter","setter","initVoice","onResult","onPartialResult","console","error","isAvailable","isRecognizing","log","destroy","Promise","resolve","setTimeout","e","onSpeechStart","clearTimeout","handleSilenceDetection","onSpeechRecognized","isFinal","handleFinalResult","onSpeechEnd","OS","onSpeechError","_e$error","_e$error2","_e$error3","_e$error4","isNoSpeechError","code","message","includes","isTransientIOSError","cleanupVoiceSession","_e$error5","onSpeechResults","value","length","onSpeechPartialResults","now","Date","onSpeechVolumeChanged","stopRecording","stop","stillRecognizing","startRecording","hasPermission","requestAudioPermission","start","cancel","cancelRecording","storedPermission","permissionResult","requestAndroidPermission","requestIOSPermission","micPermission","ANDROID","RECORD_AUDIO","GRANTED","services","getSpeechRecognitionServices","IOS","MICROPHONE","speechPermission","SPEECH_RECOGNITION","resetStoredPermission","cleanup","then","removeAllListeners","catch"],"sourceRoot":"../../../src","sources":["utils/audioRecorder.js"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Platform","Voice","check","PERMISSIONS","request","RESULTS","resultCallback","partialResultCallback","silenceTimer","finalResult","SILENCE_DURATION","State","IDLE","LISTENING","FINALIZING","state","listenersBound","PERMISSION_STORAGE_KEY","permissionStatusGetter","permissionStatusSetter","setPermissionStatusHandlers","getter","setter","initVoice","onResult","onPartialResult","console","error","isAvailable","removeAllListeners","onSpeechStart","log","clearSilenceTimer","onSpeechRecognized","onSpeechEnd","OS","setTimeout","onSpeechError","e","_e$error","_e$error2","code","toString","msg","message","includes","onSpeechResults","value","length","stopRecording","onSpeechPartialResults","handleSilenceDetection","onSpeechVolumeChanged","clearTimeout","handleFinalResult","cleanupVoiceSession","startRecording","destroy","Promise","r","hasPermission","requestAudioPermission","recognizing","isRecognizing","cancel","stillRecognizing","stop","start","cancelRecording","storedPermission","permissionResult","requestAndroidPermission","requestIOSPermission","micPermission","ANDROID","RECORD_AUDIO","GRANTED","services","getSpeechRecognitionServices","IOS","MICROPHONE","speechPermission","SPEECH_RECOGNITION","resetStoredPermission","cleanup"],"sourceRoot":"../../../src","sources":["utils/audioRecorder.js"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"voice.d.ts","sourceRoot":"","sources":["../../../src/components/voice.js"],"names":[],"mappings":"AAqBO;;sBAwLN;kBA3MsD,OAAO"}
1
+ {"version":3,"file":"voice.d.ts","sourceRoot":"","sources":["../../../src/components/voice.js"],"names":[],"mappings":"AAqBO;;sBAuLN;kBA1MsD,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"audioRecorder.d.ts","sourceRoot":"","sources":["../../../src/utils/audioRecorder.js"],"names":[],"mappings":"AAwBA,4EAGC;AAGD,mFAkJC;AA4FD,mDA4BC;AAED,+CA2EC;AAED,iDASC;AAED,2DA2BC;AAiDD,iDAMC;AAED,gCAgBC"}
1
+ {"version":3,"file":"audioRecorder.d.ts","sourceRoot":"","sources":["../../../src/utils/audioRecorder.js"],"names":[],"mappings":"AAyBA,4EAGC;AAGD,mFAiIC;AA4DD,mDA8DC;AAED,+CAuBC;AAED,iDASC;AAED,2DA2BC;AAqDD,iDAMC;AAED,gCAEC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-srschat",
3
- "version": "0.1.60",
3
+ "version": "0.1.62",
4
4
  "private": false,
5
5
  "description": "A modern, sophisticated chat interface for React Native",
6
6
  "main": "lib/commonjs/index",
@@ -409,7 +409,7 @@ export const ProductCard = ({ prod, onFocusQuantityInput, messageId }) => {
409
409
 
410
410
  <View style={styles.quantityContainer}>
411
411
  <Text style={styles.inputLabel}>
412
- Qty {currentMinPackQtyForSelectedUom > 1 ? `(steps of ${currentMinPackQtyForSelectedUom})` : ''}
412
+ Qty {currentMinPackQtyForSelectedUom > 1 ? `(Sold in multiples of ${currentMinPackQtyForSelectedUom})` : ''}
413
413
  </Text>
414
414
  <View style={styles.quantityInputContainer}>
415
415
  <TouchableOpacity