- {/* Voice Input with Tooltip */}
- {isSttAvailable && (
-
+
+
+ {/* Text Input Area with Controls */}
+
+
+ {/* Voice Input */}
+ {isSttAvailable && (
-
+
@@ -170,97 +160,87 @@ export const ChatInput: React.FC<{
+ )}
+
+ {/* Text Input Container */}
+
- )}
- {/* Text Input & Placeholder */}
-
-
-
-
-
+
+
>
)
diff --git a/apps/sim/app/chat/[subdomain]/components/input/voice-input.tsx b/apps/sim/app/chat/[subdomain]/components/input/voice-input.tsx
index 2eda962ca90..3092457ec07 100644
--- a/apps/sim/app/chat/[subdomain]/components/input/voice-input.tsx
+++ b/apps/sim/app/chat/[subdomain]/components/input/voice-input.tsx
@@ -43,6 +43,7 @@ interface VoiceInputProps {
isListening?: boolean
disabled?: boolean
large?: boolean
+ minimal?: boolean
}
export function VoiceInput({
@@ -50,6 +51,7 @@ export function VoiceInput({
isListening = false,
disabled = false,
large = false,
+ minimal = false,
}: VoiceInputProps) {
const [isSupported, setIsSupported] = useState(false)
@@ -68,6 +70,24 @@ export function VoiceInput({
return null
}
+ if (minimal) {
+ return (
+
+
+
+ )
+ }
+
if (large) {
return (
@@ -93,21 +113,22 @@ export function VoiceInput({
return (
- {/* Voice Button */}
+ {/* Voice Button - Now matches send button styling */}
-
+
+
)
diff --git a/apps/sim/app/chat/[subdomain]/components/voice-interface/components/particles.tsx b/apps/sim/app/chat/[subdomain]/components/voice-interface/components/particles.tsx
index 806f8be3efb..ab698f9be27 100644
--- a/apps/sim/app/chat/[subdomain]/components/voice-interface/components/particles.tsx
+++ b/apps/sim/app/chat/[subdomain]/components/voice-interface/components/particles.tsx
@@ -402,37 +402,37 @@ export function ParticlesVisualization({
avgLevel: number
) => {
if (isMuted) {
- // Muted: dim gray-blue
- uniforms.u_red.value = 0.4
- uniforms.u_green.value = 0.4
- uniforms.u_blue.value = 0.6
+ // Muted: dim purple-gray
+ uniforms.u_red.value = 0.25
+ uniforms.u_green.value = 0.1
+ uniforms.u_blue.value = 0.5
} else if (isProcessingInterruption) {
- // Interruption: bright orange/yellow
- uniforms.u_red.value = 1.0
- uniforms.u_green.value = 0.7
- uniforms.u_blue.value = 0.2
- } else if (isPlayingAudio) {
- // AI speaking: bright blue-purple
+ // Interruption: bright purple
uniforms.u_red.value = 0.6
- uniforms.u_green.value = 0.4
- uniforms.u_blue.value = 1.0
+ uniforms.u_green.value = 0.2
+ uniforms.u_blue.value = 0.9
+ } else if (isPlayingAudio) {
+ // AI speaking: brand purple (#701FFC)
+ uniforms.u_red.value = 0.44
+ uniforms.u_green.value = 0.12
+ uniforms.u_blue.value = 0.99
} else if (isListening && avgLevel > 10) {
- // User speaking: bright green-blue with intensity-based variation
+ // User speaking: lighter purple with intensity-based variation
const intensity = Math.min(avgLevel / 50, 1)
- uniforms.u_red.value = 0.2 + intensity * 0.3
- uniforms.u_green.value = 0.8 + intensity * 0.2
- uniforms.u_blue.value = 0.6 + intensity * 0.4
+ uniforms.u_red.value = 0.35 + intensity * 0.15
+ uniforms.u_green.value = 0.1 + intensity * 0.1
+ uniforms.u_blue.value = 0.8 + intensity * 0.2
} else if (isStreaming) {
- // AI thinking: pulsing purple
+ // AI thinking: pulsing brand purple
const pulse = (Math.sin(elapsedTime * 2) + 1) / 2
- uniforms.u_red.value = 0.7 + pulse * 0.3
- uniforms.u_green.value = 0.3
- uniforms.u_blue.value = 0.9 + pulse * 0.1
+ uniforms.u_red.value = 0.35 + pulse * 0.15
+ uniforms.u_green.value = 0.08 + pulse * 0.08
+ uniforms.u_blue.value = 0.95 + pulse * 0.05
} else {
- // Default idle: soft blue-purple
- uniforms.u_red.value = 0.8
- uniforms.u_green.value = 0.6
- uniforms.u_blue.value = 1.0
+ // Default idle: soft brand purple
+ uniforms.u_red.value = 0.4
+ uniforms.u_green.value = 0.15
+ uniforms.u_blue.value = 0.9
}
}