diff --git a/apps/webapp/app/components/primitives/Callout.tsx b/apps/webapp/app/components/primitives/Callout.tsx
index a4bd20be6..d43e22836 100644
--- a/apps/webapp/app/components/primitives/Callout.tsx
+++ b/apps/webapp/app/components/primitives/Callout.tsx
@@ -7,6 +7,7 @@ import {
import {
ArrowTopRightOnSquareIcon,
BookOpenIcon,
+ ChartBarIcon,
CheckCircleIcon,
ChevronRightIcon,
} from "@heroicons/react/24/solid";
@@ -58,6 +59,12 @@ export const variantClasses = {
textColor: "text-blue-300",
linkClassName: "transition hover:bg-blue-400/40",
},
+ pricing: {
+ className: "border-indigo-400/20 bg-indigo-800/30",
+ icon: ,
+ textColor: "text-indigo-200",
+ linkClassName: "transition hover:bg-indigo-400/40",
+ },
} as const;
export type CalloutVariant = keyof typeof variantClasses;
@@ -66,12 +73,14 @@ export function Callout({
children,
className,
icon,
+ cta,
variant,
to,
}: {
children?: React.ReactNode;
className?: string;
icon?: React.ReactNode;
+ cta?: React.ReactNode;
variant: CalloutVariant;
to?: string;
}) {
@@ -135,20 +144,23 @@ export function Callout({
return (
- {icon ? icon : variantDefinition.icon}
+
+ {icon ? icon : variantDefinition.icon}
- {typeof children === "string" ? (
-
- {children}
-
- ) : (
- children
- )}
+ {typeof children === "string" ? (
+
+ {children}
+
+ ) : (
+ children
+ )}
+
+ {cta && cta}
);
}
diff --git a/apps/webapp/app/components/stories/PricingCallout.stories.tsx b/apps/webapp/app/components/stories/PricingCallout.stories.tsx
new file mode 100644
index 000000000..3e79229ae
--- /dev/null
+++ b/apps/webapp/app/components/stories/PricingCallout.stories.tsx
@@ -0,0 +1,40 @@
+import type { Meta, StoryObj } from "@storybook/react";
+import { PricingTiers, TierEnterprise, TierFree, TierPro } from "../billing/PricingTiers";
+import { Callout } from "../primitives/Callout";
+import { Button, LinkButton } from "../primitives/Buttons";
+import { ArrowUpCircleIcon } from "@heroicons/react/24/outline";
+
+const meta: Meta = {
+ title: "Billing/PricingCallouts",
+ component: PricingCallouts,
+};
+
+export default meta;
+
+type Story = StoryObj;
+
+export const AllTiers: Story = {
+ render: (args) => ,
+};
+
+function PricingCallouts() {
+ return (
+
+
+ Upgrade
+
+ }
+ >
+ Some of your Runs are being queued because your Run concurrency is limited to 50.
+
+
+ );
+}