"use client"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { localStorage } from "@calcom/lib/webstorage"; import { Icon } from "@calcom/ui/components/icon"; import { OrgBadge, TeamBadge } from "@calcom/web/modules/billing/components/PlanBadge"; import { Button } from "@coss/ui/components/button"; import Image from "next/image"; import Link from "next/link"; import posthog from "posthog-js"; import { useClientOnly } from "@calcom/lib/hooks/useClientOnly"; import { useState } from "react"; import type { UpgradeTarget } from "./types"; const STORAGE_KEY = "dismissed-large-upgrade-banners"; function isDismissed(tracking: string): boolean { const raw = localStorage.getItem(STORAGE_KEY); if (!raw) return false; try { const dismissed = JSON.parse(raw) as Record; return dismissed[tracking] === true; } catch { return false; } } function dismiss(tracking: string): void { const raw = localStorage.getItem(STORAGE_KEY); let dismissed: Record = {}; if (raw) { try { dismissed = JSON.parse(raw) as Record; } catch { // corrupted data, start fresh } } dismissed[tracking] = true; localStorage.setItem(STORAGE_KEY, JSON.stringify(dismissed)); } export type WideUpgradeBannerProps = { tracking: string; title: string; subtitle: string; target: UpgradeTarget; size?: "md" | "sm"; image: { src: string; width: number; height: number; }; learnMoreButton?: { text: string; href?: string; onClick?: () => void; }; children: React.ReactNode; }; export function WideUpgradeBanner({ tracking, title, subtitle, target, size = "md", image, learnMoreButton, children, }: WideUpgradeBannerProps) { const { t } = useLocale(); const [visible, setVisible] = useState(false); useClientOnly(() => { setVisible(!isDismissed(tracking)); }); if (!visible) return null; return (
{/* Left Content */}
{size === "sm" ? (

{title}

{target === "team" ? : }
) : (
{target === "team" ? : }

{title}

)}

{subtitle}

{/* Buttons */}
{children} {learnMoreButton && (learnMoreButton.href ? ( ) : ( ))}
{/* Right Content - Image */}
); }