2 && 'lg:grid-cols-3',
+ )}
+ >
+ {plans.map((plan) => {
+ const current = workspace.plan_name === plan.name;
+ const downgradeBlocked =
+ Boolean(
+ workspace.plan_name && workspace.plan_name !== 'free',
+ ) && plan.name === 'free';
+ const price = cloudPlanPrice(plan, cycle, currency);
+ const name =
+ localizedPlanText(plan.display_name, i18n.language) ||
+ plan.name.toUpperCase();
+ return (
+
+
+
+
+ {name}
+
+ {current ? (
+
+ {t('cloudPlans.current')}
+
+ ) : plan.highlight ? (
+
{t('cloudPlans.recommended')}
+ ) : null}
+
+
+ {localizedPlanText(plan.description, i18n.language)}
+
+
+ {price === 0
+ ? t('cloudPlans.free')
+ : formatPrice(price)}
+ {price > 0 && (
+
+ / {t(`cloudPlans.${cycle}`)}
+
+ )}
+
+
+ {cycle === 'annual' && price > 0
+ ? t('cloudPlans.annualNote', {
+ price: formatPrice(price / 12),
+ })
+ : ''}
+
+
+
+
+ {downgradeBlocked ? null : !canManage ? (
+
+ ) : (
+
+ )}
+
+ );
+ })}
+
+