Ezmary commited on
Commit
808f487
·
verified ·
1 Parent(s): a14d411

Update src/components/logo/Logo.scss

Browse files
Files changed (1) hide show
  1. src/components/logo/Logo.scss +56 -23
src/components/logo/Logo.scss CHANGED
@@ -1,27 +1,60 @@
1
- // src/components/logo/Logo.scss
2
-
3
- @keyframes user-pulse-animation {
4
- 0%, 100% {
5
- transform: scale(1);
6
- opacity: 0.8; // کمی محوتر در حالت عادی
7
- }
8
- 50% {
9
- transform: scale(1.1); // بزرگتر می‌شود
10
- opacity: 1; // کاملا واضح
11
- }
12
- }
13
 
14
- .user-speaking {
15
- .human-part {
16
- // انیمیشن را فقط روی بخش انسان اعمال می‌کنیم
17
- animation: user-pulse-animation 1.5s infinite ease-in-out;
18
- // مرکز چرخش را درست تنظیم می‌کنیم
19
- transform-origin: center;
20
- }
21
  }
22
 
23
- .ai-speaking-ripple {
24
- // متغیر --ai-voice-scale از React می‌آید
25
- transform: scale(var(--ai-voice-scale, 1));
26
- transition: transform 0.15s ease-out; // transition نرم‌تر
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  }
 
1
+ // src/components/logo/Logo.tsx
2
+
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
+ const humanColor = isUserSpeaking ? "#FFFFFF" : "#E2E8F0";
24
+ const aiColor = "#FFFFFF";
25
+
26
+ return (
27
+ <div className={cn("w-fit flex items-center justify-center")}>
28
+ <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"}>
29
+ color pre-loader
30
+ </div>
31
+
32
+ <div className={cn("relative", isMini ? "w-[80px] h-[80px]" : "w-[200px] h-[200px]")}>
33
+ <>
34
+ <div
35
+ className={cn(
36
+ "absolute rounded-full opacity-50",
37
+ "ai-speaking-ripple", // کلاس انیمیشن موج AI
38
+ isAi ? "bg-green-200 dark:bg-green-700" : "bg-blue-200 dark:bg-blue-700",
39
+ isMini ? "inset-[10px]" : "inset-[40px]",
40
+ )}
41
+ style={{ '--ai-voice-scale': aiVoiceScale } as React.CSSProperties}
42
+ />
43
+
44
+ <div className={cn("absolute inset-0 rounded-full opacity-50", isAi ? "bg-green-200 dark:bg-green-700" : "bg-blue-200 dark:bg-blue-700")} />
45
+ <div className={cn("absolute rounded-full opacity-50", isAi ? "bg-green-300 dark:bg-green-600" : "bg-blue-300 dark:bg-blue-600", isMini ? "inset-[5px]" : "inset-[20px]")} />
46
+ <div className={cn("absolute rounded-full opacity-50", isAi ? "bg-green-400 dark:bg-green-500" : "bg-blue-400 dark:bg-blue-500", isMini ? "inset-[12px]" : "inset-[50px]")} />
47
+
48
+ <div className={cn("z-10 absolute flex items-center justify-center inset-0")}>
49
+ {humanAiIcon({
50
+ size: isMini ? 24 : 45,
51
+ className: cn({ 'user-speaking': isUserSpeaking }), // اعمال کلاس انیمیشن
52
+ humanColor: humanColor, // ارسال رنگ برای بخش انسان
53
+ aiColor: aiColor, // ارسال رنگ برای بخش ربات
54
+ })}
55
+ </div>
56
+ </>
57
+ </div>
58
+ </div>
59
+ );
60
  }