Some checks are pending
E2E / Playwright e2e (push) Waiting to run
- Refactored metadata for contacts, administration, and Ulticards pages to utilize dynamic app names and descriptions. - Introduced new product pages for Ultiai, Ultical, Ulticards, Ultidrive, Ultimail, and Ultimeet with appropriate metadata. - Enhanced layout components to ensure consistent styling and functionality across new product sections. - Updated various components to replace hardcoded labels with dynamic references to improve maintainability and consistency.
45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
import type { ReactNode } from "react"
|
|
import { cn } from "@/lib/utils"
|
|
import { LandingReveal } from "@/components/landing/landing-reveal"
|
|
|
|
export function ProductSectionHeading({
|
|
eyebrow,
|
|
title,
|
|
description,
|
|
accent,
|
|
}: {
|
|
eyebrow: string
|
|
title: ReactNode
|
|
description?: string
|
|
accent?: string
|
|
}) {
|
|
return (
|
|
<LandingReveal className="mx-auto flex max-w-2xl flex-col items-center gap-4 text-center">
|
|
<span
|
|
className={cn(
|
|
"rounded-full px-3.5 py-1 text-xs font-semibold uppercase tracking-wider",
|
|
!accent && "bg-[var(--landing-chip)] text-[var(--landing-chip-fg)]"
|
|
)}
|
|
style={
|
|
accent
|
|
? {
|
|
backgroundColor: `${accent}1a`,
|
|
color: accent,
|
|
}
|
|
: undefined
|
|
}
|
|
>
|
|
{eyebrow}
|
|
</span>
|
|
<h2 className="text-balance text-3xl font-bold tracking-tight sm:text-4xl">
|
|
{title}
|
|
</h2>
|
|
{description ? (
|
|
<p className="text-balance text-base leading-relaxed text-[var(--landing-muted)]">
|
|
{description}
|
|
</p>
|
|
) : null}
|
|
</LandingReveal>
|
|
)
|
|
}
|