@convai/web-sdk 1.8.0-beta.6 → 1.8.0-beta.7
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 +285 -1
- package/dist/core/ConvaiClient.d.ts +59 -2
- package/dist/core/ConvaiClient.d.ts.map +1 -1
- package/dist/core/ConvaiClient.js +457 -6
- package/dist/core/ConvaiClient.js.map +1 -1
- package/dist/core/MessageHandler.d.ts +11 -0
- package/dist/core/MessageHandler.d.ts.map +1 -1
- package/dist/core/MessageHandler.js +325 -30
- package/dist/core/MessageHandler.js.map +1 -1
- package/dist/core/SSESession.js +2 -2
- package/dist/core/SSESession.js.map +1 -1
- package/dist/core/connectRequest.d.ts +38 -3
- package/dist/core/connectRequest.d.ts.map +1 -1
- package/dist/core/connectRequest.js +57 -11
- package/dist/core/connectRequest.js.map +1 -1
- package/dist/core/index.d.ts +3 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/logicalTurn.d.ts +4 -1
- package/dist/core/logicalTurn.d.ts.map +1 -1
- package/dist/core/logicalTurn.js +35 -4
- package/dist/core/logicalTurn.js.map +1 -1
- package/dist/core/modelOutput.d.ts +40 -0
- package/dist/core/modelOutput.d.ts.map +1 -0
- package/dist/core/modelOutput.js +187 -0
- package/dist/core/modelOutput.js.map +1 -0
- package/dist/core/publishedChat.d.ts +9 -0
- package/dist/core/publishedChat.d.ts.map +1 -0
- package/dist/core/publishedChat.js +13 -0
- package/dist/core/publishedChat.js.map +1 -0
- package/dist/core/types.d.ts +225 -25
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/embed/ConvaiChatElement.d.ts +27 -0
- package/dist/embed/ConvaiChatElement.d.ts.map +1 -0
- package/dist/embed/ConvaiChatElement.js +300 -0
- package/dist/embed/ConvaiChatElement.js.map +1 -0
- package/dist/embed/browser.d.ts +3 -0
- package/dist/embed/browser.d.ts.map +1 -0
- package/dist/embed/browser.js +5 -0
- package/dist/embed/browser.js.map +1 -0
- package/dist/embed/chat-embed-v1.js +100 -0
- package/dist/embed/chat-embed-v1.js.map +7 -0
- package/dist/embed/index.d.ts +9 -0
- package/dist/embed/index.d.ts.map +1 -0
- package/dist/embed/index.js +9 -0
- package/dist/embed/index.js.map +1 -0
- package/dist/embed/publicationApi.d.ts +23 -0
- package/dist/embed/publicationApi.d.ts.map +1 -0
- package/dist/embed/publicationApi.js +141 -0
- package/dist/embed/publicationApi.js.map +1 -0
- package/dist/react/components/ConvaiWidget.d.ts +11 -1
- package/dist/react/components/ConvaiWidget.d.ts.map +1 -1
- package/dist/react/components/ConvaiWidget.js +67 -11
- package/dist/react/components/ConvaiWidget.js.map +1 -1
- package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.d.ts +1 -1
- package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.d.ts.map +1 -1
- package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.js +2 -2
- package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.js.map +1 -1
- package/dist/react/hooks/useConvaiClient.d.ts +2 -0
- package/dist/react/hooks/useConvaiClient.d.ts.map +1 -1
- package/dist/react/hooks/useConvaiClient.js +8 -0
- package/dist/react/hooks/useConvaiClient.js.map +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/vanilla/ConvaiWidget.d.ts.map +1 -1
- package/dist/vanilla/ConvaiWidget.js +153 -32
- package/dist/vanilla/ConvaiWidget.js.map +1 -1
- package/dist/vanilla/WidgetEventSubscriptions.d.ts +15 -0
- package/dist/vanilla/WidgetEventSubscriptions.d.ts.map +1 -0
- package/dist/vanilla/WidgetEventSubscriptions.js +37 -0
- package/dist/vanilla/WidgetEventSubscriptions.js.map +1 -0
- package/dist/vanilla/index.d.ts +1 -1
- package/dist/vanilla/index.d.ts.map +1 -1
- package/dist/vanilla/index.js +1 -1
- package/dist/vanilla/index.js.map +1 -1
- package/dist/vanilla/types.d.ts +8 -1
- package/dist/vanilla/types.d.ts.map +1 -1
- package/dist/vanilla/types.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +19 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConvaiWidget.js","sourceRoot":"","sources":["../../../src/react/components/ConvaiWidget.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useState, useRef, useEffect } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { FiMoreVertical, FiMic, FiSend, FiPhoneOff } from \"react-icons/fi\";\nimport { IoVolumeMute, IoVolumeHigh } from \"react-icons/io5\";\nimport { PiWaveform } from \"react-icons/pi\";\nimport type { IConvaiClient } from \"../../core/types\";\nimport { RoomContext } from \"@livekit/components-react\";\nimport { useCharacterInfo } from \"../hooks/useCharacterInfo\";\nimport { AudioRenderer } from \"../../vanilla/AudioRenderer\";\n\n// Import styled components and theme from rtc-widget\nimport {\n ConvaiContainer,\n MorphingContainer,\n ButtonContent,\n Logo,\n ChatContent,\n Header,\n Title,\n CloseButton,\n SettingsButton,\n Content,\n Footer,\n InputContainer,\n Input,\n ActionButton,\n aeroTheme,\n iosTransitions,\n ConvaiLogo,\n ChevronDown,\n} from \"./rtc-widget\";\n\n// Import message components\nimport {\n MessageList,\n SettingsTray,\n VoiceModeOverlay,\n RTCChatMessage,\n FloatingVideo,\n} from \"./rtc-widget\";\n\ninterface Character {\n id: string;\n name?: string;\n image?: string;\n}\n\ninterface ConvaiWidgetProps {\n /** Convai client instance (required) */\n convaiClient: IConvaiClient & { \n activity?: string;\n isAudioMuted: boolean;\n isVideoEnabled: boolean;\n isScreenShareActive: boolean;\n };\n /**\n * Show video toggle button in settings (default: true).\n * Only works if connection type is \"video\". If false, hides the video button.\n */\n showVideo?: boolean;\n /**\n * Show screen share toggle button in settings (default: true).\n * Only works if connection type is \"video\". If false, hides the screen share button.\n */\n showScreenShare?: boolean;\n /**\n * Start in voice mode by default when widget opens (default: true).\n * When true, the widget will open directly in voice mode with microphone enabled.\n */\n defaultVoiceMode?: boolean;\n}\n\n/**\n * ConvaiWidget - A consolidated chat widget component for real-time conversations\n *\n * This component provides a complete UI for interacting with Convai characters.\n * Connection configuration should be handled via useConvaiClient.connect().\n *\n * Features:\n * - Collapsed circular button with status indicator\n * - Expandable/collapsible chat interface\n * - Voice mode support\n * - Real-time message streaming\n * - Audio controls (mute/unmute)\n * - Settings tray with session reset\n * - Optional video and screen share (when connection type supports it)\n *\n * @param {ConvaiWidgetProps} props - Component props\n * @param {ConvaiClient} props.convaiClient - Convai client instance (required)\n * @param {boolean} props.showVideo - Show video toggle in settings (default: true)\n * @param {boolean} props.showScreenShare - Show screen share toggle in settings (default: true)\n * @param {boolean} props.defaultVoiceMode - Start in voice mode when widget opens (default: true)\n *\n * @example\n * ```tsx\n * function App() {\n * const convaiClient = useConvaiClient({\n * apiKey: 'your-api-key',\n * characterId: 'your-character-id',\n * enableVideo: true,\n * });\n *\n * return (\n * <ConvaiWidget\n * convaiClient={convaiClient}\n * showVideo={true}\n * showScreenShare={true}\n * />\n * );\n * }\n * ```\n */\nexport const ConvaiWidget: React.FC<ConvaiWidgetProps> = ({\n convaiClient,\n showVideo = true,\n showScreenShare = true,\n defaultVoiceMode = true,\n}) => {\n // Fetch character information dynamically from client's stored values\n const {\n name: characterName,\n image: characterImage,\n isLoading: isCharacterLoading,\n } = useCharacterInfo(\n convaiClient.characterId || undefined,\n convaiClient.apiKey || undefined,\n convaiClient.authToken || undefined,\n );\n\n // UI State\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState(\"\");\n const [isSettingsOpen, setIsSettingsOpen] = useState(false);\n const [isVoiceMode, setIsVoiceMode] = useState(defaultVoiceMode);\n const [isMuted, setIsMuted] = useState(false); // Character audio starts unmuted\n const [isVideoVisible, setIsVideoVisible] = useState(false);\n const [hasEnteredDefaultVoiceMode, setHasEnteredDefaultVoiceMode] = useState(false);\n\n const settingsButtonRef = useRef<HTMLButtonElement>(null);\n /** True after we have connected at least once; used to call reconnect() instead of connect() when opening after disconnect */\n const hasConnectedBeforeRef = useRef(false);\n\n // Character info from API (using client's stored values)\n const selectedCharacter = {\n id: convaiClient.characterId || \"unknown\",\n name: characterName,\n image: characterImage,\n };\n\n // Get bot status color for character image border\n const getBotStatusColor = () => {\n if (!convaiClient.state.isConnected) {\n return { color: \"#ef4444\", label: \"Disconnected\" }; // Red\n }\n if (convaiClient.state.isConnecting || !convaiClient.isBotReady) {\n return { color: \"#f59e0b\", label: \"Connecting\" }; // Yellow/Orange\n }\n if (convaiClient.state.isListening) {\n return { color: \"#3b82f6\", label: \"Listening\" }; // Blue - user speaking\n }\n return { color: \"#10b981\", label: \"Connected\" }; // Green\n };\n\n // Format chat messages for UI\n const formatMessages = (): RTCChatMessage[] => {\n // Filter to only show relevant message types and exclude empty messages\n const filteredMessages = convaiClient.chatMessages.filter(\n (msg) =>\n (msg.type === \"user-transcription\" ||\n msg.type === \"user-llm-text\" ||\n msg.type === \"bot-llm-text\" ||\n msg.type === \"bot-output\" ||\n msg.type === \"bot-emotion\") &&\n msg.content && // Ensure content exists\n msg.content.trim().length > 0, // Ensure content is not empty or just whitespace\n );\n\n return filteredMessages.map((msg) => ({\n id: msg.id,\n text: msg.content,\n isUser: msg.type.includes(\"user\"),\n timestamp: new Date(msg.timestamp).toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n }),\n sender: msg.type.includes(\"user\") ? \"You\" : selectedCharacter.name,\n showLogo: msg.type.includes(\"bot\"),\n }));\n };\n\n // Event Handlers\n const handleToggle = async () => {\n // Connect on first click if not already connected/connecting\n if (!convaiClient.state.isConnected && !convaiClient.state.isConnecting) {\n try {\n // Use reconnect when opening again after a disconnect (reuses stored config)\n if (hasConnectedBeforeRef.current && typeof convaiClient.reconnect === \"function\") {\n await convaiClient.reconnect();\n } else {\n await convaiClient.connect();\n }\n setIsOpen(true); // Open widget after successful connection\n } catch (error) {\n console.error(\"Failed to connect:\", error);\n }\n } else {\n // Just toggle open/close if already connected\n setIsOpen(!isOpen);\n }\n };\n const handleClose = () => {\n setIsOpen(false);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n };\n\n const handleSend = () => {\n if (inputValue.trim() && convaiClient.state.isConnected) {\n convaiClient.sendUserTextMessage(inputValue);\n setInputValue(\"\");\n }\n };\n\n const handleKeyPress = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n handleSend();\n }\n };\n\n\n const handleToggleMute = () => {\n const newMutedState = !isMuted;\n\n if (convaiClient.room?.state === \"connected\") {\n // LiveKit: mute/unmute remote participant audio tracks\n const remoteParticipants = Array.from(\n convaiClient.room.remoteParticipants.values(),\n );\n remoteParticipants.forEach((participant: any) => {\n participant.audioTrackPublications.forEach((publication: any) => {\n if (publication.track) {\n publication.track.setMuted(newMutedState);\n }\n });\n });\n } else {\n // WebSocket: mute/unmute the hidden <audio> element added by useConvaiClient\n const wsAudioEls = document.querySelectorAll<HTMLAudioElement>(\"audio[data-convai-ws]\");\n wsAudioEls.forEach((el) => { el.muted = newMutedState; });\n }\n\n setIsMuted(newMutedState);\n };\n\n const handleReset = async () => {\n setIsSettingsOpen(false);\n\n try {\n // Disconnect current session\n await convaiClient.disconnect();\n\n // Reset session ID so next connection creates a new session\n convaiClient.resetSession();\n\n // Reset UI states immediately\n setIsMuted(false);\n setIsVoiceMode(false);\n\n // Note: User is responsible for reconnecting after reset\n // They should call convaiClient.connect() themselves\n } catch (error) {\n console.error(\"Failed to reset:\", error);\n }\n };\n\n const handleDisconnect = async () => {\n setIsSettingsOpen(false);\n await convaiClient.disconnect();\n\n // Reset UI states immediately\n setIsMuted(false);\n setIsVoiceMode(false);\n };\n\n const handleToggleVideo = async () => {\n // Only toggle if connection type is video\n if (convaiClient.connectionType !== \"video\") {\n console.warn(\"Video capability requires connection type to be 'video'\");\n return;\n }\n\n if (convaiClient.isVideoEnabled) {\n await convaiClient.videoControls.disableVideo();\n } else {\n await convaiClient.videoControls.enableVideo();\n }\n };\n\n const handleToggleScreenShare = async () => {\n await convaiClient.screenShareControls.toggleScreenShare();\n };\n\n const handleSettingsToggle = () => {\n setIsSettingsOpen(!isSettingsOpen);\n };\n\n // Remember that we have connected at least once (so we use reconnect() next time after disconnect)\n useEffect(() => {\n if (convaiClient.state.isConnected) {\n hasConnectedBeforeRef.current = true;\n }\n }, [convaiClient.state.isConnected]);\n\n // Auto-collapse when disconnected\n useEffect(() => {\n if (!convaiClient.state.isConnected && !convaiClient.state.isConnecting) {\n if (isOpen) {\n setIsOpen(false);\n }\n // Reset UI states on disconnect\n setIsMuted(false); // Reset character mute\n setIsVoiceMode(false); // Reset voice mode\n setHasEnteredDefaultVoiceMode(false); // Reset flag so voice mode can be entered again on reconnect\n }\n }, [convaiClient.state.isConnected, convaiClient.state.isConnecting, isOpen]);\n\n // Sync video visibility with video controls state\n useEffect(() => {\n setIsVideoVisible(convaiClient.isVideoEnabled);\n }, [convaiClient.isVideoEnabled]);\n\n // Ensure microphone is muted when not in voice mode\n useEffect(() => {\n const ensureMicState = async () => {\n if (!isVoiceMode && !convaiClient.isAudioMuted) {\n // Mute microphone when in text mode\n await convaiClient.audioControls.muteAudio();\n }\n };\n ensureMicState();\n }, [isVoiceMode, convaiClient]);\n\n // Handle default voice mode when widget opens (only once)\n useEffect(() => {\n if (\n isOpen &&\n defaultVoiceMode &&\n convaiClient.state.isConnected &&\n !hasEnteredDefaultVoiceMode &&\n !isVoiceMode\n ) {\n const enterVoiceMode = async () => {\n try {\n await convaiClient.audioControls.unmuteAudio();\n setIsVoiceMode(true);\n setHasEnteredDefaultVoiceMode(true);\n } catch (error) {\n console.error(\"Failed to enter voice mode:\", error);\n }\n };\n enterVoiceMode();\n }\n }, [isOpen, defaultVoiceMode, convaiClient.state.isConnected, hasEnteredDefaultVoiceMode, isVoiceMode, convaiClient]);\n\n // Close settings when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (isSettingsOpen && settingsButtonRef.current) {\n const target = event.target as Node;\n const settingsButton = settingsButtonRef.current;\n if (!settingsButton.contains(target)) {\n const settingsTray = document.querySelector(\"[data-settings-tray]\");\n if (settingsTray && !settingsTray.contains(target)) {\n setIsSettingsOpen(false);\n }\n }\n }\n };\n\n if (isSettingsOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isSettingsOpen]);\n\n // Determine logo state and color\n const getLogoState = (): \"idle\" | \"connecting\" | \"connected\" => {\n if (convaiClient.state.isConnecting) return \"connecting\";\n if (convaiClient.state.isConnected) return \"connected\";\n return \"idle\";\n };\n\n const getLogoColor = () => {\n if (convaiClient.state.isConnected) return aeroTheme.colors.primary[500]; // Green when connected\n if (convaiClient.state.isConnecting) return aeroTheme.colors.primary[300]; // Lighter green when connecting\n return aeroTheme.colors.primary[500]; // Default green\n };\n\n // Audio renderer for LiveKit direct audio playback (not used in WebSocket mode)\n const audioRendererRef = useRef<AudioRenderer | null>(null);\n\n useEffect(() => {\n if (!convaiClient.room || convaiClient.room.state !== \"connected\") return;\n\n audioRendererRef.current = new AudioRenderer(convaiClient.room);\n\n return () => {\n if (audioRendererRef.current) {\n audioRendererRef.current.destroy();\n audioRendererRef.current = null;\n }\n };\n }, [convaiClient.room, convaiClient.state.isConnected]);\n\n return (\n <RoomContext.Provider value={convaiClient.room?.state === \"connected\" ? convaiClient.room : undefined}>\n\n {/* Convai Widget Chat UI - Always visible */}\n <ConvaiContainer\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n transition={{ duration: 0.4, ease: \"easeOut\" }}\n >\n <MorphingContainer\n onClick={!isOpen ? handleToggle : undefined}\n whileHover={!isOpen ? { scale: 1.05 } : undefined}\n whileTap={!isOpen ? { scale: 0.95 } : undefined}\n animate={{\n width: isOpen ? \"400px\" : \"4rem\",\n height: isOpen ? \"600px\" : \"4rem\",\n borderRadius: isOpen ? aeroTheme.borderRadius.xl : \"50%\",\n }}\n transition={{ duration: 0.3, ease: \"easeInOut\" }}\n style={{ cursor: !isOpen ? \"pointer\" : \"default\" }}\n >\n {/* Button Content - fades out when chat opens */}\n <ButtonContent\n animate={{\n opacity: isOpen ? 0 : 1,\n scale: isOpen ? 0.8 : 1,\n }}\n transition={{ duration: 0.3 }}\n >\n <Logo>\n <ConvaiLogo\n size=\"xl\"\n color={getLogoColor()}\n animate={convaiClient.state.isConnecting}\n state={getLogoState()}\n />\n </Logo>\n </ButtonContent>\n\n {/* Chat Content - fades in when chat opens (only show if connected) */}\n {convaiClient.state.isConnected && (\n <ChatContent\n animate={{\n opacity: isOpen ? 1 : 0,\n scale: isOpen ? 1 : 0.8,\n }}\n transition={{\n duration: 0.2,\n delay: isOpen ? 0.2 : 0,\n }}\n style={{\n pointerEvents: isOpen ? \"auto\" : \"none\",\n }}\n >\n {/* Header */}\n <Header\n initial={{ opacity: 0, y: -20 }}\n animate={{\n opacity: isOpen ? 1 : 0,\n y: isOpen ? 0 : -20,\n }}\n transition={{\n delay: isOpen ? 0.4 : 0,\n ...iosTransitions.modalSlide,\n }}\n style={{ \n pointerEvents: isOpen ? \"auto\" : \"none\",\n minHeight: \"3.5rem\", // Ensure consistent height\n }}\n >\n <CloseButton\n onClick={handleClose}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n transition={iosTransitions.snappy}\n style={{ cursor: \"pointer\", pointerEvents: \"auto\" }}\n >\n <ChevronDown size=\"md\" />\n </CloseButton>\n\n <Title>\n {selectedCharacter.image && !isVoiceMode && (\n <motion.img\n key=\"header-avatar\" // Use key instead of layoutId for independent animation\n src={selectedCharacter.image}\n alt={selectedCharacter.name}\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.8, opacity: 0 }}\n transition={iosTransitions.fadePop}\n style={{\n width: \"1.5rem\",\n height: \"1.5rem\",\n borderRadius: \"50%\",\n objectFit: \"cover\",\n marginRight: \"0.5rem\",\n border: `1.5px solid ${getBotStatusColor().color}`,\n boxShadow: `0 0 6px ${getBotStatusColor().color}40`,\n transition: \"all 0.3s ease\",\n }}\n />\n )}\n {selectedCharacter.name}\n <motion.button\n onClick={handleToggleMute}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n transition={iosTransitions.snappy}\n style={{\n cursor: \"pointer\",\n pointerEvents: \"auto\",\n background: \"transparent\",\n border: \"none\",\n boxShadow: \"none\",\n width: \"auto\",\n height: \"auto\",\n padding: \"0\",\n display: \"inline-flex\",\n alignItems: \"center\",\n marginLeft: \"0.5rem\",\n outline: \"none\",\n }}\n aria-label={isMuted ? \"Unmute\" : \"Mute\"}\n title={isMuted ? \"Unmute\" : \"Mute\"}\n >\n {isMuted ? (\n <IoVolumeMute size={16} color=\"#919EABA6\" />\n ) : (\n <IoVolumeHigh size={16} color=\"#0E7360\" />\n )}\n </motion.button>\n {isVoiceMode && (\n <span\n style={{\n fontSize: \"10px\",\n color: aeroTheme.colors.convai.light,\n fontWeight: 500,\n marginLeft: \"8px\",\n padding: \"2px 6px\",\n borderRadius: \"4px\",\n backgroundColor: aeroTheme.colors.convai.light + \"20\",\n }}\n >\n VOICE\n </span>\n )}\n {convaiClient.state.isSpeaking && (\n <motion.span\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.8, opacity: 0 }}\n transition={{ duration: 0.2 }}\n style={{\n fontSize: \"10px\",\n color: \"#10b981\",\n fontWeight: 600,\n marginLeft: \"8px\",\n padding: \"3px 8px\",\n borderRadius: \"6px\",\n backgroundColor: \"#10b98120\",\n border: \"1px solid #10b98140\",\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"4px\",\n }}\n >\n <motion.span\n animate={{\n scale: [1, 1.2, 1],\n opacity: [1, 0.7, 1],\n }}\n transition={{\n duration: 1.5,\n repeat: Infinity,\n ease: \"easeInOut\",\n }}\n style={{\n width: \"6px\",\n height: \"6px\",\n borderRadius: \"50%\",\n backgroundColor: \"#10b981\",\n display: \"inline-block\",\n }}\n />\n SPEAKING\n </motion.span>\n )}\n {convaiClient.state.isListening && !convaiClient.state.isSpeaking && (\n <motion.span\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.8, opacity: 0 }}\n transition={{ duration: 0.2 }}\n style={{\n fontSize: \"10px\",\n color: \"#3b82f6\",\n fontWeight: 600,\n marginLeft: \"8px\",\n padding: \"3px 8px\",\n borderRadius: \"6px\",\n backgroundColor: \"#3b82f620\",\n border: \"1px solid #3b82f640\",\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"4px\",\n }}\n >\n <motion.span\n animate={{\n scale: [1, 1.2, 1],\n opacity: [1, 0.7, 1],\n }}\n transition={{\n duration: 1.5,\n repeat: Infinity,\n ease: \"easeInOut\",\n }}\n style={{\n width: \"6px\",\n height: \"6px\",\n borderRadius: \"50%\",\n backgroundColor: \"#3b82f6\",\n display: \"inline-block\",\n }}\n />\n LISTENING\n </motion.span>\n )}\n </Title>\n\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.5rem\",\n position: \"relative\",\n }}\n >\n <SettingsButton\n ref={settingsButtonRef}\n onClick={handleSettingsToggle}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n transition={iosTransitions.snappy}\n style={{ cursor: \"pointer\" }}\n >\n <FiMoreVertical size={20} />\n </SettingsButton>\n </div>\n </Header>\n\n {/* Content Area */}\n <Content\n style={{\n background: isVoiceMode\n ? \"rgba(255, 255, 255, 0.98)\"\n : \"transparent\",\n filter: isSettingsOpen ? \"blur(3px)\" : \"none\",\n position: \"relative\",\n }}\n >\n {/* Connecting Overlay - shown until bot is ready */}\n <AnimatePresence>\n {convaiClient.state.isConnected && !convaiClient.isBotReady && (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.3 }}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n zIndex: 100,\n gap: \"1rem\",\n }}\n >\n <motion.div\n animate={{\n rotate: 360,\n }}\n transition={{\n duration: 2,\n repeat: Infinity,\n ease: \"linear\",\n }}\n >\n <ConvaiLogo\n size=\"xl\"\n color={aeroTheme.colors.convai.light}\n state=\"connecting\"\n />\n </motion.div>\n <motion.div\n animate={{\n opacity: [0.5, 1, 0.5],\n }}\n transition={{\n duration: 2,\n repeat: Infinity,\n ease: \"easeInOut\",\n }}\n style={{\n fontSize: \"14px\",\n fontWeight: 500,\n color: aeroTheme.colors.text.secondary,\n }}\n >\n Connecting to {selectedCharacter.name}...\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {isVoiceMode && (\n <VoiceModeOverlay\n isActive={!convaiClient.isAudioMuted}\n isTalking={convaiClient.state.isSpeaking}\n isListening={convaiClient.state.isListening}\n convaiClient={null}\n characterImage={characterImage || undefined}\n characterName={characterName || undefined}\n room={convaiClient.room?.state === \"connected\" ? convaiClient.room : null}\n />\n )}\n {!isVoiceMode && (\n <MessageList\n messages={formatMessages()}\n isStreaming={convaiClient.state.isSpeaking}\n forceToBottomToken={`${isOpen}-${convaiClient.chatMessages.length}`}\n />\n )}\n </Content>\n\n {/* Footer */}\n <Footer\n initial={{ y: 20, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n transition={{\n delay: 0.7,\n ...iosTransitions.modalSlide,\n }}\n style={{\n filter: isSettingsOpen ? \"blur(3px)\" : \"none\",\n transition: \"filter 0.2s ease\",\n display: \"flex\",\n gap: \"0.5rem\",\n alignItems: \"center\",\n position: \"relative\",\n justifyContent: isVoiceMode ? \"center\" : \"flex-start\",\n minHeight: \"3.5rem\", // Ensure consistent height\n }}\n >\n {/* In Voice Mode: Show only centered exit button */}\n {isVoiceMode ? (\n <motion.button\n key=\"voice-mode-exit\"\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.8, opacity: 0 }}\n transition={{\n duration: 0.3,\n ease: \"easeOut\",\n }}\n onClick={async () => {\n convaiClient.sendInterruptMessage();\n await convaiClient.audioControls.muteAudio();\n // WebSocket: tell server to stop processing audio so the\n // character doesn't prompt \"tap microphone to talk\" on silence.\n if (convaiClient.room?.state !== \"connected\") {\n convaiClient.toggleStt(false);\n }\n setIsVoiceMode(false);\n }}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n style={{\n cursor: \"pointer\",\n backgroundColor: \"#ef4444\",\n color: \"#ffffff\",\n border: \"none\",\n borderRadius: \"50%\",\n width: \"2.25rem\",\n height: \"2.25rem\",\n minWidth: \"2.25rem\",\n minHeight: \"2.25rem\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n padding: 0,\n outline: \"none\",\n }}\n aria-label=\"Exit Voice Mode\"\n title=\"Exit voice mode\"\n >\n <FiPhoneOff size={20} />\n </motion.button>\n ) : (\n <>\n {/* Input Container */}\n <InputContainer style={{ flex: 1, position: \"relative\" }}>\n {/* Input field */}\n <Input\n type=\"text\"\n placeholder=\"Conversation\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyPress={handleKeyPress}\n style={{ paddingRight: \"2.75rem\" }}\n />\n\n {/* Send/Voice Mode button */}\n <div\n style={{\n position: \"absolute\",\n right: \"0.375rem\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n width: \"2.25rem\",\n height: \"2.25rem\",\n minWidth: \"2.25rem\",\n minHeight: \"2.25rem\",\n flexShrink: 0,\n overflow: \"visible\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n zIndex: 2,\n }}\n >\n <AnimatePresence mode=\"wait\">\n {inputValue.length > 0 ? (\n <ActionButton\n key=\"send\"\n initial={{ y: \"100%\" }}\n animate={{ y: \"0%\" }}\n exit={{ y: \"-100%\" }}\n transition={{\n duration: 0.1,\n ease: \"linear\",\n }}\n onClick={handleSend}\n whileTap={{ scale: 0.9 }}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n cursor: \"pointer\",\n }}\n >\n <FiSend size={20} />\n </ActionButton>\n ) : (\n <motion.button\n key=\"voice\"\n initial={{ y: \"100%\" }}\n animate={{ y: \"0%\" }}\n exit={{ y: \"-100%\" }}\n transition={{\n duration: 0.1,\n ease: \"linear\",\n }}\n onClick={async () => {\n convaiClient.sendInterruptMessage();\n // WebSocket: re-enable server STT before unmuting.\n if (convaiClient.room?.state !== \"connected\") {\n convaiClient.toggleStt(true);\n }\n await convaiClient.audioControls.unmuteAudio();\n setIsVoiceMode(true);\n }}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n cursor: \"pointer\",\n backgroundColor: \"transparent\",\n color: aeroTheme.colors.text.primary,\n border: `1px solid ${aeroTheme.colors.neutral[300]}`,\n borderRadius: \"50%\",\n width: \"2.25rem\",\n height: \"2.25rem\",\n minWidth: \"2.25rem\",\n minHeight: \"2.25rem\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n padding: 0,\n outline: \"none\",\n }}\n aria-label=\"Enter Voice Mode\"\n title=\"Use voice mode\"\n >\n <PiWaveform size={20} />\n </motion.button>\n )}\n </AnimatePresence>\n </div>\n </InputContainer>\n </>\n )}\n </Footer>\n </ChatContent>\n )}\n </MorphingContainer>\n\n {/* Settings Tray - only show when connected */}\n {convaiClient.state.isConnected && (\n <SettingsTray\n isOpen={isSettingsOpen}\n onReset={handleReset}\n onDisconnect={handleDisconnect}\n onToggleVideo={\n convaiClient.connectionType === \"video\" && showVideo\n ? handleToggleVideo\n : undefined\n }\n isVideoVisible={isVideoVisible}\n onToggleScreenShare={\n convaiClient.connectionType === \"video\" && showScreenShare\n ? handleToggleScreenShare\n : undefined\n }\n isScreenShareActive={\n convaiClient.isScreenShareActive\n }\n />\n )}\n </ConvaiContainer>\n\n {/* Floating Video - only rendered in LiveKit mode (requires RoomContext) */}\n {convaiClient.room?.state === \"connected\" && (\n <FloatingVideo\n isVisible={isVideoVisible}\n onClose={async () => {\n await convaiClient.videoControls.disableVideo();\n }}\n mirror={true}\n />\n )}\n </RoomContext.Provider>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"ConvaiWidget.js","sourceRoot":"","sources":["../../../src/react/components/ConvaiWidget.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAe,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,cAAc,EAAS,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAK5C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAExE,qDAAqD;AACrD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,IAAI,EACJ,WAAW,EACX,MAAM,EACN,KAAK,EACL,WAAW,EACX,cAAc,EACd,OAAO,EACP,MAAM,EACN,cAAc,EACd,KAAK,EACL,YAAY,EACZ,SAAS,EACT,cAAc,EACd,UAAU,EACV,WAAW,GACZ,MAAM,cAAc,CAAC;AAEtB,4BAA4B;AAC5B,OAAO,EACL,WAAW,EACX,YAAY,EACZ,gBAAgB,EAEhB,aAAa,GACd,MAAM,cAAc,CAAC;AA6CtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EACxD,YAAY,EACZ,SAAS,GAAG,IAAI,EAChB,eAAe,GAAG,IAAI,EACtB,gBAAgB,GAAG,IAAI,EACvB,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,GACxB,EAAE,EAAE;IACH,MAAM,UAAU,GACd,OAAO,CAAC,uBAAuB,CAAC,IAAI,YAAY,CAAC,cAAc,KAAK,MAAM,CAAC;IAC7E,sEAAsE;IACtE,MAAM,EACJ,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,qBAAqB,EAC5B,SAAS,EAAE,yBAAyB,GACrC,GAAG,gBAAgB,CAClB,YAAY,CAAC,WAAW,IAAI,SAAS,EACrC,YAAY,CAAC,MAAM,IAAI,SAAS,EAChC,YAAY,CAAC,SAAS,IAAI,SAAS,CACpC,CAAC;IACF,MAAM,aAAa,GACjB,uBAAuB,EAAE,YAAY,IAAI,oBAAoB,CAAC;IAChE,MAAM,cAAc,GAClB,uBAAuB,EAAE,SAAS,IAAI,qBAAqB,CAAC;IAC9D,MAAM,kBAAkB,GAAG,uBAAuB;QAChD,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,yBAAyB,CAAC;IAE9B,WAAW;IACX,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAC5C,gBAAgB,IAAI,CAAC,UAAU,CAChC,CAAC;IACF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,iCAAiC;IAChF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,CAAC,0BAA0B,EAAE,6BAA6B,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpF,MAAM,iBAAiB,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAC1D,8HAA8H;IAC9H,MAAM,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,sFAAsF;IACtF,MAAM,uBAAuB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,6EAA6E;IAC7E,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAErC,wEAAwE;IACxE,2EAA2E;IAC3E,0BAA0B;IAC1B,MAAM,uBAAuB,GAC3B,OAAO,CAAC,uBAAuB,CAAC,IAAI,YAAY,CAAC,sBAAsB,CAAC;IAC1E,MAAM,WAAW,GACf,YAAY,CAAC,KAAK,CAAC,WAAW;QAC9B,CAAC,CAAC,uBAAuB,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;IAExD,yDAAyD;IACzD,MAAM,iBAAiB,GAAG;QACxB,EAAE,EAAE,YAAY,CAAC,WAAW,IAAI,SAAS;QACzC,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,cAAc;KACtB,CAAC;IAEF,kDAAkD;IAClD,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACpC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM;QAC5D,CAAC;QACD,IAAI,YAAY,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YAChE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,gBAAgB;QACpE,CAAC;QACD,IAAI,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACnC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,uBAAuB;QAC1E,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,QAAQ;IAC3D,CAAC,CAAC;IAEF,8BAA8B;IAC9B,MAAM,cAAc,GAAG,GAAqB,EAAE;QAC5C,wEAAwE;QACxE,MAAM,gBAAgB,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,CACvD,CAAC,GAAG,EAAE,EAAE,CACN,CAAC,GAAG,CAAC,IAAI,KAAK,oBAAoB;YAChC,GAAG,CAAC,IAAI,KAAK,eAAe;YAC5B,GAAG,CAAC,IAAI,KAAK,cAAc;YAC3B,GAAG,CAAC,IAAI,KAAK,YAAY;YACzB,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC;YAC7B,GAAG,CAAC,OAAO,IAAI,wBAAwB;YACvC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAChC,CAAC;QAEF,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACpC,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,OAAO;YACjB,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE;gBACxD,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,SAAS;aAClB,CAAC;YACF,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI;YAClE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;SACnC,CAAC,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,iBAAiB;IACjB,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;QAC9B,IAAI,uBAAuB,CAAC,OAAO,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QAED,6DAA6D;QAC7D,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YACxE,uBAAuB,CAAC,OAAO,GAAG,IAAI,CAAC;YACvC,IAAI,CAAC;gBACH,IAAI,uBAAuB,IAAI,YAAY,CAAC,sBAAsB,EAAE,CAAC;oBACnE,IAAI,CAAC,uBAAuB,EAAE,CAAC;wBAC7B,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;oBACJ,CAAC;oBACD,IAAI,CAAC,YAAY,CAAC,2BAA2B,EAAE,CAAC;wBAC9C,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;oBACJ,CAAC;oBACD,MAAM,WAAW,GAAG,MAAM,uBAAuB,EAAE,CAAC;oBACpD,IAAI,cAAc,CAAC,OAAO;wBAAE,OAAO;oBACnC,MAAM,YAAY,CAAC,2BAA2B,CAC5C,WAAW,EACX,4BAA4B,CAAC,2BAA2B,CAAC,CAC1D,CAAC;gBACJ,CAAC;qBAAM,IACL,qBAAqB,CAAC,OAAO;oBAC7B,OAAO,YAAY,CAAC,SAAS,KAAK,UAAU,EAC5C,CAAC;oBACD,MAAM,YAAY,CAAC,SAAS,EAAE,CAAC;gBACjC,CAAC;qBAAM,CAAC;oBACN,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC/B,CAAC;gBACD,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;oBAC3B,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;oBAChC,OAAO;gBACT,CAAC;gBACD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,0CAA0C;YAC7D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YAC7C,CAAC;oBAAS,CAAC;gBACT,uBAAuB,CAAC,OAAO,GAAG,KAAK,CAAC;YAC1C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,8CAA8C;YAC9C,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,SAAS,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,CAAsC,EAAE,EAAE;QACnE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,WAAW,EAAE,CAAC;YACrC,YAAY,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;YAC7C,aAAa,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,CAAsB,EAAE,EAAE;QAChD,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YACtB,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IAGF,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC;QAE/B,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,KAAK,WAAW,EAAE,CAAC;YAC7C,uDAAuD;YACvD,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CACnC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAC9C,CAAC;YACF,kBAAkB,CAAC,OAAO,CAAC,CAAC,WAAgB,EAAE,EAAE;gBAC9C,WAAW,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,WAAgB,EAAE,EAAE;oBAC9D,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;wBACtB,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,6EAA6E;YAC7E,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAmB,uBAAuB,CAAC,CAAC;YACxF,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,UAAU,CAAC,aAAa,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,CAAC;YACH,6BAA6B;YAC7B,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;YAEhC,4DAA4D;YAC5D,YAAY,CAAC,YAAY,EAAE,CAAC;YAE5B,8BAA8B;YAC9B,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,cAAc,CAAC,KAAK,CAAC,CAAC;YAEtB,yDAAyD;YACzD,qDAAqD;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;QAClC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QAEhC,8BAA8B;QAC9B,UAAU,CAAC,KAAK,CAAC,CAAC;QAClB,cAAc,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,IAAI,EAAE;QACnC,0CAA0C;QAC1C,IAAI,YAAY,CAAC,cAAc,KAAK,OAAO,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QAED,IAAI,YAAY,CAAC,cAAc,EAAE,CAAC;YAChC,MAAM,YAAY,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;QACjD,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,uBAAuB,GAAG,KAAK,IAAI,EAAE;QACzC,MAAM,YAAY,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,CAAC;IAC7D,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,GAAG,EAAE;QAChC,iBAAiB,CAAC,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC;QAC/B,OAAO,GAAG,EAAE;YACV,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAChC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,mGAAmG;IACnG,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACnC,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC;QACvC,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAErC,kCAAkC;IAClC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YACxE,IAAI,MAAM,EAAE,CAAC;gBACX,SAAS,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;YACD,gCAAgC;YAChC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB;YAC1C,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB;YAC1C,6BAA6B,CAAC,KAAK,CAAC,CAAC,CAAC,6DAA6D;QACrG,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAE9E,kDAAkD;IAClD,SAAS,CAAC,GAAG,EAAE;QACb,iBAAiB,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC;IAElC,oDAAoD;IACpD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;YAC9B,cAAc,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAE9B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;YAChC,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;gBAC/C,oCAAoC;gBACpC,MAAM,YAAY,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC;QACF,cAAc,EAAE,CAAC;IACnB,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAEhC,0DAA0D;IAC1D,SAAS,CAAC,GAAG,EAAE;QACb,IACE,MAAM;YACN,gBAAgB;YAChB,CAAC,UAAU;YACX,YAAY,CAAC,KAAK,CAAC,WAAW;YAC9B,CAAC,0BAA0B;YAC3B,CAAC,WAAW,EACZ,CAAC;YACD,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;gBAChC,IAAI,CAAC;oBACH,MAAM,YAAY,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;oBAC/C,cAAc,CAAC,IAAI,CAAC,CAAC;oBACrB,6BAA6B,CAAC,IAAI,CAAC,CAAC;gBACtC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC,CAAC;YACF,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,0BAA0B,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAElI,uCAAuC;IACvC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,kBAAkB,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC/C,IAAI,cAAc,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC;gBAChD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAc,CAAC;gBACpC,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC;gBACjD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACrC,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;oBACpE,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;wBACnD,iBAAiB,CAAC,KAAK,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,cAAc,EAAE,CAAC;YACnB,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAChE,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,iCAAiC;IACjC,MAAM,YAAY,GAAG,GAAwC,EAAE;QAC7D,IAAI,YAAY,CAAC,KAAK,CAAC,YAAY;YAAE,OAAO,YAAY,CAAC;QACzD,IAAI,YAAY,CAAC,KAAK,CAAC,WAAW;YAAE,OAAO,WAAW,CAAC;QACvD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,YAAY,CAAC,KAAK,CAAC,WAAW;YAAE,OAAO,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB;QACjG,IAAI,YAAY,CAAC,KAAK,CAAC,YAAY;YAAE,OAAO,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,gCAAgC;QAC3G,OAAO,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB;IACxD,CAAC,CAAC;IAEF,gFAAgF;IAChF,MAAM,gBAAgB,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAC;IAE5D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW;YAAE,OAAO;QAE1E,gBAAgB,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAEhE,OAAO,GAAG,EAAE;YACV,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBAC7B,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACnC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;YAClC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAExD,OAAO,CACL,MAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,aAGnG,MAAC,eAAe,IACd,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EACnC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EACjC,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,aAE9C,MAAC,iBAAiB,IAChB,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAC3C,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,EACjD,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,EAC/C,OAAO,EAAE;4BACP,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;4BAChC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;4BACjC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK;yBACzD,EACD,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,EAChD,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,aAGlD,KAAC,aAAa,IACZ,OAAO,EAAE;oCACP,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oCACvB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iCACxB,EACD,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,YAE7B,KAAC,IAAI,cACH,KAAC,UAAU,IACT,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,YAAY,EAAE,EACrB,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,YAAY,EACxC,KAAK,EAAE,YAAY,EAAE,GACrB,GACG,GACO,EAGf,YAAY,CAAC,KAAK,CAAC,WAAW,IAAI,CACjC,MAAC,WAAW,IACV,OAAO,EAAE;oCACP,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oCACvB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;iCACxB,EACD,UAAU,EAAE;oCACV,QAAQ,EAAE,GAAG;oCACb,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iCACxB,EACD,KAAK,EAAE;oCACL,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;iCACxC,aAGD,MAAC,MAAM,IACL,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAC/B,OAAO,EAAE;4CACP,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4CACvB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;yCACpB,EACD,UAAU,EAAE;4CACV,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4CACvB,GAAG,cAAc,CAAC,UAAU;yCAC7B,EACD,KAAK,EAAE;4CACL,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;4CACvC,SAAS,EAAE,QAAQ,EAAE,2BAA2B;yCACjD,aAED,KAAC,WAAW,IACV,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAC1B,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EACxB,UAAU,EAAE,cAAc,CAAC,MAAM,EACjC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,YAEnD,KAAC,WAAW,IAAC,IAAI,EAAC,IAAI,GAAG,GACb,EAEd,MAAC,KAAK,eACH,iBAAiB,CAAC,KAAK,IAAI,CAAC,WAAW,IAAI,CAC1C,KAAC,MAAM,CAAC,GAAG,IAET,GAAG,EAAE,iBAAiB,CAAC,KAAK,EAC5B,GAAG,EAAE,iBAAiB,CAAC,IAAI,EAC3B,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,EACnC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EACjC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,EAChC,UAAU,EAAE,cAAc,CAAC,OAAO,EAClC,KAAK,EAAE;4DACL,KAAK,EAAE,QAAQ;4DACf,MAAM,EAAE,QAAQ;4DAChB,YAAY,EAAE,KAAK;4DACnB,SAAS,EAAE,OAAO;4DAClB,WAAW,EAAE,QAAQ;4DACrB,MAAM,EAAE,eAAe,iBAAiB,EAAE,CAAC,KAAK,EAAE;4DAClD,SAAS,EAAE,WAAW,iBAAiB,EAAE,CAAC,KAAK,IAAI;4DACnD,UAAU,EAAE,eAAe;yDAC5B,IAhBG,eAAe,CAAC,wDAAwD;qDAiB5E,CACH,EACA,iBAAiB,CAAC,IAAI,EACvB,KAAC,MAAM,CAAC,MAAM,IACZ,OAAO,EAAE,gBAAgB,EACzB,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAC1B,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EACxB,UAAU,EAAE,cAAc,CAAC,MAAM,EACjC,KAAK,EAAE;4DACL,MAAM,EAAE,SAAS;4DACjB,aAAa,EAAE,MAAM;4DACrB,UAAU,EAAE,aAAa;4DACzB,MAAM,EAAE,MAAM;4DACd,SAAS,EAAE,MAAM;4DACjB,KAAK,EAAE,MAAM;4DACb,MAAM,EAAE,MAAM;4DACd,OAAO,EAAE,GAAG;4DACZ,OAAO,EAAE,aAAa;4DACtB,UAAU,EAAE,QAAQ;4DACpB,UAAU,EAAE,QAAQ;4DACpB,OAAO,EAAE,MAAM;yDAChB,gBACW,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EACvC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,YAEjC,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,YAAY,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,WAAW,GAAG,CAC7C,CAAC,CAAC,CAAC,CACF,KAAC,YAAY,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,SAAS,GAAG,CAC3C,GACa,EACf,WAAW,IAAI,CACd,eACE,KAAK,EAAE;4DACL,QAAQ,EAAE,MAAM;4DAChB,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;4DACpC,UAAU,EAAE,GAAG;4DACf,UAAU,EAAE,KAAK;4DACjB,OAAO,EAAE,SAAS;4DAClB,YAAY,EAAE,KAAK;4DACnB,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI;yDACtD,sBAGI,CACR,EACA,YAAY,CAAC,KAAK,CAAC,UAAU,IAAI,CAChC,MAAC,MAAM,CAAC,IAAI,IACV,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,EACnC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EACjC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,EAChC,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAC7B,KAAK,EAAE;4DACL,QAAQ,EAAE,MAAM;4DAChB,KAAK,EAAE,SAAS;4DAChB,UAAU,EAAE,GAAG;4DACf,UAAU,EAAE,KAAK;4DACjB,OAAO,EAAE,SAAS;4DAClB,YAAY,EAAE,KAAK;4DACnB,eAAe,EAAE,WAAW;4DAC5B,MAAM,EAAE,qBAAqB;4DAC7B,OAAO,EAAE,aAAa;4DACtB,UAAU,EAAE,QAAQ;4DACpB,GAAG,EAAE,KAAK;yDACX,aAED,KAAC,MAAM,CAAC,IAAI,IACV,OAAO,EAAE;oEACP,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;oEAClB,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;iEACrB,EACD,UAAU,EAAE;oEACV,QAAQ,EAAE,GAAG;oEACb,MAAM,EAAE,QAAQ;oEAChB,IAAI,EAAE,WAAW;iEAClB,EACD,KAAK,EAAE;oEACL,KAAK,EAAE,KAAK;oEACZ,MAAM,EAAE,KAAK;oEACb,YAAY,EAAE,KAAK;oEACnB,eAAe,EAAE,SAAS;oEAC1B,OAAO,EAAE,cAAc;iEACxB,GACD,gBAEU,CACf,EACA,YAAY,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,IAAI,CACnE,MAAC,MAAM,CAAC,IAAI,IACV,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,EACnC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EACjC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,EAChC,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAC7B,KAAK,EAAE;4DACL,QAAQ,EAAE,MAAM;4DAChB,KAAK,EAAE,SAAS;4DAChB,UAAU,EAAE,GAAG;4DACf,UAAU,EAAE,KAAK;4DACjB,OAAO,EAAE,SAAS;4DAClB,YAAY,EAAE,KAAK;4DACnB,eAAe,EAAE,WAAW;4DAC5B,MAAM,EAAE,qBAAqB;4DAC7B,OAAO,EAAE,aAAa;4DACtB,UAAU,EAAE,QAAQ;4DACpB,GAAG,EAAE,KAAK;yDACX,aAED,KAAC,MAAM,CAAC,IAAI,IACV,OAAO,EAAE;oEACP,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;oEAClB,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;iEACrB,EACD,UAAU,EAAE;oEACV,QAAQ,EAAE,GAAG;oEACb,MAAM,EAAE,QAAQ;oEAChB,IAAI,EAAE,WAAW;iEAClB,EACD,KAAK,EAAE;oEACL,KAAK,EAAE,KAAK;oEACZ,MAAM,EAAE,KAAK;oEACb,YAAY,EAAE,KAAK;oEACnB,eAAe,EAAE,SAAS;oEAC1B,OAAO,EAAE,cAAc;iEACxB,GACD,iBAEU,CACf,IACK,EAER,cACE,KAAK,EAAE;oDACL,OAAO,EAAE,MAAM;oDACf,UAAU,EAAE,QAAQ;oDACpB,GAAG,EAAE,QAAQ;oDACb,QAAQ,EAAE,UAAU;iDACrB,YAED,KAAC,cAAc,IACb,GAAG,EAAE,iBAAiB,EACtB,OAAO,EAAE,oBAAoB,EAC7B,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAC1B,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EACxB,UAAU,EAAE,cAAc,CAAC,MAAM,EACjC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YAE5B,KAAC,cAAc,IAAC,IAAI,EAAE,EAAE,GAAI,GACb,GACb,IACC,EAGT,MAAC,OAAO,IACN,KAAK,EAAE;4CACL,UAAU,EAAE,WAAW;gDACrB,CAAC,CAAC,2BAA2B;gDAC7B,CAAC,CAAC,aAAa;4CACjB,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;4CAC7C,QAAQ,EAAE,UAAU;yCACrB,aAGD,KAAC,eAAe,cACb,YAAY,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,CAC7D,MAAC,MAAM,CAAC,GAAG,IACT,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EACvB,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EACvB,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EACpB,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAC7B,KAAK,EAAE;wDACL,QAAQ,EAAE,UAAU;wDACpB,GAAG,EAAE,CAAC;wDACN,IAAI,EAAE,CAAC;wDACP,KAAK,EAAE,CAAC;wDACR,MAAM,EAAE,CAAC;wDACT,OAAO,EAAE,MAAM;wDACf,aAAa,EAAE,QAAQ;wDACvB,UAAU,EAAE,QAAQ;wDACpB,cAAc,EAAE,QAAQ;wDACxB,eAAe,EAAE,2BAA2B;wDAC5C,MAAM,EAAE,GAAG;wDACX,GAAG,EAAE,MAAM;qDACZ,aAED,KAAC,MAAM,CAAC,GAAG,IACT,OAAO,EAAE;gEACP,MAAM,EAAE,GAAG;6DACZ,EACD,UAAU,EAAE;gEACV,QAAQ,EAAE,CAAC;gEACX,MAAM,EAAE,QAAQ;gEAChB,IAAI,EAAE,QAAQ;6DACf,YAED,KAAC,UAAU,IACT,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EACpC,KAAK,EAAC,YAAY,GAClB,GACS,EACb,MAAC,MAAM,CAAC,GAAG,IACT,OAAO,EAAE;gEACP,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;6DACvB,EACD,UAAU,EAAE;gEACV,QAAQ,EAAE,CAAC;gEACX,MAAM,EAAE,QAAQ;gEAChB,IAAI,EAAE,WAAW;6DAClB,EACD,KAAK,EAAE;gEACL,QAAQ,EAAE,MAAM;gEAChB,UAAU,EAAE,GAAG;gEACf,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;6DACvC,+BAEc,iBAAiB,CAAC,IAAI,WAC1B,IACF,CACd,GACe,EAEjB,WAAW,IAAI,CACd,KAAC,gBAAgB,IACf,QAAQ,EAAE,CAAC,YAAY,CAAC,YAAY,EACpC,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,UAAU,EACxC,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,WAAW,EAC3C,YAAY,EAAE,IAAI,EAClB,cAAc,EAAE,cAAc,IAAI,SAAS,EAC3C,aAAa,EAAE,aAAa,IAAI,SAAS,EACzC,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GACzE,CACH,EACA,CAAC,WAAW,IAAI,CACf,KAAC,WAAW,IACV,QAAQ,EAAE,cAAc,EAAE,EAC1B,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,UAAU,EAC1C,kBAAkB,EAAE,GAAG,MAAM,IAAI,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,GACnE,CACH,IACO,EAGV,KAAC,MAAM,IACL,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAC9B,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAC7B,UAAU,EAAE;4CACV,KAAK,EAAE,GAAG;4CACV,GAAG,cAAc,CAAC,UAAU;yCAC7B,EACD,KAAK,EAAE;4CACL,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;4CAC7C,UAAU,EAAE,kBAAkB;4CAC9B,OAAO,EAAE,MAAM;4CACf,GAAG,EAAE,QAAQ;4CACb,UAAU,EAAE,QAAQ;4CACpB,QAAQ,EAAE,UAAU;4CACpB,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY;4CACrD,SAAS,EAAE,QAAQ,EAAE,2BAA2B;yCACjD,YAGA,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,MAAM,CAAC,MAAM,IAEZ,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,EACnC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EACjC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,EAChC,UAAU,EAAE;gDACV,QAAQ,EAAE,GAAG;gDACb,IAAI,EAAE,SAAS;6CAChB,EACD,OAAO,EAAE,KAAK,IAAI,EAAE;gDAClB,YAAY,CAAC,oBAAoB,EAAE,CAAC;gDACpC,MAAM,YAAY,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;gDAC7C,yDAAyD;gDACzD,gEAAgE;gDAChE,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,KAAK,WAAW,EAAE,CAAC;oDAC7C,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gDAChC,CAAC;gDACD,cAAc,CAAC,KAAK,CAAC,CAAC;4CACxB,CAAC,EACD,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAC1B,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EACxB,KAAK,EAAE;gDACL,MAAM,EAAE,SAAS;gDACjB,eAAe,EAAE,SAAS;gDAC1B,KAAK,EAAE,SAAS;gDAChB,MAAM,EAAE,MAAM;gDACd,YAAY,EAAE,KAAK;gDACnB,KAAK,EAAE,SAAS;gDAChB,MAAM,EAAE,SAAS;gDACjB,QAAQ,EAAE,SAAS;gDACnB,SAAS,EAAE,SAAS;gDACpB,OAAO,EAAE,MAAM;gDACf,UAAU,EAAE,QAAQ;gDACpB,cAAc,EAAE,QAAQ;gDACxB,UAAU,EAAE,CAAC;gDACb,OAAO,EAAE,CAAC;gDACV,OAAO,EAAE,MAAM;6CAChB,gBACU,iBAAiB,EAC5B,KAAK,EAAC,iBAAiB,YAEvB,KAAC,UAAU,IAAC,IAAI,EAAE,EAAE,GAAI,IAxCpB,iBAAiB,CAyCP,CACjB,CAAC,CAAC,CAAC,CACF,4BAEE,MAAC,cAAc,IAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,aAEtD,KAAC,KAAK,IACJ,IAAI,EAAC,MAAM,EACX,WAAW,EAAC,cAAc,EAC1B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,iBAAiB,EAC3B,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,CAAC,WAAW,EACtB,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,GAClC,EAGF,cACE,KAAK,EAAE;4DACL,QAAQ,EAAE,UAAU;4DACpB,KAAK,EAAE,UAAU;4DACjB,GAAG,EAAE,KAAK;4DACV,SAAS,EAAE,kBAAkB;4DAC7B,KAAK,EAAE,SAAS;4DAChB,MAAM,EAAE,SAAS;4DACjB,QAAQ,EAAE,SAAS;4DACnB,SAAS,EAAE,SAAS;4DACpB,UAAU,EAAE,CAAC;4DACb,QAAQ,EAAE,SAAS;4DACnB,OAAO,EAAE,MAAM;4DACf,UAAU,EAAE,QAAQ;4DACpB,cAAc,EAAE,QAAQ;4DACxB,MAAM,EAAE,CAAC;yDACV,YAED,KAAC,eAAe,IAAC,IAAI,EAAC,MAAM,YACzB,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CACrC,KAAC,YAAY,IAEX,OAAO,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EACpB,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,EACpB,UAAU,EAAE;oEACV,QAAQ,EAAE,GAAG;oEACb,IAAI,EAAE,QAAQ;iEACf,EACD,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,EACjD,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EACxB,KAAK,EAAE;oEACL,QAAQ,EAAE,UAAU;oEACpB,GAAG,EAAE,CAAC;oEACN,IAAI,EAAE,CAAC;oEACP,MAAM,EAAE,SAAS;iEAClB,YAED,KAAC,MAAM,IAAC,IAAI,EAAE,EAAE,GAAI,IAlBhB,MAAM,CAmBG,CAChB,CAAC,CAAC,CAAC,CACF,KAAC,MAAM,CAAC,MAAM,IAEZ,OAAO,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EACpB,IAAI,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,EACpB,UAAU,EAAE;oEACV,QAAQ,EAAE,GAAG;oEACb,IAAI,EAAE,QAAQ;iEACf,EACD,OAAO,EAAE,KAAK,IAAI,EAAE;oEAClB,YAAY,CAAC,oBAAoB,EAAE,CAAC;oEACpC,mDAAmD;oEACnD,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,KAAK,WAAW,EAAE,CAAC;wEAC7C,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oEAC/B,CAAC;oEACD,MAAM,YAAY,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;oEAC/C,cAAc,CAAC,IAAI,CAAC,CAAC;gEACvB,CAAC,EACD,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAC1B,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EACxB,KAAK,EAAE;oEACL,QAAQ,EAAE,UAAU;oEACpB,GAAG,EAAE,CAAC;oEACN,IAAI,EAAE,CAAC;oEACP,MAAM,EAAE,SAAS;oEACjB,eAAe,EAAE,aAAa;oEAC9B,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;oEACpC,MAAM,EAAE,aAAa,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oEACpD,YAAY,EAAE,KAAK;oEACnB,KAAK,EAAE,SAAS;oEAChB,MAAM,EAAE,SAAS;oEACjB,QAAQ,EAAE,SAAS;oEACnB,SAAS,EAAE,SAAS;oEACpB,OAAO,EAAE,MAAM;oEACf,UAAU,EAAE,QAAQ;oEACpB,cAAc,EAAE,QAAQ;oEACxB,UAAU,EAAE,CAAC;oEACb,OAAO,EAAE,CAAC;oEACV,OAAO,EAAE,MAAM;iEAChB,gBACU,kBAAkB,EAC7B,KAAK,EAAC,gBAAgB,YAEtB,KAAC,UAAU,IAAC,IAAI,EAAE,EAAE,GAAI,IA1CpB,OAAO,CA2CG,CACjB,GACe,GACd,IACS,GAChB,CACJ,GACM,IACG,CACf,IACiB,EAGnB,YAAY,CAAC,KAAK,CAAC,WAAW,IAAI,CACjC,KAAC,YAAY,IACX,MAAM,EAAE,cAAc,EACtB,OAAO,EACL,YAAY,CAAC,sBAAsB,IAAI,CAAC,uBAAuB;4BAC7D,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,WAAW,EAEjB,YAAY,EACV,YAAY,CAAC,sBAAsB,IAAI,CAAC,uBAAuB;4BAC7D,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,gBAAgB,EAEtB,aAAa,EACX,YAAY,CAAC,cAAc,KAAK,OAAO,IAAI,SAAS;4BAClD,CAAC,CAAC,iBAAiB;4BACnB,CAAC,CAAC,SAAS,EAEf,cAAc,EAAE,cAAc,EAC9B,mBAAmB,EACjB,YAAY,CAAC,cAAc,KAAK,OAAO,IAAI,eAAe;4BACxD,CAAC,CAAC,uBAAuB;4BACzB,CAAC,CAAC,SAAS,EAEf,mBAAmB,EACjB,YAAY,CAAC,mBAAmB,GAElC,CACH,IACe,EAGjB,YAAY,CAAC,IAAI,EAAE,KAAK,KAAK,WAAW,IAAI,CAC3C,KAAC,aAAa,IACZ,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,KAAK,IAAI,EAAE;oBAClB,MAAM,YAAY,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;gBAClD,CAAC,EACD,MAAM,EAAE,IAAI,GACZ,CACH,IACoB,CACxB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { useCallback, useState, useRef, useEffect } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { FiMoreVertical, FiMic, FiSend, FiPhoneOff } from \"react-icons/fi\";\nimport { IoVolumeMute, IoVolumeHigh } from \"react-icons/io5\";\nimport { PiWaveform } from \"react-icons/pi\";\nimport type {\n IConvaiClient,\n PublishedChatConnectOptions,\n} from \"../../core/types\";\nimport { RoomContext } from \"@livekit/components-react\";\nimport { useCharacterInfo } from \"../hooks/useCharacterInfo\";\nimport { AudioRenderer } from \"../../vanilla/AudioRenderer\";\nimport type { PublishedChatDescriptor } from \"../../embed/publicationApi\";\nimport { freshPublicationGrantOptions } from \"../../core/publishedChat\";\n\n// Import styled components and theme from rtc-widget\nimport {\n ConvaiContainer,\n MorphingContainer,\n ButtonContent,\n Logo,\n ChatContent,\n Header,\n Title,\n CloseButton,\n SettingsButton,\n Content,\n Footer,\n InputContainer,\n Input,\n ActionButton,\n aeroTheme,\n iosTransitions,\n ConvaiLogo,\n ChevronDown,\n} from \"./rtc-widget\";\n\n// Import message components\nimport {\n MessageList,\n SettingsTray,\n VoiceModeOverlay,\n RTCChatMessage,\n FloatingVideo,\n} from \"./rtc-widget\";\n\ninterface Character {\n id: string;\n name?: string;\n image?: string;\n}\n\ninterface ConvaiWidgetProps {\n /** Convai client instance (required) */\n convaiClient: IConvaiClient & { \n activity?: string;\n isAudioMuted: boolean;\n isVideoEnabled: boolean;\n isScreenShareActive: boolean;\n };\n /**\n * Show video toggle button in settings (default: true).\n * Only works if connection type is \"video\". If false, hides the video button.\n */\n showVideo?: boolean;\n /**\n * Show screen share toggle button in settings (default: true).\n * Only works if connection type is \"video\". If false, hides the screen share button.\n */\n showScreenShare?: boolean;\n /**\n * Start in voice mode by default when widget opens (default: true).\n * When true, the widget will open directly in voice mode with microphone enabled.\n */\n defaultVoiceMode?: boolean;\n /**\n * Mint a fresh single-use grant when a published-chat session is reopened.\n * Required when using this widget with connectWithPublicationGrant().\n */\n requestPublicationGrant?: () => Promise<string>;\n /** Core endpoint override used with requestPublicationGrant. */\n publishedChatConnectOptions?: PublishedChatConnectOptions;\n /** Public descriptor used to label a credential-free published session. */\n publishedChatDescriptor?: Pick<\n PublishedChatDescriptor,\n \"display_name\" | \"image_url\"\n >;\n}\n\n/**\n * ConvaiWidget - A consolidated chat widget component for real-time conversations\n *\n * This component provides a complete UI for interacting with Convai characters.\n * Connection configuration should be handled via useConvaiClient.connect().\n *\n * Features:\n * - Collapsed circular button with status indicator\n * - Expandable/collapsible chat interface\n * - Voice mode support\n * - Real-time message streaming\n * - Audio controls (mute/unmute)\n * - Settings tray with session reset\n * - Optional video and screen share (when connection type supports it)\n *\n * @param {ConvaiWidgetProps} props - Component props\n * @param {ConvaiClient} props.convaiClient - Convai client instance (required)\n * @param {boolean} props.showVideo - Show video toggle in settings (default: true)\n * @param {boolean} props.showScreenShare - Show screen share toggle in settings (default: true)\n * @param {boolean} props.defaultVoiceMode - Start in voice mode when widget opens (default: true)\n *\n * @example\n * ```tsx\n * function App() {\n * const convaiClient = useConvaiClient({\n * apiKey: 'your-api-key',\n * characterId: 'your-character-id',\n * enableVideo: true,\n * });\n *\n * return (\n * <ConvaiWidget\n * convaiClient={convaiClient}\n * showVideo={true}\n * showScreenShare={true}\n * />\n * );\n * }\n * ```\n */\nexport const ConvaiWidget: React.FC<ConvaiWidgetProps> = ({\n convaiClient,\n showVideo = true,\n showScreenShare = true,\n defaultVoiceMode = true,\n requestPublicationGrant,\n publishedChatConnectOptions,\n publishedChatDescriptor,\n}) => {\n const isTextOnly =\n Boolean(requestPublicationGrant) || convaiClient.connectionType === \"text\";\n // Fetch character information dynamically from client's stored values\n const {\n name: fetchedCharacterName,\n image: fetchedCharacterImage,\n isLoading: isFetchedCharacterLoading,\n } = useCharacterInfo(\n convaiClient.characterId || undefined,\n convaiClient.apiKey || undefined,\n convaiClient.authToken || undefined,\n );\n const characterName =\n publishedChatDescriptor?.display_name || fetchedCharacterName;\n const characterImage =\n publishedChatDescriptor?.image_url ?? fetchedCharacterImage;\n const isCharacterLoading = publishedChatDescriptor\n ? false\n : isFetchedCharacterLoading;\n\n // UI State\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState(\"\");\n const [isSettingsOpen, setIsSettingsOpen] = useState(false);\n const [isVoiceMode, setIsVoiceMode] = useState(\n defaultVoiceMode && !isTextOnly,\n );\n const [isMuted, setIsMuted] = useState(false); // Character audio starts unmuted\n const [isVideoVisible, setIsVideoVisible] = useState(false);\n const [hasEnteredDefaultVoiceMode, setHasEnteredDefaultVoiceMode] = useState(false);\n\n const settingsButtonRef = useRef<HTMLButtonElement>(null);\n /** True after we have connected at least once; used to call reconnect() instead of connect() when opening after disconnect */\n const hasConnectedBeforeRef = useRef(false);\n /** Prevent repeated open clicks from minting multiple one-time publication grants. */\n const isStartingConnectionRef = useRef(false);\n /** Avoid opening a room after this widget has been removed from the tree. */\n const isUnmountedRef = useRef(false);\n\n // Only published sessions wait for Core's bot-ready handshake. A normal\n // authenticated text session still uses the text-only layout, but can send\n // as soon as it connects.\n const requiresBotReadyForText =\n Boolean(requestPublicationGrant) || convaiClient.isPublishedChatSession;\n const canSendText =\n convaiClient.state.isConnected &&\n (!requiresBotReadyForText || convaiClient.isBotReady);\n\n // Character info from API (using client's stored values)\n const selectedCharacter = {\n id: convaiClient.characterId || \"unknown\",\n name: characterName,\n image: characterImage,\n };\n\n // Get bot status color for character image border\n const getBotStatusColor = () => {\n if (!convaiClient.state.isConnected) {\n return { color: \"#ef4444\", label: \"Disconnected\" }; // Red\n }\n if (convaiClient.state.isConnecting || !convaiClient.isBotReady) {\n return { color: \"#f59e0b\", label: \"Connecting\" }; // Yellow/Orange\n }\n if (convaiClient.state.isListening) {\n return { color: \"#3b82f6\", label: \"Listening\" }; // Blue - user speaking\n }\n return { color: \"#10b981\", label: \"Connected\" }; // Green\n };\n\n // Format chat messages for UI\n const formatMessages = (): RTCChatMessage[] => {\n // Filter to only show relevant message types and exclude empty messages\n const filteredMessages = convaiClient.chatMessages.filter(\n (msg) =>\n (msg.type === \"user-transcription\" ||\n msg.type === \"user-llm-text\" ||\n msg.type === \"bot-llm-text\" ||\n msg.type === \"bot-output\" ||\n msg.type === \"bot-emotion\") &&\n msg.content && // Ensure content exists\n msg.content.trim().length > 0, // Ensure content is not empty or just whitespace\n );\n\n return filteredMessages.map((msg) => ({\n id: msg.id,\n text: msg.content,\n isUser: msg.type.includes(\"user\"),\n timestamp: new Date(msg.timestamp).toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n }),\n sender: msg.type.includes(\"user\") ? \"You\" : selectedCharacter.name,\n showLogo: msg.type.includes(\"bot\"),\n }));\n };\n\n // Event Handlers\n const handleToggle = async () => {\n if (isStartingConnectionRef.current) {\n return;\n }\n\n // Connect on first click if not already connected/connecting\n if (!convaiClient.state.isConnected && !convaiClient.state.isConnecting) {\n isStartingConnectionRef.current = true;\n try {\n if (requestPublicationGrant || convaiClient.isPublishedChatSession) {\n if (!requestPublicationGrant) {\n throw new Error(\n \"Published chat widgets require requestPublicationGrant to start a new session\",\n );\n }\n if (!convaiClient.connectWithPublicationGrant) {\n throw new Error(\n \"This Convai client does not support published chat connections\",\n );\n }\n const launchToken = await requestPublicationGrant();\n if (isUnmountedRef.current) return;\n await convaiClient.connectWithPublicationGrant(\n launchToken,\n freshPublicationGrantOptions(publishedChatConnectOptions),\n );\n } else if (\n hasConnectedBeforeRef.current &&\n typeof convaiClient.reconnect === \"function\"\n ) {\n await convaiClient.reconnect();\n } else {\n await convaiClient.connect();\n }\n if (isUnmountedRef.current) {\n await convaiClient.disconnect();\n return;\n }\n setIsOpen(true); // Open widget after successful connection\n } catch (error) {\n console.error(\"Failed to connect:\", error);\n } finally {\n isStartingConnectionRef.current = false;\n }\n } else {\n // Just toggle open/close if already connected\n setIsOpen(!isOpen);\n }\n };\n const handleClose = () => {\n setIsOpen(false);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n };\n\n const handleSend = () => {\n if (inputValue.trim() && canSendText) {\n convaiClient.sendUserTextMessage(inputValue);\n setInputValue(\"\");\n }\n };\n\n const handleKeyPress = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n handleSend();\n }\n };\n\n\n const handleToggleMute = () => {\n const newMutedState = !isMuted;\n\n if (convaiClient.room?.state === \"connected\") {\n // LiveKit: mute/unmute remote participant audio tracks\n const remoteParticipants = Array.from(\n convaiClient.room.remoteParticipants.values(),\n );\n remoteParticipants.forEach((participant: any) => {\n participant.audioTrackPublications.forEach((publication: any) => {\n if (publication.track) {\n publication.track.setMuted(newMutedState);\n }\n });\n });\n } else {\n // WebSocket: mute/unmute the hidden <audio> element added by useConvaiClient\n const wsAudioEls = document.querySelectorAll<HTMLAudioElement>(\"audio[data-convai-ws]\");\n wsAudioEls.forEach((el) => { el.muted = newMutedState; });\n }\n\n setIsMuted(newMutedState);\n };\n\n const handleReset = async () => {\n setIsSettingsOpen(false);\n\n try {\n // Disconnect current session\n await convaiClient.disconnect();\n\n // Reset session ID so next connection creates a new session\n convaiClient.resetSession();\n\n // Reset UI states immediately\n setIsMuted(false);\n setIsVoiceMode(false);\n\n // Note: User is responsible for reconnecting after reset\n // They should call convaiClient.connect() themselves\n } catch (error) {\n console.error(\"Failed to reset:\", error);\n }\n };\n\n const handleDisconnect = async () => {\n setIsSettingsOpen(false);\n await convaiClient.disconnect();\n\n // Reset UI states immediately\n setIsMuted(false);\n setIsVoiceMode(false);\n };\n\n const handleToggleVideo = async () => {\n // Only toggle if connection type is video\n if (convaiClient.connectionType !== \"video\") {\n console.warn(\"Video capability requires connection type to be 'video'\");\n return;\n }\n\n if (convaiClient.isVideoEnabled) {\n await convaiClient.videoControls.disableVideo();\n } else {\n await convaiClient.videoControls.enableVideo();\n }\n };\n\n const handleToggleScreenShare = async () => {\n await convaiClient.screenShareControls.toggleScreenShare();\n };\n\n const handleSettingsToggle = () => {\n setIsSettingsOpen(!isSettingsOpen);\n };\n\n useEffect(() => {\n isUnmountedRef.current = false;\n return () => {\n isUnmountedRef.current = true;\n };\n }, []);\n\n // Remember that we have connected at least once (so we use reconnect() next time after disconnect)\n useEffect(() => {\n if (convaiClient.state.isConnected) {\n hasConnectedBeforeRef.current = true;\n }\n }, [convaiClient.state.isConnected]);\n\n // Auto-collapse when disconnected\n useEffect(() => {\n if (!convaiClient.state.isConnected && !convaiClient.state.isConnecting) {\n if (isOpen) {\n setIsOpen(false);\n }\n // Reset UI states on disconnect\n setIsMuted(false); // Reset character mute\n setIsVoiceMode(false); // Reset voice mode\n setHasEnteredDefaultVoiceMode(false); // Reset flag so voice mode can be entered again on reconnect\n }\n }, [convaiClient.state.isConnected, convaiClient.state.isConnecting, isOpen]);\n\n // Sync video visibility with video controls state\n useEffect(() => {\n setIsVideoVisible(convaiClient.isVideoEnabled);\n }, [convaiClient.isVideoEnabled]);\n\n // Ensure microphone is muted when not in voice mode\n useEffect(() => {\n if (isTextOnly && isVoiceMode) {\n setIsVoiceMode(false);\n }\n }, [isTextOnly, isVoiceMode]);\n\n useEffect(() => {\n const ensureMicState = async () => {\n if (!isVoiceMode && !convaiClient.isAudioMuted) {\n // Mute microphone when in text mode\n await convaiClient.audioControls.muteAudio();\n }\n };\n ensureMicState();\n }, [isVoiceMode, convaiClient]);\n\n // Handle default voice mode when widget opens (only once)\n useEffect(() => {\n if (\n isOpen &&\n defaultVoiceMode &&\n !isTextOnly &&\n convaiClient.state.isConnected &&\n !hasEnteredDefaultVoiceMode &&\n !isVoiceMode\n ) {\n const enterVoiceMode = async () => {\n try {\n await convaiClient.audioControls.unmuteAudio();\n setIsVoiceMode(true);\n setHasEnteredDefaultVoiceMode(true);\n } catch (error) {\n console.error(\"Failed to enter voice mode:\", error);\n }\n };\n enterVoiceMode();\n }\n }, [isOpen, defaultVoiceMode, isTextOnly, convaiClient.state.isConnected, hasEnteredDefaultVoiceMode, isVoiceMode, convaiClient]);\n\n // Close settings when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (isSettingsOpen && settingsButtonRef.current) {\n const target = event.target as Node;\n const settingsButton = settingsButtonRef.current;\n if (!settingsButton.contains(target)) {\n const settingsTray = document.querySelector(\"[data-settings-tray]\");\n if (settingsTray && !settingsTray.contains(target)) {\n setIsSettingsOpen(false);\n }\n }\n }\n };\n\n if (isSettingsOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isSettingsOpen]);\n\n // Determine logo state and color\n const getLogoState = (): \"idle\" | \"connecting\" | \"connected\" => {\n if (convaiClient.state.isConnecting) return \"connecting\";\n if (convaiClient.state.isConnected) return \"connected\";\n return \"idle\";\n };\n\n const getLogoColor = () => {\n if (convaiClient.state.isConnected) return aeroTheme.colors.primary[500]; // Green when connected\n if (convaiClient.state.isConnecting) return aeroTheme.colors.primary[300]; // Lighter green when connecting\n return aeroTheme.colors.primary[500]; // Default green\n };\n\n // Audio renderer for LiveKit direct audio playback (not used in WebSocket mode)\n const audioRendererRef = useRef<AudioRenderer | null>(null);\n\n useEffect(() => {\n if (!convaiClient.room || convaiClient.room.state !== \"connected\") return;\n\n audioRendererRef.current = new AudioRenderer(convaiClient.room);\n\n return () => {\n if (audioRendererRef.current) {\n audioRendererRef.current.destroy();\n audioRendererRef.current = null;\n }\n };\n }, [convaiClient.room, convaiClient.state.isConnected]);\n\n return (\n <RoomContext.Provider value={convaiClient.room?.state === \"connected\" ? convaiClient.room : undefined}>\n\n {/* Convai Widget Chat UI - Always visible */}\n <ConvaiContainer\n initial={{ opacity: 0, scale: 0.8 }}\n animate={{ opacity: 1, scale: 1 }}\n transition={{ duration: 0.4, ease: \"easeOut\" }}\n >\n <MorphingContainer\n onClick={!isOpen ? handleToggle : undefined}\n whileHover={!isOpen ? { scale: 1.05 } : undefined}\n whileTap={!isOpen ? { scale: 0.95 } : undefined}\n animate={{\n width: isOpen ? \"400px\" : \"4rem\",\n height: isOpen ? \"600px\" : \"4rem\",\n borderRadius: isOpen ? aeroTheme.borderRadius.xl : \"50%\",\n }}\n transition={{ duration: 0.3, ease: \"easeInOut\" }}\n style={{ cursor: !isOpen ? \"pointer\" : \"default\" }}\n >\n {/* Button Content - fades out when chat opens */}\n <ButtonContent\n animate={{\n opacity: isOpen ? 0 : 1,\n scale: isOpen ? 0.8 : 1,\n }}\n transition={{ duration: 0.3 }}\n >\n <Logo>\n <ConvaiLogo\n size=\"xl\"\n color={getLogoColor()}\n animate={convaiClient.state.isConnecting}\n state={getLogoState()}\n />\n </Logo>\n </ButtonContent>\n\n {/* Chat Content - fades in when chat opens (only show if connected) */}\n {convaiClient.state.isConnected && (\n <ChatContent\n animate={{\n opacity: isOpen ? 1 : 0,\n scale: isOpen ? 1 : 0.8,\n }}\n transition={{\n duration: 0.2,\n delay: isOpen ? 0.2 : 0,\n }}\n style={{\n pointerEvents: isOpen ? \"auto\" : \"none\",\n }}\n >\n {/* Header */}\n <Header\n initial={{ opacity: 0, y: -20 }}\n animate={{\n opacity: isOpen ? 1 : 0,\n y: isOpen ? 0 : -20,\n }}\n transition={{\n delay: isOpen ? 0.4 : 0,\n ...iosTransitions.modalSlide,\n }}\n style={{ \n pointerEvents: isOpen ? \"auto\" : \"none\",\n minHeight: \"3.5rem\", // Ensure consistent height\n }}\n >\n <CloseButton\n onClick={handleClose}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n transition={iosTransitions.snappy}\n style={{ cursor: \"pointer\", pointerEvents: \"auto\" }}\n >\n <ChevronDown size=\"md\" />\n </CloseButton>\n\n <Title>\n {selectedCharacter.image && !isVoiceMode && (\n <motion.img\n key=\"header-avatar\" // Use key instead of layoutId for independent animation\n src={selectedCharacter.image}\n alt={selectedCharacter.name}\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.8, opacity: 0 }}\n transition={iosTransitions.fadePop}\n style={{\n width: \"1.5rem\",\n height: \"1.5rem\",\n borderRadius: \"50%\",\n objectFit: \"cover\",\n marginRight: \"0.5rem\",\n border: `1.5px solid ${getBotStatusColor().color}`,\n boxShadow: `0 0 6px ${getBotStatusColor().color}40`,\n transition: \"all 0.3s ease\",\n }}\n />\n )}\n {selectedCharacter.name}\n <motion.button\n onClick={handleToggleMute}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n transition={iosTransitions.snappy}\n style={{\n cursor: \"pointer\",\n pointerEvents: \"auto\",\n background: \"transparent\",\n border: \"none\",\n boxShadow: \"none\",\n width: \"auto\",\n height: \"auto\",\n padding: \"0\",\n display: \"inline-flex\",\n alignItems: \"center\",\n marginLeft: \"0.5rem\",\n outline: \"none\",\n }}\n aria-label={isMuted ? \"Unmute\" : \"Mute\"}\n title={isMuted ? \"Unmute\" : \"Mute\"}\n >\n {isMuted ? (\n <IoVolumeMute size={16} color=\"#919EABA6\" />\n ) : (\n <IoVolumeHigh size={16} color=\"#0E7360\" />\n )}\n </motion.button>\n {isVoiceMode && (\n <span\n style={{\n fontSize: \"10px\",\n color: aeroTheme.colors.convai.light,\n fontWeight: 500,\n marginLeft: \"8px\",\n padding: \"2px 6px\",\n borderRadius: \"4px\",\n backgroundColor: aeroTheme.colors.convai.light + \"20\",\n }}\n >\n VOICE\n </span>\n )}\n {convaiClient.state.isSpeaking && (\n <motion.span\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.8, opacity: 0 }}\n transition={{ duration: 0.2 }}\n style={{\n fontSize: \"10px\",\n color: \"#10b981\",\n fontWeight: 600,\n marginLeft: \"8px\",\n padding: \"3px 8px\",\n borderRadius: \"6px\",\n backgroundColor: \"#10b98120\",\n border: \"1px solid #10b98140\",\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"4px\",\n }}\n >\n <motion.span\n animate={{\n scale: [1, 1.2, 1],\n opacity: [1, 0.7, 1],\n }}\n transition={{\n duration: 1.5,\n repeat: Infinity,\n ease: \"easeInOut\",\n }}\n style={{\n width: \"6px\",\n height: \"6px\",\n borderRadius: \"50%\",\n backgroundColor: \"#10b981\",\n display: \"inline-block\",\n }}\n />\n SPEAKING\n </motion.span>\n )}\n {convaiClient.state.isListening && !convaiClient.state.isSpeaking && (\n <motion.span\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.8, opacity: 0 }}\n transition={{ duration: 0.2 }}\n style={{\n fontSize: \"10px\",\n color: \"#3b82f6\",\n fontWeight: 600,\n marginLeft: \"8px\",\n padding: \"3px 8px\",\n borderRadius: \"6px\",\n backgroundColor: \"#3b82f620\",\n border: \"1px solid #3b82f640\",\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"4px\",\n }}\n >\n <motion.span\n animate={{\n scale: [1, 1.2, 1],\n opacity: [1, 0.7, 1],\n }}\n transition={{\n duration: 1.5,\n repeat: Infinity,\n ease: \"easeInOut\",\n }}\n style={{\n width: \"6px\",\n height: \"6px\",\n borderRadius: \"50%\",\n backgroundColor: \"#3b82f6\",\n display: \"inline-block\",\n }}\n />\n LISTENING\n </motion.span>\n )}\n </Title>\n\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.5rem\",\n position: \"relative\",\n }}\n >\n <SettingsButton\n ref={settingsButtonRef}\n onClick={handleSettingsToggle}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n transition={iosTransitions.snappy}\n style={{ cursor: \"pointer\" }}\n >\n <FiMoreVertical size={20} />\n </SettingsButton>\n </div>\n </Header>\n\n {/* Content Area */}\n <Content\n style={{\n background: isVoiceMode\n ? \"rgba(255, 255, 255, 0.98)\"\n : \"transparent\",\n filter: isSettingsOpen ? \"blur(3px)\" : \"none\",\n position: \"relative\",\n }}\n >\n {/* Connecting Overlay - shown until bot is ready */}\n <AnimatePresence>\n {convaiClient.state.isConnected && !convaiClient.isBotReady && (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.3 }}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(255, 255, 255, 0.95)\",\n zIndex: 100,\n gap: \"1rem\",\n }}\n >\n <motion.div\n animate={{\n rotate: 360,\n }}\n transition={{\n duration: 2,\n repeat: Infinity,\n ease: \"linear\",\n }}\n >\n <ConvaiLogo\n size=\"xl\"\n color={aeroTheme.colors.convai.light}\n state=\"connecting\"\n />\n </motion.div>\n <motion.div\n animate={{\n opacity: [0.5, 1, 0.5],\n }}\n transition={{\n duration: 2,\n repeat: Infinity,\n ease: \"easeInOut\",\n }}\n style={{\n fontSize: \"14px\",\n fontWeight: 500,\n color: aeroTheme.colors.text.secondary,\n }}\n >\n Connecting to {selectedCharacter.name}...\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {isVoiceMode && (\n <VoiceModeOverlay\n isActive={!convaiClient.isAudioMuted}\n isTalking={convaiClient.state.isSpeaking}\n isListening={convaiClient.state.isListening}\n convaiClient={null}\n characterImage={characterImage || undefined}\n characterName={characterName || undefined}\n room={convaiClient.room?.state === \"connected\" ? convaiClient.room : null}\n />\n )}\n {!isVoiceMode && (\n <MessageList\n messages={formatMessages()}\n isStreaming={convaiClient.state.isSpeaking}\n forceToBottomToken={`${isOpen}-${convaiClient.chatMessages.length}`}\n />\n )}\n </Content>\n\n {/* Footer */}\n <Footer\n initial={{ y: 20, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n transition={{\n delay: 0.7,\n ...iosTransitions.modalSlide,\n }}\n style={{\n filter: isSettingsOpen ? \"blur(3px)\" : \"none\",\n transition: \"filter 0.2s ease\",\n display: \"flex\",\n gap: \"0.5rem\",\n alignItems: \"center\",\n position: \"relative\",\n justifyContent: isVoiceMode ? \"center\" : \"flex-start\",\n minHeight: \"3.5rem\", // Ensure consistent height\n }}\n >\n {/* In Voice Mode: Show only centered exit button */}\n {isVoiceMode ? (\n <motion.button\n key=\"voice-mode-exit\"\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.8, opacity: 0 }}\n transition={{\n duration: 0.3,\n ease: \"easeOut\",\n }}\n onClick={async () => {\n convaiClient.sendInterruptMessage();\n await convaiClient.audioControls.muteAudio();\n // WebSocket: tell server to stop processing audio so the\n // character doesn't prompt \"tap microphone to talk\" on silence.\n if (convaiClient.room?.state !== \"connected\") {\n convaiClient.toggleStt(false);\n }\n setIsVoiceMode(false);\n }}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n style={{\n cursor: \"pointer\",\n backgroundColor: \"#ef4444\",\n color: \"#ffffff\",\n border: \"none\",\n borderRadius: \"50%\",\n width: \"2.25rem\",\n height: \"2.25rem\",\n minWidth: \"2.25rem\",\n minHeight: \"2.25rem\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n padding: 0,\n outline: \"none\",\n }}\n aria-label=\"Exit Voice Mode\"\n title=\"Exit voice mode\"\n >\n <FiPhoneOff size={20} />\n </motion.button>\n ) : (\n <>\n {/* Input Container */}\n <InputContainer style={{ flex: 1, position: \"relative\" }}>\n {/* Input field */}\n <Input\n type=\"text\"\n placeholder=\"Conversation\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyPress={handleKeyPress}\n disabled={!canSendText}\n style={{ paddingRight: \"2.75rem\" }}\n />\n\n {/* Send/Voice Mode button */}\n <div\n style={{\n position: \"absolute\",\n right: \"0.375rem\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n width: \"2.25rem\",\n height: \"2.25rem\",\n minWidth: \"2.25rem\",\n minHeight: \"2.25rem\",\n flexShrink: 0,\n overflow: \"visible\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n zIndex: 2,\n }}\n >\n <AnimatePresence mode=\"wait\">\n {inputValue.length > 0 || isTextOnly ? (\n <ActionButton\n key=\"send\"\n initial={{ y: \"100%\" }}\n animate={{ y: \"0%\" }}\n exit={{ y: \"-100%\" }}\n transition={{\n duration: 0.1,\n ease: \"linear\",\n }}\n onClick={handleSend}\n disabled={inputValue.length === 0 || !canSendText}\n whileTap={{ scale: 0.9 }}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n cursor: \"pointer\",\n }}\n >\n <FiSend size={20} />\n </ActionButton>\n ) : (\n <motion.button\n key=\"voice\"\n initial={{ y: \"100%\" }}\n animate={{ y: \"0%\" }}\n exit={{ y: \"-100%\" }}\n transition={{\n duration: 0.1,\n ease: \"linear\",\n }}\n onClick={async () => {\n convaiClient.sendInterruptMessage();\n // WebSocket: re-enable server STT before unmuting.\n if (convaiClient.room?.state !== \"connected\") {\n convaiClient.toggleStt(true);\n }\n await convaiClient.audioControls.unmuteAudio();\n setIsVoiceMode(true);\n }}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n cursor: \"pointer\",\n backgroundColor: \"transparent\",\n color: aeroTheme.colors.text.primary,\n border: `1px solid ${aeroTheme.colors.neutral[300]}`,\n borderRadius: \"50%\",\n width: \"2.25rem\",\n height: \"2.25rem\",\n minWidth: \"2.25rem\",\n minHeight: \"2.25rem\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n padding: 0,\n outline: \"none\",\n }}\n aria-label=\"Enter Voice Mode\"\n title=\"Use voice mode\"\n >\n <PiWaveform size={20} />\n </motion.button>\n )}\n </AnimatePresence>\n </div>\n </InputContainer>\n </>\n )}\n </Footer>\n </ChatContent>\n )}\n </MorphingContainer>\n\n {/* Settings Tray - only show when connected */}\n {convaiClient.state.isConnected && (\n <SettingsTray\n isOpen={isSettingsOpen}\n onReset={\n convaiClient.isPublishedChatSession && !requestPublicationGrant\n ? undefined\n : handleReset\n }\n onDisconnect={\n convaiClient.isPublishedChatSession && !requestPublicationGrant\n ? undefined\n : handleDisconnect\n }\n onToggleVideo={\n convaiClient.connectionType === \"video\" && showVideo\n ? handleToggleVideo\n : undefined\n }\n isVideoVisible={isVideoVisible}\n onToggleScreenShare={\n convaiClient.connectionType === \"video\" && showScreenShare\n ? handleToggleScreenShare\n : undefined\n }\n isScreenShareActive={\n convaiClient.isScreenShareActive\n }\n />\n )}\n </ConvaiContainer>\n\n {/* Floating Video - only rendered in LiveKit mode (requires RoomContext) */}\n {convaiClient.room?.state === \"connected\" && (\n <FloatingVideo\n isVisible={isVideoVisible}\n onClose={async () => {\n await convaiClient.videoControls.disableVideo();\n }}\n mirror={true}\n />\n )}\n </RoomContext.Provider>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsTray.d.ts","sourceRoot":"","sources":["../../../../../../src/react/components/rtc-widget/components/conviComponents/SettingsTray.tsx"],"names":[],"mappings":"AAYA,UAAU,iBAAiB;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"SettingsTray.d.ts","sourceRoot":"","sources":["../../../../../../src/react/components/rtc-widget/components/conviComponents/SettingsTray.tsx"],"names":[],"mappings":"AAYA,UAAU,iBAAiB;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC;AAED,eAAO,MAAM,YAAY,GAAI,6GAQ1B,iBAAiB,mDA2InB,CAAC"}
|
|
@@ -20,12 +20,12 @@ export const SettingsTray = ({ isOpen, isVideoVisible, isScreenShareActive, onRe
|
|
|
20
20
|
alignItems: "center",
|
|
21
21
|
padding: "8px",
|
|
22
22
|
gap: "4px",
|
|
23
|
-
}, children: [_jsxs(SettingsOption, { onClick: onReset, whileHover: { scale: 1.02 }, whileTap: { scale: 0.98 }, transition: iosTransitions.snappy, style: {
|
|
23
|
+
}, children: [onReset && (_jsxs(SettingsOption, { onClick: onReset, whileHover: { scale: 1.02 }, whileTap: { scale: 0.98 }, transition: iosTransitions.snappy, style: {
|
|
24
24
|
cursor: "pointer",
|
|
25
25
|
flexDirection: "column",
|
|
26
26
|
gap: "4px",
|
|
27
27
|
padding: "8px 12px",
|
|
28
|
-
}, "aria-label": "Reset", title: "Reset", children: [_jsx(LiaRedoAltSolid, { size: 18 }), _jsx("span", { style: { fontSize: "10px", fontWeight: 500 }, children: "Reset" })] }), onToggleVideo && (_jsxs(SettingsOption, { onClick: (e) => {
|
|
28
|
+
}, "aria-label": "Reset", title: "Reset", children: [_jsx(LiaRedoAltSolid, { size: 18 }), _jsx("span", { style: { fontSize: "10px", fontWeight: 500 }, children: "Reset" })] })), onToggleVideo && (_jsxs(SettingsOption, { onClick: (e) => {
|
|
29
29
|
e.stopPropagation();
|
|
30
30
|
onToggleVideo();
|
|
31
31
|
}, whileHover: { scale: 1.02 }, whileTap: { scale: 0.98 }, transition: iosTransitions.snappy, style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsTray.js","sourceRoot":"","sources":["../../../../../../src/react/components/rtc-widget/components/conviComponents/SettingsTray.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { AnimatePresence } from \"framer-motion\";\nimport { LiaRedoAltSolid } from \"react-icons/lia\";\nimport { IoVideocam, IoVideocamOff } from \"react-icons/io5\";\nimport { MdScreenShare, MdStopScreenShare } from \"react-icons/md\";\nimport { aeroTheme } from \"../../styles/theme\";\nimport { iosTransitions } from \"../../styles/framerConfig\";\nimport {\n SettingsTray as StyledSettingsTray,\n SettingsOption,\n} from \"../../styles/styledComponents\";\n\ninterface SettingsTrayProps {\n isOpen: boolean;\n isVideoVisible?: boolean;\n isScreenShareActive?: boolean;\n onReset: () => void;\n onDisconnect?: () => void;\n onToggleVideo?: () => void;\n onToggleScreenShare?: () => void;\n}\n\nexport const SettingsTray = ({\n isOpen,\n isVideoVisible,\n isScreenShareActive,\n onReset,\n onDisconnect,\n onToggleVideo,\n onToggleScreenShare,\n}: SettingsTrayProps) => {\n if (!isOpen) return null;\n\n return (\n <AnimatePresence>\n <StyledSettingsTray\n data-settings-tray\n initial={{ opacity: 0, y: -10, scale: 0.95 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: -10, scale: 0.95 }}\n transition={iosTransitions.fadePop}\n style={{\n position: \"absolute\",\n top: \"60px\",\n right: \"16px\",\n zIndex: 9999,\n }}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n {/* Horizontal Settings Row */}\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n padding: \"8px\",\n gap: \"4px\",\n }}\n >\n <SettingsOption\n onClick={onReset}\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n transition={iosTransitions.snappy}\n style={{\n cursor: \"pointer\",\n flexDirection: \"column\",\n gap: \"4px\",\n padding: \"8px 12px\",\n }}\n aria-label=\"Reset\"\n title=\"Reset\"\n >\n <LiaRedoAltSolid size={18} />\n <span style={{ fontSize: \"10px\", fontWeight: 500 }}>Reset</span>\n </SettingsOption>\n\n {/* Video Toggle Button */}\n {onToggleVideo && (\n <SettingsOption\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onToggleVideo();\n }}\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n transition={iosTransitions.snappy}\n style={{\n cursor: \"pointer\",\n flexDirection: \"column\",\n gap: \"4px\",\n padding: \"8px 12px\",\n backgroundColor: isVideoVisible\n ? \"rgba(16, 185, 129, 0.15)\"\n : \"transparent\",\n color: isVideoVisible\n ? \"#10b981\"\n : aeroTheme.colors.text.primary,\n }}\n aria-label={isVideoVisible ? \"Hide Video\" : \"Show Video\"}\n title={isVideoVisible ? \"Hide Video\" : \"Show Video\"}\n >\n {isVideoVisible ? <IoVideocam size={18} /> : <IoVideocamOff size={18} />}\n <span style={{ fontSize: \"10px\", fontWeight: 500 }}>Video</span>\n </SettingsOption>\n )}\n\n {/* Screen Share Toggle Button */}\n {onToggleScreenShare && (\n <SettingsOption\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onToggleScreenShare();\n }}\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n transition={iosTransitions.snappy}\n style={{\n cursor: \"pointer\",\n flexDirection: \"column\",\n gap: \"4px\",\n padding: \"8px 12px\",\n backgroundColor: isScreenShareActive\n ? \"rgba(16, 185, 129, 0.15)\"\n : \"transparent\",\n color: isScreenShareActive\n ? \"#10b981\"\n : aeroTheme.colors.text.primary,\n }}\n aria-label={isScreenShareActive ? \"Stop Sharing\" : \"Share Screen\"}\n title={isScreenShareActive ? \"Stop Sharing\" : \"Share Screen\"}\n >\n {isScreenShareActive ? <MdStopScreenShare size={18} /> : <MdScreenShare size={18} />}\n <span style={{ fontSize: \"10px\", fontWeight: 500 }}>Screen</span>\n </SettingsOption>\n )}\n\n {/* Disconnect Button */}\n {onDisconnect && (\n <SettingsOption\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onDisconnect();\n }}\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n transition={iosTransitions.snappy}\n style={{\n cursor: \"pointer\",\n flexDirection: \"column\",\n gap: \"4px\",\n padding: \"8px 12px\",\n backgroundColor: \"rgba(239, 68, 68, 0.1)\",\n color: \"#ef4444\",\n }}\n aria-label=\"Disconnect\"\n title=\"Disconnect\"\n >\n {/* Placeholder for icon - user will add their own */}\n <span style={{ fontSize: \"18px\" }}>⏻</span>\n <span style={{ fontSize: \"10px\", fontWeight: 500 }}>Disconnect</span>\n </SettingsOption>\n )}\n </div>\n </StyledSettingsTray>\n </AnimatePresence>\n );\n};\n\n"]}
|
|
1
|
+
{"version":3,"file":"SettingsTray.js","sourceRoot":"","sources":["../../../../../../src/react/components/rtc-widget/components/conviComponents/SettingsTray.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { AnimatePresence } from \"framer-motion\";\nimport { LiaRedoAltSolid } from \"react-icons/lia\";\nimport { IoVideocam, IoVideocamOff } from \"react-icons/io5\";\nimport { MdScreenShare, MdStopScreenShare } from \"react-icons/md\";\nimport { aeroTheme } from \"../../styles/theme\";\nimport { iosTransitions } from \"../../styles/framerConfig\";\nimport {\n SettingsTray as StyledSettingsTray,\n SettingsOption,\n} from \"../../styles/styledComponents\";\n\ninterface SettingsTrayProps {\n isOpen: boolean;\n isVideoVisible?: boolean;\n isScreenShareActive?: boolean;\n onReset?: () => void;\n onDisconnect?: () => void;\n onToggleVideo?: () => void;\n onToggleScreenShare?: () => void;\n}\n\nexport const SettingsTray = ({\n isOpen,\n isVideoVisible,\n isScreenShareActive,\n onReset,\n onDisconnect,\n onToggleVideo,\n onToggleScreenShare,\n}: SettingsTrayProps) => {\n if (!isOpen) return null;\n\n return (\n <AnimatePresence>\n <StyledSettingsTray\n data-settings-tray\n initial={{ opacity: 0, y: -10, scale: 0.95 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: -10, scale: 0.95 }}\n transition={iosTransitions.fadePop}\n style={{\n position: \"absolute\",\n top: \"60px\",\n right: \"16px\",\n zIndex: 9999,\n }}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n {/* Horizontal Settings Row */}\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n padding: \"8px\",\n gap: \"4px\",\n }}\n >\n {onReset && (\n <SettingsOption\n onClick={onReset}\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n transition={iosTransitions.snappy}\n style={{\n cursor: \"pointer\",\n flexDirection: \"column\",\n gap: \"4px\",\n padding: \"8px 12px\",\n }}\n aria-label=\"Reset\"\n title=\"Reset\"\n >\n <LiaRedoAltSolid size={18} />\n <span style={{ fontSize: \"10px\", fontWeight: 500 }}>Reset</span>\n </SettingsOption>\n )}\n\n {/* Video Toggle Button */}\n {onToggleVideo && (\n <SettingsOption\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onToggleVideo();\n }}\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n transition={iosTransitions.snappy}\n style={{\n cursor: \"pointer\",\n flexDirection: \"column\",\n gap: \"4px\",\n padding: \"8px 12px\",\n backgroundColor: isVideoVisible\n ? \"rgba(16, 185, 129, 0.15)\"\n : \"transparent\",\n color: isVideoVisible\n ? \"#10b981\"\n : aeroTheme.colors.text.primary,\n }}\n aria-label={isVideoVisible ? \"Hide Video\" : \"Show Video\"}\n title={isVideoVisible ? \"Hide Video\" : \"Show Video\"}\n >\n {isVideoVisible ? <IoVideocam size={18} /> : <IoVideocamOff size={18} />}\n <span style={{ fontSize: \"10px\", fontWeight: 500 }}>Video</span>\n </SettingsOption>\n )}\n\n {/* Screen Share Toggle Button */}\n {onToggleScreenShare && (\n <SettingsOption\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onToggleScreenShare();\n }}\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n transition={iosTransitions.snappy}\n style={{\n cursor: \"pointer\",\n flexDirection: \"column\",\n gap: \"4px\",\n padding: \"8px 12px\",\n backgroundColor: isScreenShareActive\n ? \"rgba(16, 185, 129, 0.15)\"\n : \"transparent\",\n color: isScreenShareActive\n ? \"#10b981\"\n : aeroTheme.colors.text.primary,\n }}\n aria-label={isScreenShareActive ? \"Stop Sharing\" : \"Share Screen\"}\n title={isScreenShareActive ? \"Stop Sharing\" : \"Share Screen\"}\n >\n {isScreenShareActive ? <MdStopScreenShare size={18} /> : <MdScreenShare size={18} />}\n <span style={{ fontSize: \"10px\", fontWeight: 500 }}>Screen</span>\n </SettingsOption>\n )}\n\n {/* Disconnect Button */}\n {onDisconnect && (\n <SettingsOption\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onDisconnect();\n }}\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n transition={iosTransitions.snappy}\n style={{\n cursor: \"pointer\",\n flexDirection: \"column\",\n gap: \"4px\",\n padding: \"8px 12px\",\n backgroundColor: \"rgba(239, 68, 68, 0.1)\",\n color: \"#ef4444\",\n }}\n aria-label=\"Disconnect\"\n title=\"Disconnect\"\n >\n {/* Placeholder for icon - user will add their own */}\n <span style={{ fontSize: \"18px\" }}>⏻</span>\n <span style={{ fontSize: \"10px\", fontWeight: 500 }}>Disconnect</span>\n </SettingsOption>\n )}\n </div>\n </StyledSettingsTray>\n </AnimatePresence>\n );\n};\n"]}
|
|
@@ -26,6 +26,8 @@ import type { ConvaiConfig, IConvaiClient, ChatMessage } from "../../core/types.
|
|
|
26
26
|
* ```
|
|
27
27
|
*/
|
|
28
28
|
export declare const useConvaiClient: (config?: ConvaiConfig) => IConvaiClient & {
|
|
29
|
+
/** This hook always supplies the publication connector, unlike generic adapters. */
|
|
30
|
+
connectWithPublicationGrant: NonNullable<IConvaiClient["connectWithPublicationGrant"]>;
|
|
29
31
|
activity: string;
|
|
30
32
|
chatMessages: ChatMessage[];
|
|
31
33
|
isAudioMuted: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConvaiClient.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useConvaiClient.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,WAAW,
|
|
1
|
+
{"version":3,"file":"useConvaiClient.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useConvaiClient.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EAEZ,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,eAAe,GAC1B,SAAS,YAAY,KACpB,aAAa,GAAG;IACjB,oFAAoF;IACpF,2BAA2B,EAAE,WAAW,CACtC,aAAa,CAAC,6BAA6B,CAAC,CAC7C,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,OAAO,CAAC;CAuP9B,CAAC"}
|
|
@@ -161,15 +161,20 @@ export const useConvaiClient = (config) => {
|
|
|
161
161
|
const reconnect = useCallback(async () => {
|
|
162
162
|
await client.reconnect();
|
|
163
163
|
}, [client]);
|
|
164
|
+
const connectWithPublicationGrant = useCallback(async (launchToken, options) => {
|
|
165
|
+
await client.connectWithPublicationGrant(launchToken, options);
|
|
166
|
+
}, [client]);
|
|
164
167
|
// Return client interface with React-friendly additions
|
|
165
168
|
return {
|
|
166
169
|
state,
|
|
167
170
|
connectionType: client.connectionType,
|
|
171
|
+
isPublishedChatSession: client.isPublishedChatSession,
|
|
168
172
|
...(client.apiKey && { apiKey: client.apiKey }),
|
|
169
173
|
...(client.authToken && { authToken: client.authToken }),
|
|
170
174
|
characterId: client.characterId,
|
|
171
175
|
characterVersion: client.characterVersion,
|
|
172
176
|
characterReference: client.characterReference,
|
|
177
|
+
requestTraceId: client.requestTraceId,
|
|
173
178
|
connect,
|
|
174
179
|
connectWithConnectionData: client.connectWithConnectionData.bind(client),
|
|
175
180
|
joinRoom: client.joinRoom.bind(client),
|
|
@@ -180,11 +185,14 @@ export const useConvaiClient = (config) => {
|
|
|
180
185
|
roomSession: client.roomSession,
|
|
181
186
|
characters: client.characters,
|
|
182
187
|
activeMembershipId: client.activeMembershipId,
|
|
188
|
+
connectWithPublicationGrant,
|
|
183
189
|
disconnect: client.disconnect.bind(client),
|
|
184
190
|
reconnect,
|
|
185
191
|
resetSession: client.resetSession.bind(client),
|
|
186
192
|
room: client.room,
|
|
187
193
|
sendUserTextMessage: client.sendUserTextMessage.bind(client),
|
|
194
|
+
sendActionResult: client.sendActionResult.bind(client),
|
|
195
|
+
sendActionResultAndWait: client.sendActionResultAndWait.bind(client),
|
|
188
196
|
sendTriggerMessage: client.sendTriggerMessage.bind(client),
|
|
189
197
|
sendInterruptMessage: client.sendInterruptMessage.bind(client),
|
|
190
198
|
resetIdleTimer: client.resetIdleTimer.bind(client),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConvaiClient.js","sourceRoot":"","sources":["../../../src/react/hooks/useConvaiClient.ts"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { ConvaiClient as CoreConvaiClient } from \"../../core\";\nimport type {\n ConvaiConfig,\n IConvaiClient,\n ChatMessage,\n} from \"../../core/types\";\n\n/**\n * React hook wrapper for ConvaiClient\n * Main hook for managing Convai client connection and functionality.\n *\n * Provides a complete interface for connecting to Convai's AI-powered voice assistants,\n * managing real-time audio/video conversations, and handling various message types.\n *\n * @param config - Optional configuration to store for later connection\n * @returns {ConvaiClient & { activity: string; chatMessages: ChatMessage[] }} Complete client interface with connection state, methods, and message history\n *\n * @example\n * ```tsx\n * function App() {\n * const convaiClient = useConvaiClient({\n * apiKey: 'your-api-key',\n * characterId: 'your-character-id',\n * endUserId: 'user-uuid', // Optional: enables memory & analytics\n * enableVideo: true,\n * });\n *\n * return (\n * <ConvaiWidget convaiClient={convaiClient} />\n * );\n * }\n * ```\n */\nexport const useConvaiClient = (\n config?: ConvaiConfig,\n): IConvaiClient & {\n activity: string;\n chatMessages: ChatMessage[];\n isAudioMuted: boolean;\n isVideoEnabled: boolean;\n isScreenShareActive: boolean;\n} => {\n // Create client instance once. The config is handed to the client as well\n // as kept in the hook, so config-derived surfaces such as\n // `characterVersions` are usable before the first connect().\n const [client] = useState(() => new CoreConvaiClient(config));\n\n // React state for UI updates\n const [state, setState] = useState(client.state);\n const [activity, setActivity] = useState<string>(\"Idle\");\n const [chatMessages, setChatMessages] = useState<ChatMessage[]>(\n client.chatMessages,\n );\n const [userTranscription, setUserTranscription] = useState<string>(\n client.userTranscription,\n );\n const [isSpeaking, setIsSpeaking] = useState<boolean>(false);\n const [isBotReady, setIsBotReady] = useState<boolean>(client.isBotReady);\n \n // Reactive states for control managers\n const [isAudioMuted, setIsAudioMuted] = useState<boolean>(\n client.audioControls.isAudioMuted\n );\n const [isVideoEnabled, setIsVideoEnabled] = useState<boolean>(\n client.videoControls.isVideoEnabled\n );\n const [isScreenShareActive, setIsScreenShareActive] = useState<boolean>(\n client.screenShareControls.isScreenShareActive\n );\n\n // Store config if provided\n const [storedConfig] = useState<ConvaiConfig | undefined>(config);\n\n // Setup event listeners\n useEffect(() => {\n // State change listener\n const unsubStateChange = client.on(\"stateChange\", (newState) => {\n setState(newState);\n\n // Update activity based on state (priority: speaking > listening > thinking > connected)\n if (!newState.isConnected) {\n setActivity(\"Disconnected\");\n } else if (newState.isConnecting) {\n setActivity(\"Connecting...\");\n } else if (newState.isSpeaking) {\n setActivity(\"Speaking\");\n } else if (newState.isListening) {\n setActivity(\"Listening\");\n } else if (newState.isThinking) {\n setActivity(\"Thinking\");\n } else {\n setActivity(\"Connected\");\n }\n });\n\n // Messages change listener\n const unsubMessagesChange = client.on(\"messagesChange\", (messages) => {\n setChatMessages([...messages]);\n });\n\n // User transcription change listener\n const unsubUserTranscription = client.on(\n \"userTranscriptionChange\",\n (transcription) => {\n setUserTranscription(transcription);\n },\n );\n\n // Speaking change listener\n const unsubSpeaking = client.on(\"speakingChange\", (speaking) => {\n setIsSpeaking(speaking);\n });\n\n // Bot ready listener\n const unsubBotReady = client.on(\"botReady\", () => {\n setIsBotReady(true);\n setActivity(\"Connected\");\n });\n\n // Connect listener\n const unsubConnect = client.on(\"connect\", () => {\n setState(client.state);\n });\n\n // Disconnect listener\n const unsubDisconnect = client.on(\"disconnect\", () => {\n setIsBotReady(false);\n setState(client.state);\n setActivity(\"Disconnected\");\n setChatMessages([]);\n // Reset control states on disconnect\n setIsAudioMuted(true);\n setIsVideoEnabled(false);\n setIsScreenShareActive(false);\n });\n\n // WebSocket transport: play bot audio track via a hidden <audio> element\n const wsAudioEl = document.createElement(\"audio\");\n wsAudioEl.autoplay = true;\n wsAudioEl.dataset.convaiWs = \"true\";\n document.body.appendChild(wsAudioEl);\n\n const unsubBotAudioTrack = client.on(\n \"botAudioTrack\",\n (track: MediaStreamTrack) => {\n wsAudioEl.srcObject = new MediaStream([track]);\n },\n );\n\n // Disconnect listener also clears WS audio\n const unsubDisconnectWsAudio = client.on(\"disconnect\", () => {\n wsAudioEl.srcObject = null;\n });\n\n // Audio controls state change listener\n const unsubAudioState = client.audioControls.on(\"audioStateChange\", (audioState: any) => {\n if (audioState.isAudioMuted !== undefined) {\n setIsAudioMuted(audioState.isAudioMuted);\n }\n });\n\n // Video controls state change listener\n const unsubVideoState = client.videoControls.on(\"videoStateChange\", (videoState: any) => {\n if (videoState.isVideoEnabled !== undefined) {\n setIsVideoEnabled(videoState.isVideoEnabled);\n }\n });\n\n // Screen share controls state change listener\n const unsubScreenShareState = client.screenShareControls.on(\"screenShareStateChange\", (screenShareState: any) => {\n if (screenShareState.isScreenShareActive !== undefined) {\n setIsScreenShareActive(screenShareState.isScreenShareActive);\n }\n });\n\n // Cleanup listeners on unmount\n return () => {\n unsubStateChange();\n unsubMessagesChange();\n unsubUserTranscription();\n unsubSpeaking();\n unsubBotReady();\n unsubConnect();\n unsubDisconnect();\n unsubBotAudioTrack();\n unsubDisconnectWsAudio();\n unsubAudioState();\n unsubVideoState();\n unsubScreenShareState();\n wsAudioEl.srcObject = null;\n wsAudioEl.remove();\n };\n }, [client]);\n\n // Create enhanced connect function that can use stored config\n const connect = useCallback(\n async (configOverride?: ConvaiConfig) => {\n const finalConfig = configOverride || storedConfig;\n\n if (!finalConfig) {\n throw new Error(\n \"No configuration provided. Pass config to useConvaiClient() or to connect()\",\n );\n }\n\n await client.connect(finalConfig);\n },\n [client, storedConfig],\n );\n\n // Create reconnect function wrapper\n const reconnect = useCallback(async () => {\n await client.reconnect();\n }, [client]);\n\n // Return client interface with React-friendly additions\n return {\n state,\n connectionType: client.connectionType,\n ...(client.apiKey && { apiKey: client.apiKey }),\n ...(client.authToken && { authToken: client.authToken }),\n characterId: client.characterId,\n characterVersion: client.characterVersion,\n characterReference: client.characterReference,\n connect,\n connectWithConnectionData: client.connectWithConnectionData.bind(client),\n joinRoom: client.joinRoom.bind(client),\n appendMessage: client.appendMessage.bind(client),\n toggleUsageUpdates: client.toggleUsageUpdates.bind(client),\n setInteractionTarget: client.setInteractionTarget.bind(client),\n updateCharacterRoster: client.updateCharacterRoster.bind(client),\n roomSession: client.roomSession,\n characters: client.characters,\n activeMembershipId: client.activeMembershipId,\n disconnect: client.disconnect.bind(client),\n reconnect,\n resetSession: client.resetSession.bind(client),\n room: client.room,\n sendUserTextMessage: client.sendUserTextMessage.bind(client),\n sendTriggerMessage: client.sendTriggerMessage.bind(client),\n sendInterruptMessage: client.sendInterruptMessage.bind(client),\n resetIdleTimer: client.resetIdleTimer.bind(client),\n updateTemplateKeys: client.updateTemplateKeys.bind(client),\n updateDynamicInfo: client.updateDynamicInfo.bind(client),\n updateContext: client.updateContext.bind(client),\n updateEmotion: client.updateEmotion.bind(client),\n visionStatus: client.visionStatus.bind(client),\n visionTrigger: client.visionTrigger.bind(client),\n respondModeUpdate: client.respondModeUpdate.bind(client),\n updateSceneMetadata: client.updateSceneMetadata.bind(client),\n activity,\n chatMessages,\n userTranscription,\n characterSessionId: client.characterSessionId,\n isBotReady,\n audioControls: client.audioControls,\n videoControls: client.videoControls,\n screenShareControls: client.screenShareControls,\n blendshapeQueue: client.blendshapeQueue,\n conversationSessionId: client.conversationSessionId,\n memoryManager: client.memoryManager,\n characterVersions: client.characterVersions,\n toggleTts: client.toggleTts.bind(client),\n toggleStt: client.toggleStt.bind(client),\n uploadFile: client.uploadFile.bind(client),\n on: client.on.bind(client),\n off: client.off.bind(client),\n // Reactive control states\n isAudioMuted,\n isVideoEnabled,\n isScreenShareActive,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"useConvaiClient.js","sourceRoot":"","sources":["../../../src/react/hooks/useConvaiClient.ts"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { ConvaiClient as CoreConvaiClient } from \"../../core\";\nimport type {\n ConvaiConfig,\n IConvaiClient,\n ChatMessage,\n PublishedChatConnectOptions,\n} from \"../../core/types\";\n\n/**\n * React hook wrapper for ConvaiClient\n * Main hook for managing Convai client connection and functionality.\n *\n * Provides a complete interface for connecting to Convai's AI-powered voice assistants,\n * managing real-time audio/video conversations, and handling various message types.\n *\n * @param config - Optional configuration to store for later connection\n * @returns {ConvaiClient & { activity: string; chatMessages: ChatMessage[] }} Complete client interface with connection state, methods, and message history\n *\n * @example\n * ```tsx\n * function App() {\n * const convaiClient = useConvaiClient({\n * apiKey: 'your-api-key',\n * characterId: 'your-character-id',\n * endUserId: 'user-uuid', // Optional: enables memory & analytics\n * enableVideo: true,\n * });\n *\n * return (\n * <ConvaiWidget convaiClient={convaiClient} />\n * );\n * }\n * ```\n */\nexport const useConvaiClient = (\n config?: ConvaiConfig,\n): IConvaiClient & {\n /** This hook always supplies the publication connector, unlike generic adapters. */\n connectWithPublicationGrant: NonNullable<\n IConvaiClient[\"connectWithPublicationGrant\"]\n >;\n activity: string;\n chatMessages: ChatMessage[];\n isAudioMuted: boolean;\n isVideoEnabled: boolean;\n isScreenShareActive: boolean;\n} => {\n // Create client instance once. The config is handed to the client as well\n // as kept in the hook, so config-derived surfaces such as\n // `characterVersions` are usable before the first connect().\n const [client] = useState(() => new CoreConvaiClient(config));\n\n // React state for UI updates\n const [state, setState] = useState(client.state);\n const [activity, setActivity] = useState<string>(\"Idle\");\n const [chatMessages, setChatMessages] = useState<ChatMessage[]>(\n client.chatMessages,\n );\n const [userTranscription, setUserTranscription] = useState<string>(\n client.userTranscription,\n );\n const [isSpeaking, setIsSpeaking] = useState<boolean>(false);\n const [isBotReady, setIsBotReady] = useState<boolean>(client.isBotReady);\n \n // Reactive states for control managers\n const [isAudioMuted, setIsAudioMuted] = useState<boolean>(\n client.audioControls.isAudioMuted\n );\n const [isVideoEnabled, setIsVideoEnabled] = useState<boolean>(\n client.videoControls.isVideoEnabled\n );\n const [isScreenShareActive, setIsScreenShareActive] = useState<boolean>(\n client.screenShareControls.isScreenShareActive\n );\n\n // Store config if provided\n const [storedConfig] = useState<ConvaiConfig | undefined>(config);\n\n // Setup event listeners\n useEffect(() => {\n // State change listener\n const unsubStateChange = client.on(\"stateChange\", (newState) => {\n setState(newState);\n\n // Update activity based on state (priority: speaking > listening > thinking > connected)\n if (!newState.isConnected) {\n setActivity(\"Disconnected\");\n } else if (newState.isConnecting) {\n setActivity(\"Connecting...\");\n } else if (newState.isSpeaking) {\n setActivity(\"Speaking\");\n } else if (newState.isListening) {\n setActivity(\"Listening\");\n } else if (newState.isThinking) {\n setActivity(\"Thinking\");\n } else {\n setActivity(\"Connected\");\n }\n });\n\n // Messages change listener\n const unsubMessagesChange = client.on(\"messagesChange\", (messages) => {\n setChatMessages([...messages]);\n });\n\n // User transcription change listener\n const unsubUserTranscription = client.on(\n \"userTranscriptionChange\",\n (transcription) => {\n setUserTranscription(transcription);\n },\n );\n\n // Speaking change listener\n const unsubSpeaking = client.on(\"speakingChange\", (speaking) => {\n setIsSpeaking(speaking);\n });\n\n // Bot ready listener\n const unsubBotReady = client.on(\"botReady\", () => {\n setIsBotReady(true);\n setActivity(\"Connected\");\n });\n\n // Connect listener\n const unsubConnect = client.on(\"connect\", () => {\n setState(client.state);\n });\n\n // Disconnect listener\n const unsubDisconnect = client.on(\"disconnect\", () => {\n setIsBotReady(false);\n setState(client.state);\n setActivity(\"Disconnected\");\n setChatMessages([]);\n // Reset control states on disconnect\n setIsAudioMuted(true);\n setIsVideoEnabled(false);\n setIsScreenShareActive(false);\n });\n\n // WebSocket transport: play bot audio track via a hidden <audio> element\n const wsAudioEl = document.createElement(\"audio\");\n wsAudioEl.autoplay = true;\n wsAudioEl.dataset.convaiWs = \"true\";\n document.body.appendChild(wsAudioEl);\n\n const unsubBotAudioTrack = client.on(\n \"botAudioTrack\",\n (track: MediaStreamTrack) => {\n wsAudioEl.srcObject = new MediaStream([track]);\n },\n );\n\n // Disconnect listener also clears WS audio\n const unsubDisconnectWsAudio = client.on(\"disconnect\", () => {\n wsAudioEl.srcObject = null;\n });\n\n // Audio controls state change listener\n const unsubAudioState = client.audioControls.on(\"audioStateChange\", (audioState: any) => {\n if (audioState.isAudioMuted !== undefined) {\n setIsAudioMuted(audioState.isAudioMuted);\n }\n });\n\n // Video controls state change listener\n const unsubVideoState = client.videoControls.on(\"videoStateChange\", (videoState: any) => {\n if (videoState.isVideoEnabled !== undefined) {\n setIsVideoEnabled(videoState.isVideoEnabled);\n }\n });\n\n // Screen share controls state change listener\n const unsubScreenShareState = client.screenShareControls.on(\"screenShareStateChange\", (screenShareState: any) => {\n if (screenShareState.isScreenShareActive !== undefined) {\n setIsScreenShareActive(screenShareState.isScreenShareActive);\n }\n });\n\n // Cleanup listeners on unmount\n return () => {\n unsubStateChange();\n unsubMessagesChange();\n unsubUserTranscription();\n unsubSpeaking();\n unsubBotReady();\n unsubConnect();\n unsubDisconnect();\n unsubBotAudioTrack();\n unsubDisconnectWsAudio();\n unsubAudioState();\n unsubVideoState();\n unsubScreenShareState();\n wsAudioEl.srcObject = null;\n wsAudioEl.remove();\n };\n }, [client]);\n\n // Create enhanced connect function that can use stored config\n const connect = useCallback(\n async (configOverride?: ConvaiConfig) => {\n const finalConfig = configOverride || storedConfig;\n\n if (!finalConfig) {\n throw new Error(\n \"No configuration provided. Pass config to useConvaiClient() or to connect()\",\n );\n }\n\n await client.connect(finalConfig);\n },\n [client, storedConfig],\n );\n\n // Create reconnect function wrapper\n const reconnect = useCallback(async () => {\n await client.reconnect();\n }, [client]);\n\n const connectWithPublicationGrant = useCallback(\n async (\n launchToken: string,\n options?: PublishedChatConnectOptions,\n ) => {\n await client.connectWithPublicationGrant(launchToken, options);\n },\n [client],\n );\n\n // Return client interface with React-friendly additions\n return {\n state,\n connectionType: client.connectionType,\n isPublishedChatSession: client.isPublishedChatSession,\n ...(client.apiKey && { apiKey: client.apiKey }),\n ...(client.authToken && { authToken: client.authToken }),\n characterId: client.characterId,\n characterVersion: client.characterVersion,\n characterReference: client.characterReference,\n requestTraceId: client.requestTraceId,\n connect,\n connectWithConnectionData: client.connectWithConnectionData.bind(client),\n joinRoom: client.joinRoom.bind(client),\n appendMessage: client.appendMessage.bind(client),\n toggleUsageUpdates: client.toggleUsageUpdates.bind(client),\n setInteractionTarget: client.setInteractionTarget.bind(client),\n updateCharacterRoster: client.updateCharacterRoster.bind(client),\n roomSession: client.roomSession,\n characters: client.characters,\n activeMembershipId: client.activeMembershipId,\n connectWithPublicationGrant,\n disconnect: client.disconnect.bind(client),\n reconnect,\n resetSession: client.resetSession.bind(client),\n room: client.room,\n sendUserTextMessage: client.sendUserTextMessage.bind(client),\n sendActionResult: client.sendActionResult.bind(client),\n sendActionResultAndWait: client.sendActionResultAndWait.bind(client),\n sendTriggerMessage: client.sendTriggerMessage.bind(client),\n sendInterruptMessage: client.sendInterruptMessage.bind(client),\n resetIdleTimer: client.resetIdleTimer.bind(client),\n updateTemplateKeys: client.updateTemplateKeys.bind(client),\n updateDynamicInfo: client.updateDynamicInfo.bind(client),\n updateContext: client.updateContext.bind(client),\n updateEmotion: client.updateEmotion.bind(client),\n visionStatus: client.visionStatus.bind(client),\n visionTrigger: client.visionTrigger.bind(client),\n respondModeUpdate: client.respondModeUpdate.bind(client),\n updateSceneMetadata: client.updateSceneMetadata.bind(client),\n activity,\n chatMessages,\n userTranscription,\n characterSessionId: client.characterSessionId,\n isBotReady,\n audioControls: client.audioControls,\n videoControls: client.videoControls,\n screenShareControls: client.screenShareControls,\n blendshapeQueue: client.blendshapeQueue,\n conversationSessionId: client.conversationSessionId,\n memoryManager: client.memoryManager,\n characterVersions: client.characterVersions,\n toggleTts: client.toggleTts.bind(client),\n toggleStt: client.toggleStt.bind(client),\n uploadFile: client.uploadFile.bind(client),\n on: client.on.bind(client),\n off: client.off.bind(client),\n // Reactive control states\n isAudioMuted,\n isVideoEnabled,\n isScreenShareActive,\n };\n};\n"]}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -3,6 +3,6 @@ export { ConvaiWidget } from './components/ConvaiWidget.js';
|
|
|
3
3
|
export * from './hooks/index.js';
|
|
4
4
|
export * from '../core/types.js';
|
|
5
5
|
export { getDisconnectReasonMessage } from '../core/types.js';
|
|
6
|
-
export { ConvaiClient } from '../core/index.js';
|
|
6
|
+
export { ActionResultAckError, ConvaiClient } from '../core/index.js';
|
|
7
7
|
export { RoomAudioRenderer as AudioRenderer, RoomContext as AudioContext } from '@livekit/components-react';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,cAAc,SAAS,CAAC;AAGxB,cAAc,eAAe,CAAC;AAG9B,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,cAAc,SAAS,CAAC;AAGxB,cAAc,eAAe,CAAC;AAG9B,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAG3D,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG7D,OAAO,EAAE,iBAAiB,IAAI,aAAa,EAAE,WAAW,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/react/index.js
CHANGED
|
@@ -9,7 +9,7 @@ export * from '../core/types.js';
|
|
|
9
9
|
// Re-export helper functions explicitly
|
|
10
10
|
export { getDisconnectReasonMessage } from '../core/types.js';
|
|
11
11
|
// Re-export core client for advanced usage
|
|
12
|
-
export { ConvaiClient } from '../core/index.js';
|
|
12
|
+
export { ActionResultAckError, ConvaiClient } from '../core/index.js';
|
|
13
13
|
// Re-export LiveKit components for convenience (backward compatible)
|
|
14
14
|
export { RoomAudioRenderer as AudioRenderer, RoomContext as AudioContext } from '@livekit/components-react';
|
|
15
15
|
//# sourceMappingURL=index.js.map
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,aAAa;AACb,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,wCAAwC;AACxC,cAAc,SAAS,CAAC;AAExB,uCAAuC;AACvC,cAAc,eAAe,CAAC;AAE9B,wCAAwC;AACxC,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAE3D,2CAA2C;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,aAAa;AACb,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,wCAAwC;AACxC,cAAc,SAAS,CAAC;AAExB,uCAAuC;AACvC,cAAc,eAAe,CAAC;AAE9B,wCAAwC;AACxC,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAE3D,2CAA2C;AAC3C,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE7D,qEAAqE;AACrE,OAAO,EAAE,iBAAiB,IAAI,aAAa,EAAE,WAAW,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC","sourcesContent":["// Main hook (backward compatible)\nexport { useConvaiClient } from './hooks/useConvaiClient';\n\n// Components\nexport { ConvaiWidget } from './components/ConvaiWidget';\n\n// Additional hooks (for advanced usage)\nexport * from './hooks';\n\n// Re-export core types for convenience\nexport * from '../core/types';\n\n// Re-export helper functions explicitly\nexport { getDisconnectReasonMessage } from '../core/types';\n\n// Re-export core client for advanced usage\nexport { ActionResultAckError, ConvaiClient } from '../core';\n\n// Re-export LiveKit components for convenience (backward compatible)\nexport { RoomAudioRenderer as AudioRenderer, RoomContext as AudioContext } from '@livekit/components-react';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConvaiWidget.d.ts","sourceRoot":"","sources":["../../src/vanilla/ConvaiWidget.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"ConvaiWidget.d.ts","sourceRoot":"","sources":["../../src/vanilla/ConvaiWidget.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EAEd,MAAM,SAAS,CAAC;AA4HjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,oBAAoB,GAC5B,aAAa,CA2wFf;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAE/D"}
|