feat(empty-states): add undraw illustrations to empty state screens

Add brand-orange recolored SVG illustrations from undraw to five empty
states: sites list, dashboard chart, funnels, journeys, and behavior.
This commit is contained in:
Usman Baig
2026-03-23 15:23:26 +01:00
parent d6cef95c4b
commit 645e3e78ef
10 changed files with 209 additions and 12 deletions

View File

@@ -177,9 +177,11 @@ export default function FrustrationTable({
</>
) : (
<div className="h-full flex flex-col items-center justify-center text-center px-6 py-8 gap-4">
<div className="rounded-full bg-neutral-100 dark:bg-neutral-800 p-4">
<CursorClick className="w-8 h-8 text-neutral-500 dark:text-neutral-400" />
</div>
<img
src="/illustrations/blank-canvas.svg"
alt="No frustration signals"
className="w-44 h-auto mb-1"
/>
<h4 className="font-semibold text-neutral-900 dark:text-white">
No {title.toLowerCase()} detected
</h4>

View File

@@ -414,7 +414,12 @@ export default function Chart({
</div>
{!hasData || !hasAnyNonZero ? (
<div className="flex h-96 flex-col items-center justify-center gap-2">
<div className="flex h-96 flex-col items-center justify-center gap-3">
<img
src="/illustrations/no-data.svg"
alt="No data available"
className="w-48 h-auto mb-2"
/>
<p className="text-sm text-neutral-400 dark:text-neutral-500">
{!hasData ? 'No data for this period' : `No ${METRIC_CONFIGS.find((m) => m.key === metric)?.label.toLowerCase()} recorded`}
</p>

View File

@@ -556,9 +556,11 @@ export default function ColumnJourney({
if (!transitions.length) {
return (
<div className="h-[400px] flex flex-col items-center justify-center text-center px-6 py-8 gap-3">
<div className="rounded-full bg-neutral-100 dark:bg-neutral-800 p-4">
<TreeStructure className="w-8 h-8 text-neutral-500 dark:text-neutral-400" />
</div>
<img
src="/illustrations/journey.svg"
alt="No journey data"
className="w-52 h-auto mb-2"
/>
<h4 className="font-semibold text-neutral-900 dark:text-white">
No journey data yet
</h4>

View File

@@ -135,7 +135,15 @@ export default function SiteList({ sites, siteStats, loading, onDelete }: SiteLi
if (sites.length === 0) {
return (
<div className="rounded-lg border border-dashed border-neutral-300 dark:border-neutral-700 p-12 text-center">
<div className="rounded-2xl border border-dashed border-neutral-300 dark:border-neutral-700 p-12 text-center flex flex-col items-center">
<Image
src="/illustrations/setup-analytics.svg"
alt="Set up your first site"
width={280}
height={210}
className="mb-6"
unoptimized
/>
<h3 className="text-lg font-semibold text-neutral-900 dark:text-white">No sites yet</h3>
<p className="mt-2 text-sm text-neutral-500 dark:text-neutral-400 mb-4">Create your first site to get started.</p>
<Link href="/sites/new">