import { CreditCardIcon, ExclamationCircleIcon, ExclamationTriangleIcon, InformationCircleIcon, LightBulbIcon, } from "@heroicons/react/20/solid"; import { ArrowTopRightOnSquareIcon, BookOpenIcon, CheckCircleIcon, ChevronRightIcon, } from "@heroicons/react/24/solid"; import { Link } from "@remix-run/react"; import { cn } from "~/utils/cn"; import { Paragraph } from "./Paragraph"; import { Spinner } from "./Spinner"; export const variantClasses = { info: { className: "border-grid-bright bg-background-bright", icon: , textColor: "text-text-bright", linkClassName: "transition hover:bg-background-hover", }, warning: { className: "border-warning/20 bg-warning/10", icon: , textColor: "text-callout-warning-text", linkClassName: "transition hover:bg-warning/20", }, error: { className: "border-error/20 bg-error/10", icon: , textColor: "text-callout-error-text", linkClassName: "transition hover:bg-error/20", }, idea: { className: "border-success/20 bg-success/10", icon: , textColor: "text-callout-success-text", linkClassName: "transition hover:bg-success/20", }, success: { className: "border-success/20 bg-success/10", icon: , textColor: "text-callout-success-text", linkClassName: "transition hover:bg-success/20", }, docs: { className: "border-callout-docs/20 bg-callout-docs/10", icon: , textColor: "text-callout-docs-text", linkClassName: "transition hover:bg-callout-docs/20", }, pending: { className: "border-callout-pending/20 bg-callout-pending-bg/30", icon: , textColor: "text-callout-pending-text", linkClassName: "transition hover:bg-callout-pending/20", }, pricing: { className: "border-callout-pricing/20 bg-callout-pricing-bg/30", icon: , textColor: "text-callout-pricing-text", linkClassName: "transition hover:bg-callout-pricing/20", }, } as const; export type CalloutVariant = keyof typeof variantClasses; export function Callout({ children, className, icon, cta, variant, to, }: { children?: React.ReactNode; className?: string; icon?: React.ReactNode; cta?: React.ReactNode; variant: CalloutVariant; to?: string; }) { const variantDefinition = variantClasses[variant]; if (to !== undefined) { if (to.startsWith("http")) { return (
{icon ? icon : variantDefinition.icon} {typeof children === "string" ? ( {children} ) : ( children )}
); } else { return (
{icon ? icon : variantDefinition.icon} {typeof children === "string" ? ( {children} ) : ( children )}
); } } return (
{icon ? icon : variantDefinition.icon} {typeof children === "string" ? ( {children} ) : ( {children} )}
{cta && cta}
); }