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