{{ 'XP.Membership.UsageOverview' | translate }}

{{ 'XP.UsageDashboard.Personal' | translate }}

{{ 'XP.UsageDashboard.Description' | translate }}

{{ 'XP.Membership.Last30Days' | translate }}
@if (loading() && !overview()) {
{{ 'XP.UsageDashboard.Loading' | translate }}
} @else if (loadFailed() && !overview()) { } @else { @if (loadFailed()) { }
{{ 'XP.Membership.UsedPoints' | translate }}
{{ totalPoints() | number: '1.0-2' }}

{{ 'XP.UsageDashboard.RecentConsumption' | translate }}

{{ 'XP.Membership.ActiveDays' | translate }}
{{ overview()?.activeDays | number }}/ 30

{{ 'XP.Membership.Last30Days' | translate }}

{{ 'XP.Membership.PeakDailyPoints' | translate }}
{{ peakDailyPoints() | number: '1.0-2' }}

{{ 'XP.Membership.Last30Days' | translate }}

{{ 'XP.Membership.PersonalPoints' | translate }}
{{ overview()?.personalPointsBalance == null ? '—' : (overview()?.personalPointsBalance | number: '1.0-2') }}

{{ 'XP.UsageDashboard.PersonalPointsHint' | translate }}

{{ 'XP.UsageDashboard.Trend' | translate }}

{{ 'XP.UsageDashboard.TrendHint' | translate }}

@if (trend().maximum > 0) {
@for (day of trend().days; track day.date; let i = $index; let last = $last) { }
} @else { }
{{ 'XP.UsageDashboard.ConsumptionHint' | translate }} {{ 'XP.UsageDashboard.ViewDetails' | translate }}

{{ 'XP.UsageDashboard.Rankings' | translate }}

{{ 'XP.UsageDashboard.RankingsHint' | translate }}

@for (ranking of rankings(); track ranking.key) {
@for (item of ranking.items; track item.key; let i = $index) {
{{ i + 1 }}
{{ item.label || item.key }}
{{ item.pointsUsed | number: '1.0-2' }}{{ 'XP.Membership.PointsShort' | translate }}
} @empty { }
}

{{ 'XP.Membership.PointActivity' | translate }}

{{ 'XP.UsageDashboard.ActivityHint' | translate }}

@for (week of heatmap().weeks; track week.key) {
@for (cell of week.cells; track $index) { @if (cell) {
} @else { } }
}
@for (week of heatmap().weeks; track week.key) {
{{ week.monthLabel }}
}

{{ 'XP.Membership.MembershipDetails' | translate }}

{{ 'XP.Membership.UsageBilling' | translate }}
{{ 'XP.Membership.CurrentPlan' | translate }}

{{ overview()?.plan?.name || ('XP.UsageDashboard.NoPlan' | translate) }}

@if (overview()?.membership?.status; as status) { {{ 'XP.Membership.MemberStatuses.' + status | translate }} }
@if (overview()?.plan) { @if (overview()?.plan?.description) {

{{ overview()?.plan?.description }}

}
{{ 'XP.Membership.RemainingPoints' | translate }}
{{ overview()?.pointsRemaining === null ? ('XP.Membership.Unlimited' | translate) : (overview()?.pointsRemaining | number: '1.0-2') }}
{{ 'XP.UsageDashboard.CycleConsumption' | translate }}
{{ overview()?.consumedPoints ?? overview()?.pointsUsed | number: '1.0-0' }}
@if (!isUnlimited()) {
{{ 'XP.Membership.QuotaPointUsage' | translate }}{{ usedPercent() | number }}%
}
{{ 'XP.Membership.EffectivePeriod' | translate }}
{{ overview()?.currentPeriodStart | date: 'mediumDate' }} – {{ overview()?.currentPeriodEnd | date: 'mediumDate' }}
{{ 'XP.Membership.AllowedModels' | translate }}
{{ overview()?.plan?.allowedModels?.length ? (overview()?.plan?.allowedModels?.length | number) : ('XP.Membership.AllModels' | translate) }}
{{ 'XP.Membership.ModelMultipliers' | translate }}
{{ 'XP.UsageDashboard.RuleCount' | translate: { count: overview()?.plan?.modelMultipliers?.length ?? 0 } }}
{{ 'XP.Membership.RateLimits' | translate }}
{{ 'XP.UsageDashboard.RuleCount' | translate: { count: overview()?.plan?.rateLimits?.length ?? 0 } }}
} @else {

{{ 'XP.UsageDashboard.NoPlanHint' | translate }}

}

{{ 'XP.Membership.UpcomingPeriods' | translate }}

{{ 'XP.Membership.AccountUpcomingPeriodsHint' | translate }}

@if (scheduledPeriods().length) { {{ scheduledPeriods().length }} }
@for (period of scheduledPeriods(); track period.id) {
{{ period.planSnapshot.name }}
{{ period.periodStart | date: 'mediumDate' }} – {{ period.periodEnd | date: 'mediumDate' }}
@if (period.pointsGranted === null) { {{ 'XP.Membership.Unlimited' | translate }} } @else { {{ period.pointsGranted | number: '1.0-2' }} {{ 'XP.Membership.PointsShort' | translate }} }
} @empty { }
}