prmbr-image-mksaas/src/app/[locale]/preview/features/twelve/page.tsx
javayhu 2b952c5a5f chore: remove outdated issues document and update image paths
- Deleted the `ISSUES.md` file as it contained outdated information.
- Updated image paths in various components to remove the `/images` prefix for consistency.
2025-04-05 16:58:01 +08:00

151 lines
5.8 KiB
TypeScript

'use client';
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from '@/components/ui/accordion';
import {
ChartBarIncreasingIcon,
Database,
Fingerprint,
IdCard,
} from 'lucide-react';
import Image from 'next/image';
import { useState } from 'react';
import { motion, AnimatePresence } from 'motion/react';
import { BorderBeam } from '@/components/magicui/border-beam';
export default function Features() {
type ImageKey = 'item-1' | 'item-2' | 'item-3' | 'item-4';
const [activeItem, setActiveItem] = useState<ImageKey>('item-1');
const images = {
'item-1': {
image: '/blocks/charts.png',
alt: 'Database visualization',
},
'item-2': {
image: '/blocks/music.png',
alt: 'Security authentication',
},
'item-3': {
image: '/blocks/mail2.png',
alt: 'Identity management',
},
'item-4': {
image: '/blocks/payments.png',
alt: 'Analytics dashboard',
},
};
return (
<section className="py-12 md:py-20 lg:py-32">
<div className="bg-linear-to-b absolute inset-0 -z-10 sm:inset-6 sm:rounded-b-3xl dark:block dark:to-[color-mix(in_oklab,var(--color-zinc-900)_75%,var(--color-background))]"></div>
<div className="mx-auto max-w-5xl space-y-8 px-6 md:space-y-16 lg:space-y-20 dark:[--color-border:color-mix(in_oklab,var(--color-white)_10%,transparent)]">
<div className="relative z-10 mx-auto max-w-2xl space-y-6 text-center">
<h2 className="text-balance text-4xl font-semibold lg:text-6xl">
The foundation for AI
</h2>
<p>
Lyra is evolving to be more than just the models. It supports an
entire to the APIs and platforms helping developers and businesses
innovate.
</p>
</div>
<div className="grid gap-12 sm:px-12 md:grid-cols-2 lg:gap-20 lg:px-0">
<Accordion
type="single"
value={activeItem}
onValueChange={(value) => setActiveItem(value as ImageKey)}
className="w-full"
>
<AccordionItem value="item-1">
<AccordionTrigger>
<div className="flex items-center gap-2 text-base">
<Database className="size-4" />
Database Visualization
</div>
</AccordionTrigger>
<AccordionContent>
Lyra is evolving to be more than just the models. It supports an
entire to the APIs and platforms helping developers and
businesses innovate.
</AccordionContent>
</AccordionItem>
<AccordionItem value="item-2">
<AccordionTrigger>
<div className="flex items-center gap-2 text-base">
<Fingerprint className="size-4" />
Advanced Authentication
</div>
</AccordionTrigger>
<AccordionContent>
Lyra is evolving to be more than just the models. It supports an
entire to the APIs and platforms helping developers and
businesses innovate.
</AccordionContent>
</AccordionItem>
<AccordionItem value="item-3">
<AccordionTrigger>
<div className="flex items-center gap-2 text-base">
<IdCard className="size-4" />
Identity Management
</div>
</AccordionTrigger>
<AccordionContent>
Lyra is evolving to be more than just the models. It supports an
entire to the APIs and platforms helping developers and
businesses innovate.
</AccordionContent>
</AccordionItem>
<AccordionItem value="item-4">
<AccordionTrigger>
<div className="flex items-center gap-2 text-base">
<ChartBarIncreasingIcon className="size-4" />
Analytics Dashboard
</div>
</AccordionTrigger>
<AccordionContent>
Lyra is evolving to be more than just the models. It supports an
entire to the APIs and platforms helping developers and
businesses innovate.
</AccordionContent>
</AccordionItem>
</Accordion>
<div className="bg-background relative flex overflow-hidden rounded-3xl border p-2">
<div className="w-15 absolute inset-0 right-0 ml-auto border-l bg-[repeating-linear-gradient(-45deg,var(--color-border),var(--color-border)_1px,transparent_1px,transparent_8px)]"></div>
<div className="aspect-76/59 bg-background relative w-[calc(3/4*100%+3rem)] rounded-2xl">
<AnimatePresence mode="wait">
<motion.div
key={`${activeItem}-id`}
initial={{ opacity: 0, y: 6, scale: 0.98 }}
animate={{ opacity: 1, y: 0, scale: 1 }}
exit={{ opacity: 0, y: 6, scale: 0.98 }}
transition={{ duration: 0.2 }}
className="size-full overflow-hidden rounded-2xl border bg-zinc-900 shadow-md"
>
<Image
src={images[activeItem].image}
className="size-full object-cover object-left-top dark:mix-blend-lighten"
alt={images[activeItem].alt}
width={1207}
height={929}
/>
</motion.div>
</AnimatePresence>
</div>
<BorderBeam
duration={6}
size={200}
className="from-transparent via-yellow-700 to-transparent dark:via-white/50"
/>
</div>
</div>
</div>
</section>
);
}