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;