@formmy.app/chat 0.0.4 → 0.0.5

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.
@@ -31,11 +31,16 @@ import { type VoiceStatus, type VoiceTranscript } from "../voice/voice-client";
31
31
  export interface UseFormmyVoiceOptions {
32
32
  agentId: string;
33
33
  voiceId?: string;
34
+ onStatusChange?: (status: VoiceStatus) => void;
35
+ onError?: (error: Error) => void;
36
+ onTranscript?: (transcript: VoiceTranscript) => void;
34
37
  }
35
38
  export interface UseFormmyVoiceReturn {
36
39
  start: () => Promise<void>;
37
40
  stop: () => void;
38
41
  toggleMute: () => void;
42
+ setMuted: (muted: boolean) => void;
43
+ clearTranscripts: () => void;
39
44
  status: VoiceStatus;
40
45
  isMuted: boolean;
41
46
  isSpeaking: boolean;
@@ -43,5 +48,5 @@ export interface UseFormmyVoiceReturn {
43
48
  error: Error | null;
44
49
  transcripts: VoiceTranscript[];
45
50
  }
46
- export declare function useFormmyVoice({ agentId, voiceId }: UseFormmyVoiceOptions): UseFormmyVoiceReturn;
51
+ export declare function useFormmyVoice({ agentId, voiceId, onStatusChange: onStatusChangeCb, onError: onErrorCb, onTranscript: onTranscriptCb }: UseFormmyVoiceOptions): UseFormmyVoiceReturn;
47
52
  //# sourceMappingURL=use-formmy-voice.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-formmy-voice.d.ts","sourceRoot":"","sources":["../../src/hooks/use-formmy-voice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAElG,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC;AAED,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,qBAAqB,GAAG,oBAAoB,CAkFhG"}
1
+ {"version":3,"file":"use-formmy-voice.d.ts","sourceRoot":"","sources":["../../src/hooks/use-formmy-voice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAElG,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC;AAED,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,qBAAqB,GAAG,oBAAoB,CAkGpL"}
@@ -30,7 +30,7 @@
30
30
  import { useState, useRef, useCallback, useEffect } from "react";
31
31
  import { useFormmy } from "../ui/provider";
32
32
  import { FormmyVoiceClient } from "../voice/voice-client";
33
- export function useFormmyVoice({ agentId, voiceId }) {
33
+ export function useFormmyVoice({ agentId, voiceId, onStatusChange: onStatusChangeCb, onError: onErrorCb, onTranscript: onTranscriptCb }) {
34
34
  const { publishableKey, baseUrl } = useFormmy();
35
35
  const clientRef = useRef(null);
36
36
  const [status, setStatus] = useState("idle");
@@ -58,14 +58,16 @@ export function useFormmyVoice({ agentId, voiceId }) {
58
58
  voiceId,
59
59
  });
60
60
  client.on({
61
- onStatusChange: (s) => setStatus(s),
61
+ onStatusChange: (s) => {
62
+ setStatus(s);
63
+ onStatusChangeCb?.(s);
64
+ },
62
65
  onTranscript: (t) => {
66
+ onTranscriptCb?.(t);
63
67
  setTranscripts((prev) => {
64
68
  if (t.isFinal) {
65
- // Add as final entry
66
69
  return [...prev, t];
67
70
  }
68
- // Update last entry of same role if it's a partial
69
71
  const last = prev[prev.length - 1];
70
72
  if (last && last.role === t.role && !last.isFinal) {
71
73
  return [...prev.slice(0, -1), t];
@@ -73,13 +75,16 @@ export function useFormmyVoice({ agentId, voiceId }) {
73
75
  return [...prev, t];
74
76
  });
75
77
  },
76
- onError: (err) => setError(err),
78
+ onError: (err) => {
79
+ setError(err);
80
+ onErrorCb?.(err);
81
+ },
77
82
  });
78
83
  clientRef.current = client;
79
84
  setError(null);
80
85
  setTranscripts([]);
81
86
  await client.connect();
82
- }, [baseUrl, publishableKey, agentId, voiceId]);
87
+ }, [baseUrl, publishableKey, agentId, voiceId, onStatusChangeCb, onErrorCb, onTranscriptCb]);
83
88
  const stop = useCallback(() => {
84
89
  clientRef.current?.disconnect();
85
90
  clientRef.current = null;
@@ -91,10 +96,19 @@ export function useFormmyVoice({ agentId, voiceId }) {
91
96
  return next;
92
97
  });
93
98
  }, []);
99
+ const setMuted = useCallback((muted) => {
100
+ setIsMuted(muted);
101
+ clientRef.current?.setMuted(muted);
102
+ }, []);
103
+ const clearTranscripts = useCallback(() => {
104
+ setTranscripts([]);
105
+ }, []);
94
106
  return {
95
107
  start,
96
108
  stop,
97
109
  toggleMute,
110
+ setMuted,
111
+ clearTranscripts,
98
112
  status,
99
113
  isMuted,
100
114
  isSpeaking: status === "speaking",
@@ -1 +1 @@
1
- {"version":3,"file":"use-formmy-voice.js","sourceRoot":"","sources":["../../src/hooks/use-formmy-voice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-formmy-voice.js","sourceRoot":"","sources":["../../src/hooks/use-formmy-voice.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@formmy.app/chat",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "description": "Official React SDK for Formmy Chat - AI chatbot widgets and headless hooks",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",