i18n complet des pages + routine builder avancé (config par exo, réordonner, dupliquer)
Build & Deploy / build (push) Successful in 8s
Build & Deploy / build (push) Successful in 8s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+10
-10
@@ -72,7 +72,7 @@ async function finish() {
|
||||
if (unlocked.length) {
|
||||
toast.add({ title: `🏅 ${unlocked.map(u => u.label).join(', ')}`, color: 'primary' })
|
||||
}
|
||||
toast.add({ title: `🔥 Série : ${res.streak?.current ?? ''} jours`, color: 'primary' })
|
||||
toast.add({ title: `🔥 ${t('session.streakToast', { n: res.streak?.current ?? 0 })}`, color: 'primary' })
|
||||
await navigateTo('/')
|
||||
} catch {
|
||||
toast.add({ title: t('common.error'), color: 'error' })
|
||||
@@ -84,8 +84,8 @@ async function finish() {
|
||||
<template>
|
||||
<div class="space-y-4 pb-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<h1 class="text-xl font-black tracking-tight">{{ session?.title || 'Séance en cours' }}</h1>
|
||||
<UBadge color="primary" variant="soft" class="animate-pulse">● live</UBadge>
|
||||
<h1 class="text-xl font-black tracking-tight">{{ session?.title || t('session.inProgress') }}</h1>
|
||||
<UBadge color="primary" variant="soft" class="animate-pulse">● {{ t('session.live') }}</UBadge>
|
||||
</div>
|
||||
|
||||
<div v-for="ex in exercises" :key="ex.id" class="rounded-xl border border-zinc-200 dark:border-zinc-800 p-3 space-y-2">
|
||||
@@ -96,23 +96,23 @@ async function finish() {
|
||||
|
||||
<div v-for="s in setsFor(ex.id)" :key="s.id" class="flex items-center gap-3 text-sm pl-1">
|
||||
<span class="size-6 rounded-full bg-flame-100 dark:bg-flame-950 text-flame-600 dark:text-flame-400 text-xs font-bold flex items-center justify-center">{{ s.set_number }}</span>
|
||||
<span>{{ s.reps ?? '–' }} reps</span>
|
||||
<span v-if="s.weight" class="text-zinc-500">× {{ s.weight }} kg</span>
|
||||
<span>{{ s.reps ?? '–' }} {{ t('session.reps') }}</span>
|
||||
<span v-if="s.weight" class="text-zinc-500">× {{ s.weight }} {{ t('session.weight') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-2 pt-1">
|
||||
<UInput v-model.number="(draft[ex.id] ??= {}).reps" type="number" placeholder="reps" size="sm" class="w-20" />
|
||||
<UInput v-model.number="(draft[ex.id] ??= {}).weight" type="number" placeholder="kg" size="sm" class="w-20" />
|
||||
<UInput v-model.number="(draft[ex.id] ??= {}).reps" type="number" :placeholder="t('session.reps')" size="sm" class="w-20" />
|
||||
<UInput v-model.number="(draft[ex.id] ??= {}).weight" type="number" :placeholder="t('session.weight')" size="sm" class="w-20" />
|
||||
<UButton icon="i-lucide-plus" color="primary" size="sm" @click="logSet(ex.id)" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<UButton block color="neutral" variant="subtle" icon="i-lucide-plus" label="Ajouter un exercice" @click="pickerOpen = true" />
|
||||
<UButton block color="neutral" variant="subtle" icon="i-lucide-plus" :label="t('session.addExercise')" @click="pickerOpen = true" />
|
||||
|
||||
<UButton block size="xl" color="primary" class="font-bold" icon="i-lucide-check" label="Terminer la séance" :loading="finishing" @click="finish" />
|
||||
<UButton block size="xl" color="primary" class="font-bold" icon="i-lucide-check" :label="t('session.finish')" :loading="finishing" @click="finish" />
|
||||
|
||||
<!-- Picker d'exercice -->
|
||||
<UModal v-model:open="pickerOpen" title="Ajouter un exercice">
|
||||
<UModal v-model:open="pickerOpen" :title="t('session.addExercise')">
|
||||
<template #body>
|
||||
<UInput v-model="search" icon="i-lucide-search" :placeholder="t('exercises.search')" size="lg" class="w-full mb-3" autofocus />
|
||||
<div class="max-h-80 overflow-y-auto space-y-1">
|
||||
|
||||
Reference in New Issue
Block a user