react-native-voice-ts 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +914 -83
- package/dist/components/MicIcon.d.ts +23 -0
- package/dist/components/MicIcon.d.ts.map +1 -0
- package/dist/components/MicIcon.js +28 -0
- package/dist/components/MicIcon.js.map +1 -0
- package/dist/components/VoiceMicrophone.d.ts +81 -0
- package/dist/components/VoiceMicrophone.d.ts.map +1 -0
- package/dist/components/VoiceMicrophone.js +151 -0
- package/dist/components/VoiceMicrophone.js.map +1 -0
- package/dist/components/index.d.ts +5 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +3 -0
- package/dist/components/index.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useVoiceRecognition.d.ts +77 -0
- package/dist/hooks/useVoiceRecognition.d.ts.map +1 -0
- package/dist/hooks/useVoiceRecognition.js +129 -0
- package/dist/hooks/useVoiceRecognition.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/ios/Voice.xcodeproj/project.xcworkspace/xcuserdata/olumayowadaniel.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/Voice.xcodeproj/project.xcworkspace/xcuserdata/rudie_shahinian.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/package.json +24 -6
- package/plugin/src/withVoice.ts +74 -0
- package/plugin/tsconfig.json +10 -0
- package/src/components/MicIcon.tsx +72 -0
- package/src/components/VoiceMicrophone.tsx +238 -0
- package/src/components/index.ts +4 -0
- package/src/hooks/index.ts +5 -0
- package/src/hooks/useVoiceRecognition.ts +217 -0
- package/src/images/mic.svg +16 -0
- package/src/index.ts +15 -0
- package/.nvmrc +0 -1
- package/.prettierrc +0 -5
- package/.releaserc +0 -15
- package/MIGRATION_SUMMARY.md +0 -510
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface MicIconProps {
|
|
3
|
+
size?: number;
|
|
4
|
+
color?: string;
|
|
5
|
+
strokeWidth?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Microphone Icon Component
|
|
9
|
+
* Based on Lucide mic icon
|
|
10
|
+
*/
|
|
11
|
+
export declare const MicIcon: React.FC<MicIconProps>;
|
|
12
|
+
export interface MicOffIconProps {
|
|
13
|
+
size?: number;
|
|
14
|
+
color?: string;
|
|
15
|
+
strokeWidth?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Microphone Off Icon Component
|
|
19
|
+
* For recording/stop state
|
|
20
|
+
*/
|
|
21
|
+
export declare const MicOffIcon: React.FC<MicOffIconProps>;
|
|
22
|
+
export default MicIcon;
|
|
23
|
+
//# sourceMappingURL=MicIcon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MicIcon.d.ts","sourceRoot":"","sources":["../../src/components/MicIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAqB1C,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAuBhD,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Svg, { Path, Rect } from 'react-native-svg';
|
|
3
|
+
/**
|
|
4
|
+
* Microphone Icon Component
|
|
5
|
+
* Based on Lucide mic icon
|
|
6
|
+
*/
|
|
7
|
+
export const MicIcon = ({ size = 24, color = 'currentColor', strokeWidth = 2, }) => {
|
|
8
|
+
return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round">
|
|
9
|
+
<Path d="M12 19v3"/>
|
|
10
|
+
<Path d="M19 10v2a7 7 0 0 1-14 0v-2"/>
|
|
11
|
+
<Rect x="9" y="2" width="6" height="13" rx="3"/>
|
|
12
|
+
</Svg>);
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Microphone Off Icon Component
|
|
16
|
+
* For recording/stop state
|
|
17
|
+
*/
|
|
18
|
+
export const MicOffIcon = ({ size = 24, color = 'currentColor', strokeWidth = 2, }) => {
|
|
19
|
+
return (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round">
|
|
20
|
+
<Path d="M2 2l20 20"/>
|
|
21
|
+
<Path d="M12 12a3 3 0 0 0 3-3V5a3 3 0 1 0-6 0v1"/>
|
|
22
|
+
<Path d="M19 10v2a7 7 0 0 1-11.18 5.66"/>
|
|
23
|
+
<Path d="M4.27 16.73A7 7 0 0 1 5 12v-2"/>
|
|
24
|
+
<Path d="M12 17v5"/>
|
|
25
|
+
</Svg>);
|
|
26
|
+
};
|
|
27
|
+
export default MicIcon;
|
|
28
|
+
//# sourceMappingURL=MicIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MicIcon.js","sourceRoot":"","sources":["../../src/components/MicIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAQnD;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAA2B,CAAC,EAC9C,IAAI,GAAG,EAAE,EACT,KAAK,GAAG,cAAc,EACtB,WAAW,GAAG,CAAC,GAChB,EAAE,EAAE;IACH,OAAO,CACL,CAAC,GAAG,CACF,KAAK,CAAC,CAAC,IAAI,CAAC,CACZ,MAAM,CAAC,CAAC,IAAI,CAAC,CACb,OAAO,CAAC,WAAW,CACnB,IAAI,CAAC,MAAM,CACX,MAAM,CAAC,CAAC,KAAK,CAAC,CACd,WAAW,CAAC,CAAC,WAAW,CAAC,CACzB,aAAa,CAAC,OAAO,CACrB,cAAc,CAAC,OAAO,CAEtB;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAClB;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B,EACpC;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAChD;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC,CAAC;AAQF;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAA8B,CAAC,EACpD,IAAI,GAAG,EAAE,EACT,KAAK,GAAG,cAAc,EACtB,WAAW,GAAG,CAAC,GAChB,EAAE,EAAE;IACH,OAAO,CACL,CAAC,GAAG,CACF,KAAK,CAAC,CAAC,IAAI,CAAC,CACZ,MAAM,CAAC,CAAC,IAAI,CAAC,CACb,OAAO,CAAC,WAAW,CACnB,IAAI,CAAC,MAAM,CACX,MAAM,CAAC,CAAC,KAAK,CAAC,CACd,WAAW,CAAC,CAAC,WAAW,CAAC,CACzB,aAAa,CAAC,OAAO,CACrB,cAAc,CAAC,OAAO,CAEtB;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,EACpB;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,wCAAwC,EAChD;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,+BAA+B,EACvC;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,+BAA+B,EACvC;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EACpB;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface VoiceMicrophoneProps {
|
|
3
|
+
/**
|
|
4
|
+
* Callback fired when speech is recognized and converted to text
|
|
5
|
+
*/
|
|
6
|
+
onSpeechResult?: (text: string) => void;
|
|
7
|
+
/**
|
|
8
|
+
* Callback fired when partial results are available (real-time)
|
|
9
|
+
*/
|
|
10
|
+
onPartialResult?: (text: string) => void;
|
|
11
|
+
/**
|
|
12
|
+
* Callback fired when recording starts
|
|
13
|
+
*/
|
|
14
|
+
onStart?: () => void;
|
|
15
|
+
/**
|
|
16
|
+
* Callback fired when recording stops
|
|
17
|
+
*/
|
|
18
|
+
onStop?: () => void;
|
|
19
|
+
/**
|
|
20
|
+
* Callback fired when an error occurs
|
|
21
|
+
*/
|
|
22
|
+
onError?: (error: string) => void;
|
|
23
|
+
/**
|
|
24
|
+
* Language locale for speech recognition
|
|
25
|
+
* @default 'en-US'
|
|
26
|
+
*/
|
|
27
|
+
locale?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Whether to automatically start recording on mount
|
|
30
|
+
* @default false
|
|
31
|
+
*/
|
|
32
|
+
autoStart?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Whether to enable partial results (real-time transcription)
|
|
35
|
+
* @default true
|
|
36
|
+
*/
|
|
37
|
+
enablePartialResults?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Custom render function for the component
|
|
40
|
+
* Receives isRecording state and control functions
|
|
41
|
+
*/
|
|
42
|
+
children?: (props: {
|
|
43
|
+
isRecording: boolean;
|
|
44
|
+
recognizedText: string;
|
|
45
|
+
partialText: string;
|
|
46
|
+
start: () => Promise<void>;
|
|
47
|
+
stop: () => Promise<void>;
|
|
48
|
+
cancel: () => Promise<void>;
|
|
49
|
+
error: string | null;
|
|
50
|
+
}) => React.ReactNode;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* VoiceMicrophone Component
|
|
54
|
+
*
|
|
55
|
+
* A ready-to-use voice recognition component that handles microphone access,
|
|
56
|
+
* speech recognition, and provides real-time text results.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```tsx
|
|
60
|
+
* // Simple usage with callback
|
|
61
|
+
* <VoiceMicrophone
|
|
62
|
+
* onSpeechResult={(text) => setSearchQuery(text)}
|
|
63
|
+
* />
|
|
64
|
+
*
|
|
65
|
+
* // Custom render with full control
|
|
66
|
+
* <VoiceMicrophone locale="en-US">
|
|
67
|
+
* {({ isRecording, recognizedText, start, stop }) => (
|
|
68
|
+
* <View>
|
|
69
|
+
* <Text>{recognizedText}</Text>
|
|
70
|
+
* <Button
|
|
71
|
+
* onPress={isRecording ? stop : start}
|
|
72
|
+
* title={isRecording ? 'Stop' : 'Start'}
|
|
73
|
+
* />
|
|
74
|
+
* </View>
|
|
75
|
+
* )}
|
|
76
|
+
* </VoiceMicrophone>
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
declare const VoiceMicrophone: React.FC<VoiceMicrophoneProps>;
|
|
80
|
+
export default VoiceMicrophone;
|
|
81
|
+
//# sourceMappingURL=VoiceMicrophone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VoiceMicrophone.d.ts","sourceRoot":"","sources":["../../src/components/VoiceMicrophone.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAIhE,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAExC;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAElC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QACjB,WAAW,EAAE,OAAO,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,KAAK,KAAK,CAAC,SAAS,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAiJnD,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import React, { useEffect, useState, useCallback } from 'react';
|
|
2
|
+
import Voice from '../index';
|
|
3
|
+
/**
|
|
4
|
+
* VoiceMicrophone Component
|
|
5
|
+
*
|
|
6
|
+
* A ready-to-use voice recognition component that handles microphone access,
|
|
7
|
+
* speech recognition, and provides real-time text results.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* // Simple usage with callback
|
|
12
|
+
* <VoiceMicrophone
|
|
13
|
+
* onSpeechResult={(text) => setSearchQuery(text)}
|
|
14
|
+
* />
|
|
15
|
+
*
|
|
16
|
+
* // Custom render with full control
|
|
17
|
+
* <VoiceMicrophone locale="en-US">
|
|
18
|
+
* {({ isRecording, recognizedText, start, stop }) => (
|
|
19
|
+
* <View>
|
|
20
|
+
* <Text>{recognizedText}</Text>
|
|
21
|
+
* <Button
|
|
22
|
+
* onPress={isRecording ? stop : start}
|
|
23
|
+
* title={isRecording ? 'Stop' : 'Start'}
|
|
24
|
+
* />
|
|
25
|
+
* </View>
|
|
26
|
+
* )}
|
|
27
|
+
* </VoiceMicrophone>
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
const VoiceMicrophone = ({ onSpeechResult, onPartialResult, onStart, onStop, onError, locale = 'en-US', autoStart = false, enablePartialResults = true, children, }) => {
|
|
31
|
+
const [isRecording, setIsRecording] = useState(false);
|
|
32
|
+
const [recognizedText, setRecognizedText] = useState('');
|
|
33
|
+
const [partialText, setPartialText] = useState('');
|
|
34
|
+
const [error, setError] = useState(null);
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
// Set up event listeners
|
|
37
|
+
Voice.onSpeechStart = () => {
|
|
38
|
+
setIsRecording(true);
|
|
39
|
+
setError(null);
|
|
40
|
+
onStart?.();
|
|
41
|
+
};
|
|
42
|
+
Voice.onSpeechEnd = () => {
|
|
43
|
+
setIsRecording(false);
|
|
44
|
+
onStop?.();
|
|
45
|
+
};
|
|
46
|
+
Voice.onSpeechError = (e) => {
|
|
47
|
+
const errorMessage = e.error?.message || 'Unknown error';
|
|
48
|
+
setError(errorMessage);
|
|
49
|
+
setIsRecording(false);
|
|
50
|
+
onError?.(errorMessage);
|
|
51
|
+
};
|
|
52
|
+
Voice.onSpeechResults = (e) => {
|
|
53
|
+
if (e.value && e.value.length > 0) {
|
|
54
|
+
const text = e.value[0];
|
|
55
|
+
setRecognizedText(text);
|
|
56
|
+
onSpeechResult?.(text);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
if (enablePartialResults) {
|
|
60
|
+
Voice.onSpeechPartialResults = (e) => {
|
|
61
|
+
if (e.value && e.value.length > 0) {
|
|
62
|
+
const text = e.value[0];
|
|
63
|
+
setPartialText(text);
|
|
64
|
+
onPartialResult?.(text);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// Cleanup
|
|
69
|
+
return () => {
|
|
70
|
+
Voice.destroy().then(Voice.removeAllListeners);
|
|
71
|
+
};
|
|
72
|
+
}, [
|
|
73
|
+
onSpeechResult,
|
|
74
|
+
onPartialResult,
|
|
75
|
+
onStart,
|
|
76
|
+
onStop,
|
|
77
|
+
onError,
|
|
78
|
+
enablePartialResults,
|
|
79
|
+
]);
|
|
80
|
+
// Auto-start if enabled
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
if (autoStart) {
|
|
83
|
+
start();
|
|
84
|
+
}
|
|
85
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
86
|
+
}, [autoStart]);
|
|
87
|
+
const start = useCallback(async () => {
|
|
88
|
+
try {
|
|
89
|
+
setError(null);
|
|
90
|
+
setRecognizedText('');
|
|
91
|
+
setPartialText('');
|
|
92
|
+
// Check permission (Android only)
|
|
93
|
+
const hasPermission = await Voice.checkMicrophonePermission();
|
|
94
|
+
if (!hasPermission) {
|
|
95
|
+
const granted = await Voice.requestMicrophonePermission();
|
|
96
|
+
if (!granted) {
|
|
97
|
+
setError('Microphone permission denied');
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
await Voice.start(locale, {
|
|
102
|
+
EXTRA_PARTIAL_RESULTS: enablePartialResults,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
const errorMessage = e instanceof Error ? e.message : 'Failed to start recording';
|
|
107
|
+
setError(errorMessage);
|
|
108
|
+
onError?.(errorMessage);
|
|
109
|
+
}
|
|
110
|
+
}, [locale, enablePartialResults, onError]);
|
|
111
|
+
const stop = useCallback(async () => {
|
|
112
|
+
try {
|
|
113
|
+
await Voice.stop();
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
const errorMessage = e instanceof Error ? e.message : 'Failed to stop recording';
|
|
117
|
+
setError(errorMessage);
|
|
118
|
+
onError?.(errorMessage);
|
|
119
|
+
}
|
|
120
|
+
}, [onError]);
|
|
121
|
+
const cancel = useCallback(async () => {
|
|
122
|
+
try {
|
|
123
|
+
await Voice.cancel();
|
|
124
|
+
setRecognizedText('');
|
|
125
|
+
setPartialText('');
|
|
126
|
+
}
|
|
127
|
+
catch (e) {
|
|
128
|
+
const errorMessage = e instanceof Error ? e.message : 'Failed to cancel recording';
|
|
129
|
+
setError(errorMessage);
|
|
130
|
+
onError?.(errorMessage);
|
|
131
|
+
}
|
|
132
|
+
}, [onError]);
|
|
133
|
+
// If children render prop is provided, use it
|
|
134
|
+
if (children) {
|
|
135
|
+
return (<>
|
|
136
|
+
{children({
|
|
137
|
+
isRecording,
|
|
138
|
+
recognizedText,
|
|
139
|
+
partialText,
|
|
140
|
+
start,
|
|
141
|
+
stop,
|
|
142
|
+
cancel,
|
|
143
|
+
error,
|
|
144
|
+
})}
|
|
145
|
+
</>);
|
|
146
|
+
}
|
|
147
|
+
// Default: render nothing (headless component)
|
|
148
|
+
return null;
|
|
149
|
+
};
|
|
150
|
+
export default VoiceMicrophone;
|
|
151
|
+
//# sourceMappingURL=VoiceMicrophone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VoiceMicrophone.js","sourceRoot":"","sources":["../../src/components/VoiceMicrophone.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as VoiceMicrophone } from './VoiceMicrophone';
|
|
2
|
+
export type { VoiceMicrophoneProps } from './VoiceMicrophone';
|
|
3
|
+
export { MicIcon, MicOffIcon } from './MicIcon';
|
|
4
|
+
export type { MicIconProps, MicOffIconProps } from './MicIcon';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EACV,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export interface UseVoiceRecognitionOptions {
|
|
2
|
+
/**
|
|
3
|
+
* Language locale for speech recognition
|
|
4
|
+
* @default 'en-US'
|
|
5
|
+
*/
|
|
6
|
+
locale?: string;
|
|
7
|
+
/**
|
|
8
|
+
* Whether to enable partial results (real-time transcription)
|
|
9
|
+
* @default true
|
|
10
|
+
*/
|
|
11
|
+
enablePartialResults?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Callback fired when speech is recognized
|
|
14
|
+
*/
|
|
15
|
+
onResult?: (text: string) => void;
|
|
16
|
+
/**
|
|
17
|
+
* Callback fired when an error occurs
|
|
18
|
+
*/
|
|
19
|
+
onError?: (error: string) => void;
|
|
20
|
+
}
|
|
21
|
+
export interface UseVoiceRecognitionReturn {
|
|
22
|
+
/**
|
|
23
|
+
* Whether voice recognition is currently active
|
|
24
|
+
*/
|
|
25
|
+
isRecording: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Final recognized text results
|
|
28
|
+
*/
|
|
29
|
+
results: string[];
|
|
30
|
+
/**
|
|
31
|
+
* Partial results (real-time transcription)
|
|
32
|
+
*/
|
|
33
|
+
partialResults: string[];
|
|
34
|
+
/**
|
|
35
|
+
* Error message if an error occurred
|
|
36
|
+
*/
|
|
37
|
+
error: string | null;
|
|
38
|
+
/**
|
|
39
|
+
* Start voice recognition
|
|
40
|
+
*/
|
|
41
|
+
start: () => Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Stop voice recognition and get final results
|
|
44
|
+
*/
|
|
45
|
+
stop: () => Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Cancel voice recognition without getting results
|
|
48
|
+
*/
|
|
49
|
+
cancel: () => Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Reset all state
|
|
52
|
+
*/
|
|
53
|
+
reset: () => void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Custom hook for voice recognition
|
|
57
|
+
*
|
|
58
|
+
* Provides a simple interface for speech-to-text functionality with automatic
|
|
59
|
+
* event listener setup and cleanup.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```tsx
|
|
63
|
+
* const { isRecording, results, start, stop } = useVoiceRecognition({
|
|
64
|
+
* locale: 'en-US',
|
|
65
|
+
* onResult: (text) => setSearchQuery(text),
|
|
66
|
+
* });
|
|
67
|
+
*
|
|
68
|
+
* // In your component
|
|
69
|
+
* <Button
|
|
70
|
+
* onPress={isRecording ? stop : start}
|
|
71
|
+
* title={isRecording ? 'Stop' : 'Start Recording'}
|
|
72
|
+
* />
|
|
73
|
+
* <Text>{results[0]}</Text>
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export declare const useVoiceRecognition: (options?: UseVoiceRecognitionOptions) => UseVoiceRecognitionReturn;
|
|
77
|
+
//# sourceMappingURL=useVoiceRecognition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVoiceRecognition.d.ts","sourceRoot":"","sources":["../../src/hooks/useVoiceRecognition.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAElC;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB;;OAEG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB;;OAEG;IACH,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;OAEG;IACH,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAS,0BAA+B,KACvC,yBA2HF,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { useEffect, useState, useCallback } from 'react';
|
|
2
|
+
import Voice from '../index';
|
|
3
|
+
/**
|
|
4
|
+
* Custom hook for voice recognition
|
|
5
|
+
*
|
|
6
|
+
* Provides a simple interface for speech-to-text functionality with automatic
|
|
7
|
+
* event listener setup and cleanup.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* const { isRecording, results, start, stop } = useVoiceRecognition({
|
|
12
|
+
* locale: 'en-US',
|
|
13
|
+
* onResult: (text) => setSearchQuery(text),
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* // In your component
|
|
17
|
+
* <Button
|
|
18
|
+
* onPress={isRecording ? stop : start}
|
|
19
|
+
* title={isRecording ? 'Stop' : 'Start Recording'}
|
|
20
|
+
* />
|
|
21
|
+
* <Text>{results[0]}</Text>
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export const useVoiceRecognition = (options = {}) => {
|
|
25
|
+
const { locale = 'en-US', enablePartialResults = true, onResult, onError, } = options;
|
|
26
|
+
const [isRecording, setIsRecording] = useState(false);
|
|
27
|
+
const [results, setResults] = useState([]);
|
|
28
|
+
const [partialResults, setPartialResults] = useState([]);
|
|
29
|
+
const [error, setError] = useState(null);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
// Set up event listeners
|
|
32
|
+
Voice.onSpeechStart = () => {
|
|
33
|
+
setIsRecording(true);
|
|
34
|
+
setError(null);
|
|
35
|
+
};
|
|
36
|
+
Voice.onSpeechEnd = () => {
|
|
37
|
+
setIsRecording(false);
|
|
38
|
+
};
|
|
39
|
+
Voice.onSpeechError = (e) => {
|
|
40
|
+
const errorMessage = e.error?.message || 'Unknown error';
|
|
41
|
+
setError(errorMessage);
|
|
42
|
+
setIsRecording(false);
|
|
43
|
+
onError?.(errorMessage);
|
|
44
|
+
};
|
|
45
|
+
Voice.onSpeechResults = (e) => {
|
|
46
|
+
if (e.value && e.value.length > 0) {
|
|
47
|
+
setResults(e.value);
|
|
48
|
+
const firstResult = e.value[0];
|
|
49
|
+
if (firstResult) {
|
|
50
|
+
onResult?.(firstResult);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
if (enablePartialResults) {
|
|
55
|
+
Voice.onSpeechPartialResults = (e) => {
|
|
56
|
+
if (e.value && e.value.length > 0) {
|
|
57
|
+
setPartialResults(e.value);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// Cleanup
|
|
62
|
+
return () => {
|
|
63
|
+
Voice.destroy().then(Voice.removeAllListeners);
|
|
64
|
+
};
|
|
65
|
+
}, [enablePartialResults, onResult, onError]);
|
|
66
|
+
const start = useCallback(async () => {
|
|
67
|
+
try {
|
|
68
|
+
setError(null);
|
|
69
|
+
setResults([]);
|
|
70
|
+
setPartialResults([]);
|
|
71
|
+
// Check permission (Android only)
|
|
72
|
+
const hasPermission = await Voice.checkMicrophonePermission();
|
|
73
|
+
if (!hasPermission) {
|
|
74
|
+
const granted = await Voice.requestMicrophonePermission();
|
|
75
|
+
if (!granted) {
|
|
76
|
+
setError('Microphone permission denied');
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
await Voice.start(locale, {
|
|
81
|
+
EXTRA_PARTIAL_RESULTS: enablePartialResults,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
const errorMessage = e instanceof Error ? e.message : 'Failed to start recording';
|
|
86
|
+
setError(errorMessage);
|
|
87
|
+
onError?.(errorMessage);
|
|
88
|
+
}
|
|
89
|
+
}, [locale, enablePartialResults, onError]);
|
|
90
|
+
const stop = useCallback(async () => {
|
|
91
|
+
try {
|
|
92
|
+
await Voice.stop();
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
const errorMessage = e instanceof Error ? e.message : 'Failed to stop recording';
|
|
96
|
+
setError(errorMessage);
|
|
97
|
+
onError?.(errorMessage);
|
|
98
|
+
}
|
|
99
|
+
}, [onError]);
|
|
100
|
+
const cancel = useCallback(async () => {
|
|
101
|
+
try {
|
|
102
|
+
await Voice.cancel();
|
|
103
|
+
setResults([]);
|
|
104
|
+
setPartialResults([]);
|
|
105
|
+
}
|
|
106
|
+
catch (e) {
|
|
107
|
+
const errorMessage = e instanceof Error ? e.message : 'Failed to cancel recording';
|
|
108
|
+
setError(errorMessage);
|
|
109
|
+
onError?.(errorMessage);
|
|
110
|
+
}
|
|
111
|
+
}, [onError]);
|
|
112
|
+
const reset = useCallback(() => {
|
|
113
|
+
setResults([]);
|
|
114
|
+
setPartialResults([]);
|
|
115
|
+
setError(null);
|
|
116
|
+
setIsRecording(false);
|
|
117
|
+
}, []);
|
|
118
|
+
return {
|
|
119
|
+
isRecording,
|
|
120
|
+
results,
|
|
121
|
+
partialResults,
|
|
122
|
+
error,
|
|
123
|
+
start,
|
|
124
|
+
stop,
|
|
125
|
+
cancel,
|
|
126
|
+
reset,
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=useVoiceRecognition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVoiceRecognition.js","sourceRoot":"","sources":["../../src/hooks/useVoiceRecognition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,MAAM,UAAU,CAAC;AAqE7B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,UAAsC,EAAE,EACb,EAAE;IAC7B,MAAM,EACJ,MAAM,GAAG,OAAO,EAChB,oBAAoB,GAAG,IAAI,EAC3B,QAAQ,EACR,OAAO,GACR,GAAG,OAAO,CAAC;IAEZ,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IACrD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IACnE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,yBAAyB;QACzB,KAAK,CAAC,aAAa,GAAG,GAAG,EAAE;YACzB,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC,CAAC;QAEF,KAAK,CAAC,WAAW,GAAG,GAAG,EAAE;YACvB,cAAc,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC,CAAC;QAEF,KAAK,CAAC,aAAa,GAAG,CAAC,CAAmB,EAAE,EAAE;YAC5C,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC;YACzD,QAAQ,CAAC,YAAY,CAAC,CAAC;YACvB,cAAc,CAAC,KAAK,CAAC,CAAC;YACtB,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF,KAAK,CAAC,eAAe,GAAG,CAAC,CAAqB,EAAE,EAAE;YAChD,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,WAAW,EAAE,CAAC;oBAChB,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,oBAAoB,EAAE,CAAC;YACzB,KAAK,CAAC,sBAAsB,GAAG,CAAC,CAAqB,EAAE,EAAE;gBACvD,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC,CAAC;QACJ,CAAC;QAED,UAAU;QACV,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACnC,IAAI,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,UAAU,CAAC,EAAE,CAAC,CAAC;YACf,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAEtB,kCAAkC;YAClC,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,yBAAyB,EAAE,CAAC;YAC9D,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,2BAA2B,EAAE,CAAC;gBAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,QAAQ,CAAC,8BAA8B,CAAC,CAAC;oBACzC,OAAO;gBACT,CAAC;YACH,CAAC;YAED,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;gBACxB,qBAAqB,EAAE,oBAAoB;aAC5C,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,YAAY,GAChB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC;YAC/D,QAAQ,CAAC,YAAY,CAAC,CAAC;YACvB,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC;IAE5C,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,YAAY,GAChB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;YAC9D,QAAQ,CAAC,YAAY,CAAC,CAAC;YACvB,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACpC,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,UAAU,CAAC,EAAE,CAAC,CAAC;YACf,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,YAAY,GAChB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC;YAChE,QAAQ,CAAC,YAAY,CAAC,CAAC;YACvB,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,UAAU,CAAC,EAAE,CAAC,CAAC;QACf,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,cAAc,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,WAAW;QACX,OAAO;QACP,cAAc;QACd,KAAK;QACL,KAAK;QACL,IAAI;QACJ,MAAM;QACN,KAAK;KACN,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -67,6 +67,10 @@ declare class RCTVoice {
|
|
|
67
67
|
}
|
|
68
68
|
export type { SpeechEndEvent, SpeechErrorEvent, SpeechEvents, SpeechStartEvent, SpeechRecognizedEvent, SpeechResultsEvent, SpeechVolumeChangeEvent, TranscriptionEndEvent, TranscriptionErrorEvent, TranscriptionEvents, TranscriptionStartEvent, TranscriptionResultsEvent, };
|
|
69
69
|
export type { VoiceOptions, RecognitionStats, PermissionResult, Language, } from './VoiceUtilTypes';
|
|
70
|
+
export { VoiceMicrophone, MicIcon, MicOffIcon } from './components';
|
|
71
|
+
export type { VoiceMicrophoneProps, MicIconProps, MicOffIconProps, } from './components';
|
|
72
|
+
export { useVoiceRecognition } from './hooks';
|
|
73
|
+
export type { UseVoiceRecognitionOptions, UseVoiceRecognitionReturn, } from './hooks';
|
|
70
74
|
declare const _default: RCTVoice;
|
|
71
75
|
export default _default;
|
|
72
76
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -391,5 +391,9 @@ class RCTVoice {
|
|
|
391
391
|
this._events.onSpeechVolumeChanged = fn;
|
|
392
392
|
}
|
|
393
393
|
}
|
|
394
|
+
// Export components
|
|
395
|
+
export { VoiceMicrophone, MicIcon, MicOffIcon } from './components';
|
|
396
|
+
// Export hooks
|
|
397
|
+
export { useVoiceRecognition } from './hooks';
|
|
394
398
|
export default new RCTVoice();
|
|
395
399
|
//# sourceMappingURL=index.js.map
|