|
1 | | -import { ChevronLeft, ChevronRight } from "lucide-react"; |
2 | | -import { AnimatePresence, motion } from "motion/react"; |
3 | | -import React, { useState } from "react"; |
| 1 | +import { ChevronLeft, ChevronRight } from 'lucide-react'; |
| 2 | +import { AnimatePresence, motion } from 'motion/react'; |
| 3 | +import React, { useState } from 'react'; |
4 | 4 |
|
5 | 5 | const SHOWCASE_TABS = [ |
6 | 6 | { |
7 | | - id: "files" as const, |
8 | | - label: "Files & Assets", |
| 7 | + id: 'files' as const, |
| 8 | + label: 'Files & Assets', |
9 | 9 | description: |
10 | | - "Centralized asset management for organizing high-fidelity media, brand guidelines, and storyboards.", |
11 | | - image: "/list-example.webp", |
| 10 | + 'Centralized asset management for organizing high-fidelity media, brand guidelines, and storyboards.', |
| 11 | + image: '/list-example.webp', |
12 | 12 | }, |
13 | 13 | { |
14 | | - id: "review" as const, |
15 | | - label: "Precise feedback", |
| 14 | + id: 'review' as const, |
| 15 | + label: 'Precise feedback', |
16 | 16 | description: |
17 | | - "Frame-accurate visual review canvas with coordinate-based annotations for clear creative direction.", |
18 | | - image: "/comment-example.webp", |
| 17 | + 'Frame-accurate visual review canvas with coordinate-based annotations for clear creative direction.', |
| 18 | + image: '/comment-example.webp', |
19 | 19 | }, |
20 | 20 | { |
21 | | - id: "agent" as const, |
22 | | - label: "Shumai Agent", |
| 21 | + id: 'agent' as const, |
| 22 | + label: 'Shumai Agent', |
23 | 23 | description: |
24 | | - "AI-powered co-production assistant for automated tasks and creative recommendations.", |
25 | | - image: "/agent-example.webp", |
| 24 | + 'AI-powered co-production assistant for automated tasks and creative recommendations.', |
| 25 | + image: '/agent-example.webp', |
26 | 26 | }, |
27 | 27 | ]; |
28 | 28 |
|
29 | 29 | export default function InteractiveShowcase() { |
30 | | - const [activeTab, setActiveTab] = useState<"files" | "review" | "agent">( |
31 | | - "files", |
32 | | - ); |
| 30 | + const [activeTab, setActiveTab] = useState<'files' | 'review' | 'agent'>('files'); |
33 | 31 |
|
34 | 32 | const currentIndex = SHOWCASE_TABS.findIndex((t) => t.id === activeTab); |
35 | 33 | const currentTabData = SHOWCASE_TABS[currentIndex]; |
36 | 34 |
|
37 | | - const handleTabChange = (tabId: "files" | "review" | "agent") => { |
| 35 | + const handleTabChange = (tabId: 'files' | 'review' | 'agent') => { |
38 | 36 | setActiveTab(tabId); |
39 | 37 | }; |
40 | 38 |
|
41 | 39 | const handlePrev = () => { |
42 | | - const nextIndex = |
43 | | - (currentIndex - 1 + SHOWCASE_TABS.length) % SHOWCASE_TABS.length; |
| 40 | + const nextIndex = (currentIndex - 1 + SHOWCASE_TABS.length) % SHOWCASE_TABS.length; |
44 | 41 | setActiveTab(SHOWCASE_TABS[nextIndex].id); |
45 | 42 | }; |
46 | 43 |
|
@@ -101,18 +98,14 @@ export default function InteractiveShowcase() { |
101 | 98 | > |
102 | 99 | <h3 |
103 | 100 | className={`text-base md:text-lg font-serif font-bold mb-2 transition-colors duration-300 ${ |
104 | | - isActive |
105 | | - ? "text-white" |
106 | | - : "text-white/30 group-hover:text-white/60" |
| 101 | + isActive ? 'text-white' : 'text-white/30 group-hover:text-white/60' |
107 | 102 | }`} |
108 | 103 | > |
109 | 104 | {tab.label} |
110 | 105 | </h3> |
111 | 106 | <p |
112 | 107 | className={`text-xs md:text-sm leading-relaxed transition-colors duration-300 ${ |
113 | | - isActive |
114 | | - ? "text-gray-300" |
115 | | - : "text-gray-300/20 group-hover:text-gray-300/50" |
| 108 | + isActive ? 'text-gray-300' : 'text-gray-300/20 group-hover:text-gray-300/50' |
116 | 109 | }`} |
117 | 110 | > |
118 | 111 | {tab.description} |
|
0 commit comments