diff --git a/.changeset/violet-schools-repair.md b/.changeset/violet-schools-repair.md
new file mode 100644
index 00000000000..4d180c3fa12
--- /dev/null
+++ b/.changeset/violet-schools-repair.md
@@ -0,0 +1,5 @@
+---
+'@clerk/clerk-js': patch
+---
+
+Introduce `` variants to render the avatar and description fields within ``.
diff --git a/packages/clerk-js/src/ui/components/PricingTable/PlanCard.tsx b/packages/clerk-js/src/ui/components/PricingTable/PlanCard.tsx
index e6e980b021b..691c52b4742 100644
--- a/packages/clerk-js/src/ui/components/PricingTable/PlanCard.tsx
+++ b/packages/clerk-js/src/ui/components/PricingTable/PlanCard.tsx
@@ -340,11 +340,18 @@ export const PlanCardHeader = React.forwardRef((props, ref) => {
- const { plan, isCompact } = props;
+ const { plan, isCompact, variant = 'checkmark' } = props;
const totalFeatures = plan.features.length;
const [showAllFeatures, setShowAllFeatures] = React.useState(false);
const canToggleFeatures = isCompact && totalFeatures > 3;
@@ -354,10 +361,7 @@ export const PlanCardFeaturesList = React.forwardRef ({
display: 'grid',
flex: '1',
@@ -366,12 +370,17 @@ export const PlanCardFeaturesList = React.forwardRef
({
display: 'grid',
flex: '1',
- rowGap: isCompact ? t.space.$2 : t.space.$3,
+ rowGap: variant === 'avatar' ? t.space.$4 : isCompact ? t.space.$2 : t.space.$3,
})}
>
{plan.features.slice(0, showAllFeatures ? totalFeatures : 3).map(feature => (
@@ -383,19 +392,51 @@ export const PlanCardFeaturesList = React.forwardRef ({
display: 'flex',
alignItems: 'baseline',
- gap: t.space.$2,
+ gap: variant === 'checkmark' ? t.space.$2 : t.space.$3,
})}
>
- ({
- transform: `translateY(${t.space.$0x25})`,
- })}
- />
- {feature.description || feature.name}
+ {variant === 'checkmark' ? (
+ ({
+ transform: `translateY(${t.space.$0x25})`,
+ })}
+ />
+ ) : feature.avatarUrl ? (
+ 24}
+ title={feature.name}
+ initials={feature.name[0]}
+ rounded={false}
+ imageUrl={feature.avatarUrl}
+ />
+ ) : null}
+
+ ({
+ fontWeight: variant === 'checkmark' ? t.fontWeights.$normal : t.fontWeights.$medium,
+ })}
+ >
+ {feature.name}
+
+ {variant === 'avatar' && feature.description ? (
+ ({
+ marginBlockStart: t.space.$0x25,
+ fontSize: t.fontSizes.$xs,
+ })}
+ >
+ {feature.description}
+
+ ) : null}
+
))}
diff --git a/packages/clerk-js/src/ui/components/PricingTable/PlanDetailDrawer.tsx b/packages/clerk-js/src/ui/components/PricingTable/PlanDetailDrawer.tsx
index 258c7c7eb57..fb661bae89d 100644
--- a/packages/clerk-js/src/ui/components/PricingTable/PlanDetailDrawer.tsx
+++ b/packages/clerk-js/src/ui/components/PricingTable/PlanDetailDrawer.tsx
@@ -82,7 +82,10 @@ export function PlanDetailDrawer({
padding: t.space.$4,
})}
>
-
+
) : null}
diff --git a/packages/clerk-js/src/ui/customizables/elementDescriptors.ts b/packages/clerk-js/src/ui/customizables/elementDescriptors.ts
index 529457b7db0..aaf612f7781 100644
--- a/packages/clerk-js/src/ui/customizables/elementDescriptors.ts
+++ b/packages/clerk-js/src/ui/customizables/elementDescriptors.ts
@@ -239,6 +239,9 @@ export const APPEARANCE_KEYS = containsAllElementsConfigKeys([
'planCardFeatures',
'planCardFeaturesList',
'planCardFeaturesListItem',
+ 'planCardFeaturesListItemContent',
+ 'planCardFeaturesListItemTitle',
+ 'planCardFeaturesListItemDescription',
'planCardAction',
'planCardPeriodToggle',
'planCardFeeContainer',
diff --git a/packages/types/src/appearance.ts b/packages/types/src/appearance.ts
index 3802a0b1b03..ab917078729 100644
--- a/packages/types/src/appearance.ts
+++ b/packages/types/src/appearance.ts
@@ -367,6 +367,9 @@ export type ElementsConfig = {
planCardFeatures: WithOptions;
planCardFeaturesList: WithOptions;
planCardFeaturesListItem: WithOptions;
+ planCardFeaturesListItemContent: WithOptions;
+ planCardFeaturesListItemTitle: WithOptions;
+ planCardFeaturesListItemDescription: WithOptions;
planCardAction: WithOptions;
planCardPeriodToggle: WithOptions;
planCardFeeContainer: WithOptions;