@elevenlabs/react 0.1.6 → 0.2.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.
- package/dist/index.d.ts +1 -0
- package/dist/lib.cjs +1 -1
- package/dist/lib.cjs.map +1 -1
- package/dist/lib.modern.js +1 -1
- package/dist/lib.modern.js.map +1 -1
- package/dist/lib.module.js +1 -1
- package/dist/lib.module.js.map +1 -1
- package/dist/lib.umd.js +1 -1
- package/dist/lib.umd.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export declare function useConversation<T extends HookOptions & ControlledState>
|
|
|
22
22
|
sendContextualUpdate: (text: string) => void;
|
|
23
23
|
sendUserMessage: (text: string) => void;
|
|
24
24
|
sendUserActivity: () => void;
|
|
25
|
+
sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => void;
|
|
25
26
|
status: Status;
|
|
26
27
|
canSendFeedback: boolean;
|
|
27
28
|
micMuted: boolean | undefined;
|
package/dist/lib.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=require("react"),n=require("@elevenlabs/client");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},t.apply(null,arguments)}var r=["micMuted","volume"];Object.defineProperty(exports,"postOverallFeedback",{enumerable:!0,get:function(){return n.postOverallFeedback}}),exports.useConversation=function(u){void 0===u&&(u={});var
|
|
1
|
+
var e=require("react"),n=require("@elevenlabs/client");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},t.apply(null,arguments)}var r=["micMuted","volume"];Object.defineProperty(exports,"postOverallFeedback",{enumerable:!0,get:function(){return n.postOverallFeedback}}),exports.useConversation=function(u){void 0===u&&(u={});var o=u.micMuted,l=u.volume,c=function(e,n){if(null==e)return{};var t={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(n.includes(r))continue;t[r]=e[r]}return t}(u,r),i=e.useRef(null),a=e.useRef(null),s=e.useState("disconnected"),v=s[0],d=s[1],f=e.useState(!1),m=f[0],p=f[1],g=e.useState("listening"),h=g[0],y=g[1];return e.useEffect(function(){var e;void 0!==o&&(null==i||null==(e=i.current)||e.setMicMuted(o))},[o]),e.useEffect(function(){var e;void 0!==l&&(null==i||null==(e=i.current)||e.setVolume({volume:l}))},[l]),e.useEffect(function(){return function(){var e;null==(e=i.current)||e.endSession()}},[]),{startSession:function(e){try{var r,u,s=function(r){return u?r:function(r,u){try{var s=(a.current=n.Conversation.startSession(t({},null!=c?c:{},null!=e?e:{},{onModeChange:function(e){y(e.mode)},onStatusChange:function(e){d(e.status)},onCanSendFeedbackChange:function(e){p(e.canSendFeedback)}})),Promise.resolve(a.current).then(function(e){return i.current=e,void 0!==o&&i.current.setMicMuted(o),void 0!==l&&i.current.setVolume({volume:l}),i.current.getId()}))}catch(e){return u(!0,e)}return s&&s.then?s.then(u.bind(null,!1),u.bind(null,!0)):u(!1,s)}(0,function(e,n){if(a.current=null,e)throw n;return n})};if(null!=(r=i.current)&&r.isOpen())return Promise.resolve(i.current.getId());var v=function(){if(a.current)return Promise.resolve(a.current).then(function(e){var n=e.getId();return u=1,n})}();return Promise.resolve(v&&v.then?v.then(s):s(v))}catch(e){return Promise.reject(e)}},endSession:function(){try{var e=i.current;return i.current=null,Promise.resolve(null==e?void 0:e.endSession()).then(function(){})}catch(e){return Promise.reject(e)}},setVolume:function(e){var n;null==(n=i.current)||n.setVolume({volume:e.volume})},getInputByteFrequencyData:function(){var e;return null==(e=i.current)?void 0:e.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var e;return null==(e=i.current)?void 0:e.getOutputByteFrequencyData()},getInputVolume:function(){var e,n;return null!=(e=null==(n=i.current)?void 0:n.getInputVolume())?e:0},getOutputVolume:function(){var e,n;return null!=(e=null==(n=i.current)?void 0:n.getOutputVolume())?e:0},sendFeedback:function(e){var n;null==(n=i.current)||n.sendFeedback(e)},getId:function(){var e;return null==(e=i.current)?void 0:e.getId()},sendContextualUpdate:function(e){var n;null==(n=i.current)||n.sendContextualUpdate(e)},sendUserMessage:function(e){var n;null==(n=i.current)||n.sendUserMessage(e)},sendUserActivity:function(){var e;null==(e=i.current)||e.sendUserActivity()},sendMCPToolApprovalResult:function(e,n){var t;null==(t=i.current)||t.sendMCPToolApprovalResult(e,n)},status:v,canSendFeedback:m,micMuted:o,isSpeaking:"speaking"===h}};
|
|
2
2
|
//# sourceMappingURL=lib.cjs.map
|
package/dist/lib.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.cjs","sources":["../src/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n Mode,\n SessionConfig,\n Callbacks,\n Options,\n Status,\n ClientToolsConfig,\n InputConfig,\n} from \"@elevenlabs/client\";\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\nexport type HookOptions = Partial<\n SessionConfig & HookCallbacks & ClientToolsConfig & InputConfig\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n onModeChange: ({ mode }) => {\n setMode(mode);\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions\n if (micMuted !== undefined) {\n conversationRef.current.setMicMuted(micMuted);\n }\n if (volume !== undefined) {\n conversationRef.current.setVolume({ volume });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n"],"names":["props","micMuted","volume","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","useEffect","_conversationRef$curr","undefined","current","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","Conversation","_extends","onModeChange","_ref","onStatusChange","_ref2","onCanSendFeedbackChange","_ref3","Promise","resolve","then","_lockRef$current","getId","_finallyRethrows","_wasThrown","_result2","isOpen","_temp","conversation","_conversation$getId","e","reject","_ref4","_conversationRef$curr5","getInputByteFrequencyData","_conversationRef$curr6","getOutputByteFrequencyData","_conversationRef$curr7","getInputVolume","_conversationRef$curr8","_conversationRef$curr9","getOutputVolume","_conversationRef$curr10","_conversationRef$curr11","sendFeedback","like","_conversationRef$curr12","_conversationRef$curr13","sendContextualUpdate","text","_conversationRef$curr14","sendUserMessage","_conversationRef$curr15","sendUserActivity","_conversationRef$curr16","isSpeaking"],"mappings":"qbAwCgB,SACdA,
|
|
1
|
+
{"version":3,"file":"lib.cjs","sources":["../src/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n Mode,\n SessionConfig,\n Callbacks,\n Options,\n Status,\n ClientToolsConfig,\n InputConfig,\n} from \"@elevenlabs/client\";\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\nexport type HookOptions = Partial<\n SessionConfig & HookCallbacks & ClientToolsConfig & InputConfig\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n onModeChange: ({ mode }) => {\n setMode(mode);\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions\n if (micMuted !== undefined) {\n conversationRef.current.setMicMuted(micMuted);\n }\n if (volume !== undefined) {\n conversationRef.current.setVolume({ volume });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n"],"names":["props","micMuted","volume","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","useEffect","_conversationRef$curr","undefined","current","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","Conversation","_extends","onModeChange","_ref","onStatusChange","_ref2","onCanSendFeedbackChange","_ref3","Promise","resolve","then","_lockRef$current","getId","_finallyRethrows","_wasThrown","_result2","isOpen","_temp","conversation","_conversation$getId","e","reject","_ref4","_conversationRef$curr5","getInputByteFrequencyData","_conversationRef$curr6","getOutputByteFrequencyData","_conversationRef$curr7","getInputVolume","_conversationRef$curr8","_conversationRef$curr9","getOutputVolume","_conversationRef$curr10","_conversationRef$curr11","sendFeedback","like","_conversationRef$curr12","_conversationRef$curr13","sendContextualUpdate","text","_conversationRef$curr14","sendUserMessage","_conversationRef$curr15","sendUserActivity","_conversationRef$curr16","sendMCPToolApprovalResult","toolCallId","isApproved","_conversationRef$curr17","isSpeaking"],"mappings":"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"}
|
package/dist/lib.modern.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useRef as e,useState as n,useEffect as t}from"react";import{Conversation as r}from"@elevenlabs/client";export{postOverallFeedback}from"@elevenlabs/client";function u(){return u=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},u.apply(null,arguments)}const l=["micMuted","volume"];function a(a={}){const{micMuted:c,volume:
|
|
1
|
+
import{useRef as e,useState as n,useEffect as t}from"react";import{Conversation as r}from"@elevenlabs/client";export{postOverallFeedback}from"@elevenlabs/client";function u(){return u=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},u.apply(null,arguments)}const l=["micMuted","volume"];function a(a={}){const{micMuted:c,volume:o}=a,s=function(e,n){if(null==e)return{};var t={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(n.includes(r))continue;t[r]=e[r]}return t}(a,l),i=e(null),d=e(null),[v,p]=n("disconnected"),[g,m]=n(!1),[y,f]=n("listening");return t(()=>{var e;void 0!==c&&(null==i||null==(e=i.current)||e.setMicMuted(c))},[c]),t(()=>{var e;void 0!==o&&(null==i||null==(e=i.current)||e.setVolume({volume:o}))},[o]),t(()=>()=>{var e;null==(e=i.current)||e.endSession()},[]),{startSession:async e=>{var n;if(null!=(n=i.current)&&n.isOpen())return i.current.getId();if(d.current)return(await d.current).getId();try{return d.current=r.startSession(u({},null!=s?s:{},null!=e?e:{},{onModeChange:({mode:e})=>{f(e)},onStatusChange:({status:e})=>{p(e)},onCanSendFeedbackChange:({canSendFeedback:e})=>{m(e)}})),i.current=await d.current,void 0!==c&&i.current.setMicMuted(c),void 0!==o&&i.current.setVolume({volume:o}),i.current.getId()}finally{d.current=null}},endSession:async()=>{const e=i.current;i.current=null,await(null==e?void 0:e.endSession())},setVolume:({volume:e})=>{var n;null==(n=i.current)||n.setVolume({volume:e})},getInputByteFrequencyData:()=>{var e;return null==(e=i.current)?void 0:e.getInputByteFrequencyData()},getOutputByteFrequencyData:()=>{var e;return null==(e=i.current)?void 0:e.getOutputByteFrequencyData()},getInputVolume:()=>{var e,n;return null!=(e=null==(n=i.current)?void 0:n.getInputVolume())?e:0},getOutputVolume:()=>{var e,n;return null!=(e=null==(n=i.current)?void 0:n.getOutputVolume())?e:0},sendFeedback:e=>{var n;null==(n=i.current)||n.sendFeedback(e)},getId:()=>{var e;return null==(e=i.current)?void 0:e.getId()},sendContextualUpdate:e=>{var n;null==(n=i.current)||n.sendContextualUpdate(e)},sendUserMessage:e=>{var n;null==(n=i.current)||n.sendUserMessage(e)},sendUserActivity:()=>{var e;null==(e=i.current)||e.sendUserActivity()},sendMCPToolApprovalResult:(e,n)=>{var t;null==(t=i.current)||t.sendMCPToolApprovalResult(e,n)},status:v,canSendFeedback:g,micMuted:c,isSpeaking:"speaking"===y}}export{a as useConversation};
|
|
2
2
|
//# sourceMappingURL=lib.modern.js.map
|
package/dist/lib.modern.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.modern.js","sources":["../src/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n Mode,\n SessionConfig,\n Callbacks,\n Options,\n Status,\n ClientToolsConfig,\n InputConfig,\n} from \"@elevenlabs/client\";\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\nexport type HookOptions = Partial<\n SessionConfig & HookCallbacks & ClientToolsConfig & InputConfig\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n onModeChange: ({ mode }) => {\n setMode(mode);\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions\n if (micMuted !== undefined) {\n conversationRef.current.setMicMuted(micMuted);\n }\n if (volume !== undefined) {\n conversationRef.current.setVolume({ volume });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n"],"names":["_excluded","useConversation","props","micMuted","volume","defaultOptions","_objectWithoutPropertiesLoose","conversationRef","useRef","lockRef","status","setStatus","useState","canSendFeedback","setCanSendFeedback","mode","setMode","useEffect","_conversationRef$curr","undefined","current","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","async","_conversationRef$curr4","isOpen","getId","Conversation","_extends","options","onModeChange","onStatusChange","onCanSendFeedbackChange","conversation","_conversationRef$curr5","getInputByteFrequencyData","_conversationRef$curr6","getOutputByteFrequencyData","_conversationRef$curr7","getInputVolume","_conversationRef$curr8","_conversationRef$curr9","getOutputVolume","_conversationRef$curr10","_conversationRef$curr11","sendFeedback","like","_conversationRef$curr12","_conversationRef$curr13","sendContextualUpdate","text","_conversationRef$curr14","sendUserMessage","_conversationRef$curr15","sendUserActivity","_conversationRef$curr16","isSpeaking"],"mappings":"0XAAA,MAAAA,EAAA,CAAA,WAAA,UAwCgB,SAAAC,EACdC,EAAW,
|
|
1
|
+
{"version":3,"file":"lib.modern.js","sources":["../src/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n Mode,\n SessionConfig,\n Callbacks,\n Options,\n Status,\n ClientToolsConfig,\n InputConfig,\n} from \"@elevenlabs/client\";\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\nexport type HookOptions = Partial<\n SessionConfig & HookCallbacks & ClientToolsConfig & InputConfig\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n onModeChange: ({ mode }) => {\n setMode(mode);\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions\n if (micMuted !== undefined) {\n conversationRef.current.setMicMuted(micMuted);\n }\n if (volume !== undefined) {\n conversationRef.current.setVolume({ volume });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n"],"names":["_excluded","useConversation","props","micMuted","volume","defaultOptions","_objectWithoutPropertiesLoose","conversationRef","useRef","lockRef","status","setStatus","useState","canSendFeedback","setCanSendFeedback","mode","setMode","useEffect","_conversationRef$curr","undefined","current","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","async","_conversationRef$curr4","isOpen","getId","Conversation","_extends","options","onModeChange","onStatusChange","onCanSendFeedbackChange","conversation","_conversationRef$curr5","getInputByteFrequencyData","_conversationRef$curr6","getOutputByteFrequencyData","_conversationRef$curr7","getInputVolume","_conversationRef$curr8","_conversationRef$curr9","getOutputVolume","_conversationRef$curr10","_conversationRef$curr11","sendFeedback","like","_conversationRef$curr12","_conversationRef$curr13","sendContextualUpdate","text","_conversationRef$curr14","sendUserMessage","_conversationRef$curr15","sendUserActivity","_conversationRef$curr16","sendMCPToolApprovalResult","toolCallId","isApproved","_conversationRef$curr17","isSpeaking"],"mappings":"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"}
|
package/dist/lib.module.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useRef as n,useState as e,useEffect as t}from"react";import{Conversation as r}from"@elevenlabs/client";export{postOverallFeedback}from"@elevenlabs/client";function u(){return u=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},u.apply(null,arguments)}var l=["micMuted","volume"];function o(o){void 0===o&&(o={});var c=o.micMuted,i=o.volume,a=function(n,e){if(null==n)return{};var t={};for(var r in n)if({}.hasOwnProperty.call(n,r)){if(e.includes(r))continue;t[r]=n[r]}return t}(o,l),s=n(null),v=n(null),d=e("disconnected"),f=d[0],m=d[1],
|
|
1
|
+
import{useRef as n,useState as e,useEffect as t}from"react";import{Conversation as r}from"@elevenlabs/client";export{postOverallFeedback}from"@elevenlabs/client";function u(){return u=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},u.apply(null,arguments)}var l=["micMuted","volume"];function o(o){void 0===o&&(o={});var c=o.micMuted,i=o.volume,a=function(n,e){if(null==n)return{};var t={};for(var r in n)if({}.hasOwnProperty.call(n,r)){if(e.includes(r))continue;t[r]=n[r]}return t}(o,l),s=n(null),v=n(null),d=e("disconnected"),f=d[0],m=d[1],p=e(!1),g=p[0],h=p[1],y=e("listening"),b=y[0],M=y[1];return t(function(){var n;void 0!==c&&(null==s||null==(n=s.current)||n.setMicMuted(c))},[c]),t(function(){var n;void 0!==i&&(null==s||null==(n=s.current)||n.setVolume({volume:i}))},[i]),t(function(){return function(){var n;null==(n=s.current)||n.endSession()}},[]),{startSession:function(n){try{var e,t,l=function(e){return t?e:function(e,t){try{var l=(v.current=r.startSession(u({},null!=a?a:{},null!=n?n:{},{onModeChange:function(n){M(n.mode)},onStatusChange:function(n){m(n.status)},onCanSendFeedbackChange:function(n){h(n.canSendFeedback)}})),Promise.resolve(v.current).then(function(n){return s.current=n,void 0!==c&&s.current.setMicMuted(c),void 0!==i&&s.current.setVolume({volume:i}),s.current.getId()}))}catch(n){return t(!0,n)}return l&&l.then?l.then(t.bind(null,!1),t.bind(null,!0)):t(!1,l)}(0,function(n,e){if(v.current=null,n)throw e;return e})};if(null!=(e=s.current)&&e.isOpen())return Promise.resolve(s.current.getId());var o=function(){if(v.current)return Promise.resolve(v.current).then(function(n){var e=n.getId();return t=1,e})}();return Promise.resolve(o&&o.then?o.then(l):l(o))}catch(n){return Promise.reject(n)}},endSession:function(){try{var n=s.current;return s.current=null,Promise.resolve(null==n?void 0:n.endSession()).then(function(){})}catch(n){return Promise.reject(n)}},setVolume:function(n){var e;null==(e=s.current)||e.setVolume({volume:n.volume})},getInputByteFrequencyData:function(){var n;return null==(n=s.current)?void 0:n.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var n;return null==(n=s.current)?void 0:n.getOutputByteFrequencyData()},getInputVolume:function(){var n,e;return null!=(n=null==(e=s.current)?void 0:e.getInputVolume())?n:0},getOutputVolume:function(){var n,e;return null!=(n=null==(e=s.current)?void 0:e.getOutputVolume())?n:0},sendFeedback:function(n){var e;null==(e=s.current)||e.sendFeedback(n)},getId:function(){var n;return null==(n=s.current)?void 0:n.getId()},sendContextualUpdate:function(n){var e;null==(e=s.current)||e.sendContextualUpdate(n)},sendUserMessage:function(n){var e;null==(e=s.current)||e.sendUserMessage(n)},sendUserActivity:function(){var n;null==(n=s.current)||n.sendUserActivity()},sendMCPToolApprovalResult:function(n,e){var t;null==(t=s.current)||t.sendMCPToolApprovalResult(n,e)},status:f,canSendFeedback:g,micMuted:c,isSpeaking:"speaking"===b}}export{o as useConversation};
|
|
2
2
|
//# sourceMappingURL=lib.module.js.map
|
package/dist/lib.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.module.js","sources":["../src/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n Mode,\n SessionConfig,\n Callbacks,\n Options,\n Status,\n ClientToolsConfig,\n InputConfig,\n} from \"@elevenlabs/client\";\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\nexport type HookOptions = Partial<\n SessionConfig & HookCallbacks & ClientToolsConfig & InputConfig\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n onModeChange: ({ mode }) => {\n setMode(mode);\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions\n if (micMuted !== undefined) {\n conversationRef.current.setMicMuted(micMuted);\n }\n if (volume !== undefined) {\n conversationRef.current.setVolume({ volume });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n"],"names":["useConversation","props","micMuted","volume","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","useEffect","_conversationRef$curr","undefined","current","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","Conversation","_extends","onModeChange","_ref","onStatusChange","_ref2","onCanSendFeedbackChange","_ref3","Promise","resolve","then","_lockRef$current","getId","_finallyRethrows","_wasThrown","_result2","isOpen","_temp","conversation","_conversation$getId","e","reject","_ref4","_conversationRef$curr5","getInputByteFrequencyData","_conversationRef$curr6","getOutputByteFrequencyData","_conversationRef$curr7","getInputVolume","_conversationRef$curr8","_conversationRef$curr9","getOutputVolume","_conversationRef$curr10","_conversationRef$curr11","sendFeedback","like","_conversationRef$curr12","_conversationRef$curr13","sendContextualUpdate","text","_conversationRef$curr14","sendUserMessage","_conversationRef$curr15","sendUserActivity","_conversationRef$curr16","isSpeaking"],"mappings":"sZAwCgB,SAAAA,EACdC,
|
|
1
|
+
{"version":3,"file":"lib.module.js","sources":["../src/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n Mode,\n SessionConfig,\n Callbacks,\n Options,\n Status,\n ClientToolsConfig,\n InputConfig,\n} from \"@elevenlabs/client\";\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\nexport type HookOptions = Partial<\n SessionConfig & HookCallbacks & ClientToolsConfig & InputConfig\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n onModeChange: ({ mode }) => {\n setMode(mode);\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions\n if (micMuted !== undefined) {\n conversationRef.current.setMicMuted(micMuted);\n }\n if (volume !== undefined) {\n conversationRef.current.setVolume({ volume });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n"],"names":["useConversation","props","micMuted","volume","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","useEffect","_conversationRef$curr","undefined","current","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","Conversation","_extends","onModeChange","_ref","onStatusChange","_ref2","onCanSendFeedbackChange","_ref3","Promise","resolve","then","_lockRef$current","getId","_finallyRethrows","_wasThrown","_result2","isOpen","_temp","conversation","_conversation$getId","e","reject","_ref4","_conversationRef$curr5","getInputByteFrequencyData","_conversationRef$curr6","getOutputByteFrequencyData","_conversationRef$curr7","getInputVolume","_conversationRef$curr8","_conversationRef$curr9","getOutputVolume","_conversationRef$curr10","_conversationRef$curr11","sendFeedback","like","_conversationRef$curr12","_conversationRef$curr13","sendContextualUpdate","text","_conversationRef$curr14","sendUserMessage","_conversationRef$curr15","sendUserActivity","_conversationRef$curr16","sendMCPToolApprovalResult","toolCallId","isApproved","_conversationRef$curr17","isSpeaking"],"mappings":"sZAwCgB,SAAAA,EACdC,QAAA,IAAAA,IAAAA,EAAW,CAAA,GAEX,IAAQC,EAAwCD,EAAxCC,SAAUC,EAA8BF,EAA9BE,OAAWC,yIAAcC,CAAKJ,EAALK,GACrCC,EAAkBC,EAA4B,MAC9CC,EAAUD,EAAqC,MACrDE,EAA4BC,EAAiB,gBAAtCC,EAAMF,KAAEG,EAASH,EAAA,GACxBI,EAA8CH,GAAS,GAAhDI,EAAeD,EAAEE,GAAAA,EAAkBF,EAC1C,GAAAG,EAAwBN,EAAe,aAAhCO,EAAID,EAAA,GAAEE,EAAOF,EAAA,GAoBpB,OAlBAG,EAAU,WACoBC,IAAAA,OAAXC,IAAbpB,IACamB,MAAfd,GAAAc,OAAeA,EAAfd,EAAiBgB,UAAjBF,EAA0BG,YAAYtB,GAE1C,EAAG,CAACA,IAEJkB,EAAU,WACkBK,IAAAA,OAAXH,IAAXnB,IACa,MAAfI,GAAAkB,OAAeA,EAAflB,EAAiBgB,UAAjBE,EAA0BC,UAAU,CAAEvB,OAAAA,IAE1C,EAAG,CAACA,IAEJiB,EAAU,WACR,OAAO,WAAKO,IAAAA,EACVA,OAAAA,EAAApB,EAAgBgB,UAAhBI,EAAyBC,YAC3B,CACF,EAAG,IAEI,CACLC,aAAYA,SAAUC,GAAqB,IAAIC,IAAAA,EAoCpBC,EApCoBC,EAAAA,SAAAC,GAAAF,OAAAA,EAAAE,2BAW3CzB,EAAQc,QAAUY,EAAaN,aAAYO,EACrChC,CAAAA,EAAAA,MAAAA,EAAAA,EAAkB,CAAE,EACb,MAAP0B,EAAAA,EAAW,CAAE,EAAA,CACjBO,aAAc,SAAFC,GACVnB,EADmBmB,EAAJpB,KAEjB,EACAqB,eAAgB,SAAFC,GACZ3B,EADuB2B,EAAN5B,OAEnB,EACA6B,wBAAyB,SAAFC,GACrB1B,EADyC0B,EAAf3B,gBAE5B,KACY4B,QAAAC,QAEkBnC,EAAQc,SAAOsB,KAAA,SAAAC,GAS/C,OATAvC,EAAgBgB,QAAOuB,OAENxB,IAAbpB,GACFK,EAAgBgB,QAAQC,YAAYtB,QAEvBoB,IAAXnB,GACFI,EAAgBgB,QAAQG,UAAU,CAAEvB,OAAAA,IAG/BI,EAAgBgB,QAAQwB,OAAQ,6FAlCIC,CAUzC,WAyBHC,EAAAC,GACwB,GAAvBzC,EAAQc,QAAU,KAAK0B,EAAA,MAAAC,EAAAA,OAAAA,CAAA,EAAAlB,EAnCzB,GAA2B,OAA3BD,EAAIxB,EAAgBgB,UAAhBQ,EAAyBoB,SAC3B,OAAAR,QAAAC,QAAOrC,EAAgBgB,QAAQwB,SAChC,IAAAK,EAAA,WAAA,GAEG3C,EAAQc,QAAO,OAAAoB,QAAAC,QACUnC,EAAQc,SAAOsB,KAApCQ,SAAAA,GAAYC,IAAAA,EACXD,EAAaN,QAAO,OAAAf,EAAA,EAAAsB,CAAA,EAAA,CAJ5B,GAI4B,OAAAX,QAAAC,QAAAQ,GAAAA,EAAAP,KAAAO,EAAAP,KAAAZ,GAAAA,EAAAmB,GA+B/B,CAAC,MAAAG,GAAAZ,OAAAA,QAAAa,OAAAD,EAAA,CAAA,EAGD3B,WAAUA,WAAa,IACrB,IAAMyB,EAAe9C,EAAgBgB,QACN,OAA/BhB,EAAgBgB,QAAU,KAAKoB,QAAAC,QACzBS,MAAAA,OAAAA,EAAAA,EAAczB,cAAYiB,KAClC,WAAA,EAAA,CAAC,MAAAU,GAAAZ,OAAAA,QAAAa,OAAAD,EAAA,CAAA,EACD7B,UAAW,SAAF+B,GAAqCC,IAAAA,EACrB,OAAvBA,EAAAnD,EAAgBgB,UAAhBmC,EAAyBhC,UAAU,CAAEvB,OADnBsD,EAANtD,QAEd,EACAwD,0BAA2B,WAAK,IAAAC,EAC9B,OAAOA,OAAPA,EAAOrD,EAAgBgB,cAAhBqC,EAAAA,EAAyBD,2BAClC,EACAE,2BAA4B,WAAKC,IAAAA,EAC/B,OAAOA,OAAPA,EAAOvD,EAAgBgB,cAAhBuC,EAAAA,EAAyBD,4BAClC,EACAE,eAAgB,eAAKC,EAAAC,EACnB,OAAgD,OAAhDD,EAA8B,OAA9BC,EAAO1D,EAAgBgB,cAAO,EAAvB0C,EAAyBF,kBAAgBC,EAAI,CACtD,EACAE,gBAAiB,WAAK,IAAAC,EAAAC,EACpB,OAAiD,OAAjDD,EAA8B,OAA9BC,EAAO7D,EAAgBgB,cAAO,EAAvB6C,EAAyBF,mBAAiBC,EAAI,CACvD,EACAE,aAAc,SAACC,GAAiBC,IAAAA,EAC9BA,OAAAA,EAAAhE,EAAgBgB,UAAhBgD,EAAyBF,aAAaC,EACxC,EACAvB,MAAO,WAAK,IAAAyB,EACV,OAA8B,OAA9BA,EAAOjE,EAAgBgB,cAAO,EAAvBiD,EAAyBzB,OAClC,EACA0B,qBAAsB,SAACC,GAAgBC,IAAAA,EACd,OAAvBA,EAAApE,EAAgBgB,UAAhBoD,EAAyBF,qBAAqBC,EAChD,EACAE,gBAAiB,SAACF,GAAgB,IAAAG,EACT,OAAvBA,EAAAtE,EAAgBgB,UAAhBsD,EAAyBD,gBAAgBF,EAC3C,EACAI,iBAAkB,WAAKC,IAAAA,EACrBA,OAAAA,EAAAxE,EAAgBgB,UAAhBwD,EAAyBD,kBAC3B,EACAE,0BAA2B,SAACC,EAAoBC,GAAuB,IAAAC,SACrEA,EAAA5E,EAAgBgB,UAAhB4D,EAAyBH,0BACvBC,EACAC,EAEJ,EACAtE,OAAAA,EACAG,gBAAAA,EACAb,SAAAA,EACAkF,WAAqB,aAATlE,EAEhB"}
|
package/dist/lib.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("react"),require("@elevenlabs/client")):"function"==typeof define&&define.amd?define(["exports","react","@elevenlabs/client"],n):n((e||self).react={},e.react,e.client)}(this,function(e,n,t){function r(){return r=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},r.apply(null,arguments)}var u=["micMuted","volume"];Object.defineProperty(e,"postOverallFeedback",{enumerable:!0,get:function(){return t.postOverallFeedback}}),e.useConversation=function(e){void 0===e&&(e={});var o=e.micMuted,
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("react"),require("@elevenlabs/client")):"function"==typeof define&&define.amd?define(["exports","react","@elevenlabs/client"],n):n((e||self).react={},e.react,e.client)}(this,function(e,n,t){function r(){return r=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},r.apply(null,arguments)}var u=["micMuted","volume"];Object.defineProperty(e,"postOverallFeedback",{enumerable:!0,get:function(){return t.postOverallFeedback}}),e.useConversation=function(e){void 0===e&&(e={});var o=e.micMuted,l=e.volume,c=function(e,n){if(null==e)return{};var t={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(n.includes(r))continue;t[r]=e[r]}return t}(e,u),i=n.useRef(null),a=n.useRef(null),s=n.useState("disconnected"),d=s[0],f=s[1],v=n.useState(!1),p=v[0],m=v[1],g=n.useState("listening"),y=g[0],h=g[1];return n.useEffect(function(){var e;void 0!==o&&(null==i||null==(e=i.current)||e.setMicMuted(o))},[o]),n.useEffect(function(){var e;void 0!==l&&(null==i||null==(e=i.current)||e.setVolume({volume:l}))},[l]),n.useEffect(function(){return function(){var e;null==(e=i.current)||e.endSession()}},[]),{startSession:function(e){try{var n,u,s=function(n){return u?n:function(n,u){try{var s=(a.current=t.Conversation.startSession(r({},null!=c?c:{},null!=e?e:{},{onModeChange:function(e){h(e.mode)},onStatusChange:function(e){f(e.status)},onCanSendFeedbackChange:function(e){m(e.canSendFeedback)}})),Promise.resolve(a.current).then(function(e){return i.current=e,void 0!==o&&i.current.setMicMuted(o),void 0!==l&&i.current.setVolume({volume:l}),i.current.getId()}))}catch(e){return u(!0,e)}return s&&s.then?s.then(u.bind(null,!1),u.bind(null,!0)):u(!1,s)}(0,function(e,n){if(a.current=null,e)throw n;return n})};if(null!=(n=i.current)&&n.isOpen())return Promise.resolve(i.current.getId());var d=function(){if(a.current)return Promise.resolve(a.current).then(function(e){var n=e.getId();return u=1,n})}();return Promise.resolve(d&&d.then?d.then(s):s(d))}catch(e){return Promise.reject(e)}},endSession:function(){try{var e=i.current;return i.current=null,Promise.resolve(null==e?void 0:e.endSession()).then(function(){})}catch(e){return Promise.reject(e)}},setVolume:function(e){var n;null==(n=i.current)||n.setVolume({volume:e.volume})},getInputByteFrequencyData:function(){var e;return null==(e=i.current)?void 0:e.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var e;return null==(e=i.current)?void 0:e.getOutputByteFrequencyData()},getInputVolume:function(){var e,n;return null!=(e=null==(n=i.current)?void 0:n.getInputVolume())?e:0},getOutputVolume:function(){var e,n;return null!=(e=null==(n=i.current)?void 0:n.getOutputVolume())?e:0},sendFeedback:function(e){var n;null==(n=i.current)||n.sendFeedback(e)},getId:function(){var e;return null==(e=i.current)?void 0:e.getId()},sendContextualUpdate:function(e){var n;null==(n=i.current)||n.sendContextualUpdate(e)},sendUserMessage:function(e){var n;null==(n=i.current)||n.sendUserMessage(e)},sendUserActivity:function(){var e;null==(e=i.current)||e.sendUserActivity()},sendMCPToolApprovalResult:function(e,n){var t;null==(t=i.current)||t.sendMCPToolApprovalResult(e,n)},status:d,canSendFeedback:p,micMuted:o,isSpeaking:"speaking"===y}}});
|
|
2
2
|
//# sourceMappingURL=lib.umd.js.map
|
package/dist/lib.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.umd.js","sources":["../src/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n Mode,\n SessionConfig,\n Callbacks,\n Options,\n Status,\n ClientToolsConfig,\n InputConfig,\n} from \"@elevenlabs/client\";\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\nexport type HookOptions = Partial<\n SessionConfig & HookCallbacks & ClientToolsConfig & InputConfig\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n onModeChange: ({ mode }) => {\n setMode(mode);\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions\n if (micMuted !== undefined) {\n conversationRef.current.setMicMuted(micMuted);\n }\n if (volume !== undefined) {\n conversationRef.current.setVolume({ volume });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n"],"names":["props","micMuted","volume","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","useEffect","_conversationRef$curr","undefined","current","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","Conversation","_extends","onModeChange","_ref","onStatusChange","_ref2","onCanSendFeedbackChange","_ref3","Promise","resolve","then","_lockRef$current","getId","_finallyRethrows","_wasThrown","_result2","isOpen","_temp","conversation","_conversation$getId","e","reject","_ref4","_conversationRef$curr5","getInputByteFrequencyData","_conversationRef$curr6","getOutputByteFrequencyData","_conversationRef$curr7","getInputVolume","_conversationRef$curr8","_conversationRef$curr9","getOutputVolume","_conversationRef$curr10","_conversationRef$curr11","sendFeedback","like","_conversationRef$curr12","_conversationRef$curr13","sendContextualUpdate","text","_conversationRef$curr14","sendUserMessage","_conversationRef$curr15","sendUserActivity","_conversationRef$curr16","isSpeaking"],"mappings":"krBAwCgB,SACdA,
|
|
1
|
+
{"version":3,"file":"lib.umd.js","sources":["../src/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n Mode,\n SessionConfig,\n Callbacks,\n Options,\n Status,\n ClientToolsConfig,\n InputConfig,\n} from \"@elevenlabs/client\";\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\nexport type HookOptions = Partial<\n SessionConfig & HookCallbacks & ClientToolsConfig & InputConfig\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n onModeChange: ({ mode }) => {\n setMode(mode);\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions\n if (micMuted !== undefined) {\n conversationRef.current.setMicMuted(micMuted);\n }\n if (volume !== undefined) {\n conversationRef.current.setVolume({ volume });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n"],"names":["props","micMuted","volume","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","useEffect","_conversationRef$curr","undefined","current","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","Conversation","_extends","onModeChange","_ref","onStatusChange","_ref2","onCanSendFeedbackChange","_ref3","Promise","resolve","then","_lockRef$current","getId","_finallyRethrows","_wasThrown","_result2","isOpen","_temp","conversation","_conversation$getId","e","reject","_ref4","_conversationRef$curr5","getInputByteFrequencyData","_conversationRef$curr6","getOutputByteFrequencyData","_conversationRef$curr7","getInputVolume","_conversationRef$curr8","_conversationRef$curr9","getOutputVolume","_conversationRef$curr10","_conversationRef$curr11","sendFeedback","like","_conversationRef$curr12","_conversationRef$curr13","sendContextualUpdate","text","_conversationRef$curr14","sendUserMessage","_conversationRef$curr15","sendUserActivity","_conversationRef$curr16","sendMCPToolApprovalResult","toolCallId","isApproved","_conversationRef$curr17","isSpeaking"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elevenlabs/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "ElevenLabs React Library",
|
|
5
5
|
"main": "./dist/lib.umd.js",
|
|
6
6
|
"module": "./dist/lib.module.js",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"author": "ElevenLabs",
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@elevenlabs/client": "0.
|
|
22
|
+
"@elevenlabs/client": "0.2.0"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"react": ">=16.8.0"
|