Files
stats/apps/start/src/components/selling-points.tsx
Carl-Gerhard Lindesvärd 81a7e5d62e feat: dashboard v2, esm, upgrades (#211)
* esm

* wip

* wip

* wip

* wip

* wip

* wip

* subscription notice

* wip

* wip

* wip

* fix envs

* fix: update docker build

* fix

* esm/types

* delete dashboard :D

* add patches to dockerfiles

* update packages + catalogs + ts

* wip

* remove native libs

* ts

* improvements

* fix redirects and fetching session

* try fix favicon

* fixes

* fix

* order and resize reportds within a dashboard

* improvements

* wip

* added userjot to dashboard

* fix

* add op

* wip

* different cache key

* improve date picker

* fix table

* event details loading

* redo onboarding completely

* fix login

* fix

* fix

* extend session, billing and improve bars

* fix

* reduce price on 10M
2025-10-16 12:27:44 +02:00

50 lines
1.3 KiB
TypeScript

import { motion } from 'framer-motion';
import type { LucideIcon } from 'lucide-react';
function SellingPointIcon({ icon: Icon }: { icon: LucideIcon }) {
return (
<div className="size-22 center-center rounded-xl bg-gradient-to-br from-green-500 to-emerald-600">
<Icon className="h-8 w-8 text-white" />
</div>
);
}
function SellingPoint({
title,
description,
bgImage,
}: {
title: string;
description: React.ReactNode;
bgImage: string;
}) {
return (
<div className="flex flex-col justify-center h-full p-8 select-none relative">
<img
src={bgImage}
className="absolute inset-0 w-full h-full object-cover"
/>
<div className="relative z-10 center-center col">
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.6 }}
>
<h2 className="text-6xl font-bold text-white drop-shadow-2xl drop-shadow-highlight mb-2">
{title}
</h2>
</motion.div>
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.6 }}
>
<p className="text-lg text-white/70 leading-relaxed">{description}</p>
</motion.div>
</div>
</div>
);
}
export { SellingPoint, SellingPointIcon };