{#snippet priceBlock(plan: PricingPlan, opts?: { large?: boolean; dense?: boolean; align?: 'left' | 'center' | 'right' })} {@const large = opts?.large ?? false} {@const dense = opts?.dense ?? false} {@const align = opts?.align ?? 'left'}
{#if plan.compareAtPrice}

{plan.compareAtPrice}

{/if}

{displayPrice(plan)} {#if displayPeriod(plan)} {displayPeriod(plan)} {/if}

{#if plan.priceNote}

{plan.priceNote}

{/if}
{/snippet} {#snippet featureRows(plan: PricingPlan, dense = false)} {@const { visible, more } = featureList(plan)} {#if showFeatures && visible.length} {/if} {/snippet} {#snippet planCard(plan: PricingPlan, opts?: { dense?: boolean; horizontal?: boolean; large?: boolean })} {@const dense = opts?.dense ?? false} {@const horizontal = opts?.horizontal ?? false} {@const large = opts?.large ?? false} {@const badgeText = plan.badge ?? (plan.featured ? featuredBadgeLabel : undefined)} {#if horizontal}

{plan.name}

{#if badgeText} {badgeText} {/if}
{#if plan.description}

{plan.description}

{/if} {#if showFeatures}
{@render featureRows(plan, true)}
{/if}
{@render priceBlock(plan, { large, dense: true, align: 'right' })}
{:else}

{plan.name}

{#if plan.description}

{plan.description}

{/if}
{#if badgeText} {badgeText} {/if}
{@render priceBlock(plan, { large, dense })}
{@render featureRows(plan, dense)}
{/if} {/snippet} {#snippet matrixCell(value: boolean | string)} {#if typeof value === 'boolean'} {#if value} {:else} {/if} {:else} {value} {/if} {/snippet} {#snippet comparisonTable(withPricingHeader: boolean)}
{#if withPricingHeader} {#each plans as plan (plan.id)} {@const badgeText = plan.badge ?? (plan.featured ? featuredBadgeLabel : undefined)} {@const selected = selectedId === plan.id} {/each} {:else} {#each plans as plan (plan.id)} {@const selected = selectedId === plan.id} {/each} {/if} {#each resolvedComparisonRows as row, ri (row.id)} {#each row.values as value, vi (`${row.id}-${plans[vi]?.id ?? vi}`)} {/each} {:else} {/each}
Incluye
{row.label} {@render matrixCell(value)}
Sin características para comparar.
{/snippet}
{#if canToggleBilling}
{/if} {#if plans.length === 0}

No hay tarifas disponibles para este periodo.

{:else if isCompareLayout} {@render comparisonTable(true)} {:else if layout === 'split' && featuredPlan}
{@render planCard(featuredPlan, { large: true })}
{#each sidePlans as plan (plan.id)}
{@render planCard(plan, { horizontal: true, dense: true })}
{/each}
{:else if layout === 'bento'}
{#each plans as plan (plan.id)}
{@render planCard(plan, { large: !!plan.featured, dense: !plan.featured })}
{/each}
{:else if layout === 'horizontal'}
{#each plans as plan (plan.id)}
{@render planCard(plan)}
{/each}
{:else if layout === 'vertical'}
{#each plans as plan (plan.id)}
{@render planCard(plan, { horizontal: true })}
{/each}
{:else}
{#each plans as plan (plan.id)}
{@render planCard(plan, { dense: layout === 'compact' })}
{/each}
{/if} {#if showMatrix && !isCompareLayout}
{@render comparisonTable(false)}
{/if} {#if footer}
{@render footer()}
{/if}