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}
);
}