Ezmary commited on
Commit
b1850b7
·
verified ·
1 Parent(s): d2f8ecf

Update src/components/logo/Logo.tsx

Browse files
Files changed (1) hide show
  1. src/components/logo/Logo.tsx +16 -17
src/components/logo/Logo.tsx CHANGED
@@ -3,46 +3,46 @@
3
  import React from 'react';
4
  import cn from "classnames";
5
  import { humanAiIcon } from '../icons';
6
- import './Logo.scss'; // <-- فایل استایل جدید را ایمپورت کنید
7
 
8
  type LogoProps = {
9
  isMini: boolean;
10
  isAi: boolean;
11
  isActive: boolean;
12
- speakingVolume?: number; // ولوم صدای AI برای انیمیشن موج
13
- isUserSpeaking?: boolean; // برای فعال کردن انیمیشن صحبت کاربر
14
  }
15
 
16
  export default function Logo({isAi, isActive, isMini, speakingVolume = 0, isUserSpeaking = false}: LogoProps) {
17
 
18
  if (!isActive) return null;
19
 
20
- // محاسبه مقیاس موج بر اساس حجم صدای AI
21
- // ضریب 1.5 برای محسوس‌تر شدن انیمیشن است
22
  const aiVoiceScale = 1 + (speakingVolume * 1.5);
23
 
 
 
 
 
 
24
  return (
25
  <div className={cn("w-fit flex items-center justify-center")}>
26
- {/* loads colors for tailwind */}
27
  <div className={"hidden bg-green-200 bg-green-300 bg-green-400 bg-blue-200 bg-blue-300 bg-blue-400 dark:bg-green-700 dark:bg-green-600 dark:bg-green-500 dark:bg-blue-700 dark:bg-blue-600 dark:bg-blue-500"}>
28
  color pre-loader
29
  </div>
30
 
31
  <div className={cn("relative", isMini ? "w-[80px] h-[80px]" : "w-[200px] h-[200px]")}>
32
  <>
33
- {/* این div موج اصلی انیمیشن صحبت کردن AI است */}
34
  <div
35
  className={cn(
36
  "absolute rounded-full opacity-50",
37
- "ai-speaking-ripple", // کلاس برای کنترل انیمیشن
38
  isAi ? "bg-green-200 dark:bg-green-700" : "bg-blue-200 dark:bg-blue-700",
39
  isMini ? "inset-[10px]" : "inset-[40px]",
40
  )}
41
- // متغیر CSS را برای کنترل مقیاس موج تنظیم می‌کنیم
42
  style={{ '--ai-voice-scale': aiVoiceScale } as React.CSSProperties}
43
  />
44
 
45
- {/* دایره‌های ثابت پس‌زمینه */}
46
  <div
47
  className={cn(
48
  "absolute inset-0 rounded-full opacity-50",
@@ -64,15 +64,14 @@ export default function Logo({isAi, isActive, isMini, speakingVolume = 0, isUser
64
  )}
65
  />
66
 
67
- {/* آیکون اصلی */}
68
- <div className={cn(
69
- "z-10 absolute flex items-center justify-center text-white",
70
- "inset-0"
71
- )}>
72
  {humanAiIcon({
73
  size: isMini ? 24 : 45,
74
- // اگر کاربر در حال صحبت است، کلاس مربوطه را اضافه کن
75
- className: cn({ 'user-speaking': isUserSpeaking })
 
 
 
76
  })}
77
  </div>
78
  </>
 
3
  import React from 'react';
4
  import cn from "classnames";
5
  import { humanAiIcon } from '../icons';
6
+ import './Logo.scss'; // این ایمپورت بسیار مهم است
7
 
8
  type LogoProps = {
9
  isMini: boolean;
10
  isAi: boolean;
11
  isActive: boolean;
12
+ speakingVolume?: number;
13
+ isUserSpeaking?: boolean;
14
  }
15
 
16
  export default function Logo({isAi, isActive, isMini, speakingVolume = 0, isUserSpeaking = false}: LogoProps) {
17
 
18
  if (!isActive) return null;
19
 
 
 
20
  const aiVoiceScale = 1 + (speakingVolume * 1.5);
21
 
22
+ // تعیین رنگ بخش‌های مختلف آیکون
23
+ // اگر کاربر صحبت می‌کند، آیکون انسان کمی روشن‌تر می‌شود تا متمایز باشد
24
+ const humanColor = isUserSpeaking ? "#FFFFFF" : "#E2E8F0"; // سفید و سفید-خاکستری
25
+ const aiColor = "#FFFFFF"; // همیشه سفید
26
+
27
  return (
28
  <div className={cn("w-fit flex items-center justify-center")}>
29
+ {/* Pre-loading Tailwind colors (no changes here) */}
30
  <div className={"hidden bg-green-200 bg-green-300 bg-green-400 bg-blue-200 bg-blue-300 bg-blue-400 dark:bg-green-700 dark:bg-green-600 dark:bg-green-500 dark:bg-blue-700 dark:bg-blue-600 dark:bg-blue-500"}>
31
  color pre-loader
32
  </div>
33
 
34
  <div className={cn("relative", isMini ? "w-[80px] h-[80px]" : "w-[200px] h-[200px]")}>
35
  <>
 
36
  <div
37
  className={cn(
38
  "absolute rounded-full opacity-50",
39
+ "ai-speaking-ripple", // کلاس انیمیشن
40
  isAi ? "bg-green-200 dark:bg-green-700" : "bg-blue-200 dark:bg-blue-700",
41
  isMini ? "inset-[10px]" : "inset-[40px]",
42
  )}
 
43
  style={{ '--ai-voice-scale': aiVoiceScale } as React.CSSProperties}
44
  />
45
 
 
46
  <div
47
  className={cn(
48
  "absolute inset-0 rounded-full opacity-50",
 
64
  )}
65
  />
66
 
67
+ <div className={cn("z-10 absolute flex items-center justify-center inset-0")}>
 
 
 
 
68
  {humanAiIcon({
69
  size: isMini ? 24 : 45,
70
+ // اگر کاربر صحبت می‌کند، کلاس انیمیشن اعمال می‌شود
71
+ className: cn({ 'user-speaking': isUserSpeaking }),
72
+ // رنگ‌ها را مستقیما پاس می‌دهیم
73
+ humanColor: humanColor,
74
+ aiColor: aiColor,
75
  })}
76
  </div>
77
  </>