@php $formatLiters = fn (?int $milliliters): string => number_format(((int) $milliliters) / 1000, 2, ',', ' ') . ' L'; $formatHours = function (?int $minutes): string { $minutes = max(0, (int) $minutes); $hours = intdiv($minutes, 60); $remainingMinutes = $minutes % 60; return $hours . 'h' . str_pad($remainingMinutes, 2, '0', STR_PAD_LEFT); }; $formatGoalValue = function (mixed $value, ?string $unit): string { $number = rtrim(rtrim(number_format((float) $value, 2, ',', ' '), '0'), ','); return trim($number . ' ' . ($unit ?? '')); }; $progressWidth = function (mixed $value): string { $bounded = min(100, max(0, (float) $value)); return number_format($bounded, 2, '.', '') . '%'; }; $dashboardScoreParts = explode(',', number_format((float) data_get($scoreExperience, 'score', 0), 2, ',', ' ')); $formatActivityDate = fn ($activity): string => $activity->all_day ? ($activity->started_at?->format('d/m') ?? '—') : ($activity->started_at?->format('d/m H:i') ?? '—'); $statusLabels = [ 'pending' => __('En cours'), 'completed' => __('Réussi'), 'failed' => __('Échoué'), ]; $statusBadgeClasses = [ 'pending' => 'goal-badge goal-badge--pending', 'completed' => 'goal-badge goal-badge--completed', 'failed' => 'goal-badge goal-badge--failed', ]; $monthLabel = ucfirst($today->copy()->translatedFormat('F Y')); $displayedNow = now(); $selectedDateIso = $selectedDate->toDateString(); $selectedDayLabel = ucfirst($selectedDate->copy()->translatedFormat('l d F Y')); $dashboardDayKicker = $isViewingToday ? __('Aujourd’hui') : __('Journée sélectionnée'); $dashboardDayTitle = $isViewingToday ? ucfirst($selectedDate->copy()->translatedFormat('l d F')) : $selectedDayLabel; $dashboardDayHint = $isViewingToday ? __('Point d’entrée pour compléter la journée progressivement.') : __('Consultation et saisie pour cette journée.'); $dailyGoalProgressCount = is_countable($dailyGoalProgress ?? null) ? count($dailyGoalProgress) : 0; $weeklyGoalProgressCount = is_countable($weeklyGoalProgress ?? null) ? count($weeklyGoalProgress) : 0; $monthlyGoalProgressCount = is_countable($monthlyGoalProgress ?? null) ? count($monthlyGoalProgress) : 0; $stateScores = [ ['label' => __('Physique'), 'value' => data_get($dailyScore, 'physical_score')], ['label' => __('Mental'), 'value' => data_get($dailyScore, 'mental_score')], ['label' => __('Émotion'), 'value' => data_get($dailyScore, 'emotional_score')], ['label' => __('Satisfaction'), 'value' => data_get($dailyScore, 'daily_satisfaction_score')], ]; @endphp

{{ __('Life Analytics') }}

{{ __('Dashboard') }}

{{ __('Saisir vite, suivre la journée, garder le cap.') }}

@if (session('status'))
{{ session('status') }}
@endif

{{ $dashboardDayKicker }}

@unless ($isViewingToday) {{ __('Aujourd’hui') }} @endunless

{{ $dashboardDayTitle }} @if ($isViewingToday) · {{ $displayedNow->format('H:i') }} @endif

{{ $dashboardDayHint }}

{{ __('Complétion') }}

{{ $completionPercent }}%

{{ __('Score') }}

{{ $dashboardScoreParts[0] }},{{ $dashboardScoreParts[1] ?? '00' }} / {{ data_get($scoreExperience, 'maximum_label', 1000) }}

@csrf
@foreach ($stateScores as $stateScore) @php $stateValue = data_get($stateScore, 'value'); $statePercent = $stateValue === null ? '0%' : $progressWidth(((float) $stateValue) * 10); @endphp
{{ $stateValue === null ? '—' : (int) $stateValue }} /10

{{ data_get($stateScore, 'label') }}

@endforeach

{{ __('Hydratation') }}

{{ $formatLiters($todayHydrationMl) }}

{{ __('Moyenne 7 jours') }} · {{ $formatLiters($averageHydration ?? 0) }}

{{ __('Sommeil') }}

{{ $formatHours($currentRest) }}

{{ __('Sommeil') }} {{ $formatHours($currentSleep) }} · {{ __('Sieste') }} {{ $formatHours($currentNap) }}

{{ __('Activités') }}

{{ $formatHours($currentActivity) }}

{{ __('Moyenne 7 jours') }} · {{ $formatHours($averageActivity) }}

{{ __('Livres en cours') }}

@forelse ($currentBooks as $book) {{ data_get($book, 'title') }} @empty {{ __('Aucun livre en cours.') }} @endforelse

{{ __('Téléphone') }}

@if ($phoneUsage)

{{ $phoneScreenTimeMinutes !== null ? $formatHours($phoneScreenTimeMinutes) : '—' }}

{{ __('ui.common.unlocks', ['count' => $phoneUnlockCount ?? '—']) }}

@else
{{ __('Aucune donnée téléphone renseignée pour cette journée.') }}
@endif

{{ $isViewingToday ? __('Journée en cours') : __('Journée sélectionnée') }}

{{ __('À faire ensuite') }}

{{ trans_choice('ui.common.goals', $dailyGoalProgressCount, ['count' => $dailyGoalProgressCount]) }}
@forelse ($dailyGoalProgress as $progress)

{{ $progress->goal?->name ?? __('Objectif') }}

{{ $formatGoalValue($progress->current_value, $progress->unit_snapshot) }} / {{ $formatGoalValue($progress->target_value_snapshot, $progress->unit_snapshot) }}

{{ $statusLabels[$progress->status] ?? $progress->status }}
@empty
{{ __('Aucun objectif journalier actif.') }}
@endforelse

{{ __('Objectifs') }}

{{ __('Semaine') }}

{{ __('ui.common.active_items', ['count' => $weeklyGoalProgressCount]) }}
@forelse ($weeklyGoalProgress as $progress)

{{ $progress->goal?->name ?? __('Objectif') }}

{{ $formatGoalValue($progress->current_value, $progress->unit_snapshot) }} / {{ $formatGoalValue($progress->target_value_snapshot, $progress->unit_snapshot) }}

{{ $statusLabels[$progress->status] ?? $progress->status }}
@empty
{{ __('Aucun objectif hebdomadaire actif.') }}
@endforelse

{{ __('Historique') }}

{{ __('Activités récentes') }}

@forelse ($activityHistory as $activity) @php $satisfactionScore = $activity->satisfaction_score; $satisfactionPercent = $satisfactionScore === null ? '0%' : min(100, max(0, ((int) $satisfactionScore) * 10)) . '%'; @endphp

{{ $activity->title ?? $activity->activityType?->name ?? $activity->activityCategory?->name ?? __('Activité') }}

{{ __('Catégorie') }} · {{ $activity->activityCategory?->name ?? __('Sans catégorie') }} {{ __('Type') }} · {{ $activity->activityType?->name ?? __('Sans type') }} @if ($activity->is_deepwork) {{ __('Deepwork · x1.5') }} @endif

{{ $formatActivityDate($activity) }}

{{ $activity->duration_min === null ? __('Sans durée') : $formatHours((int) $activity->duration_min) }}

{{ $satisfactionScore === null ? '—' : (int) $satisfactionScore }} /10
@empty
{{ __('Aucune activité enregistrée.') }}
@endforelse

{{ __('Objectifs') }}

{{ $monthLabel }}

{{ __('ui.common.active_items', ['count' => $monthlyGoalProgressCount]) }}
@forelse ($monthlyGoalProgress as $progress)

{{ $progress->goal?->name ?? __('Objectif') }}

{{ $formatGoalValue($progress->current_value, $progress->unit_snapshot) }} / {{ $formatGoalValue($progress->target_value_snapshot, $progress->unit_snapshot) }}

{{ $statusLabels[$progress->status] ?? $progress->status }}
@empty
{{ __('Aucun objectif mensuel actif.') }}
@endforelse

{{ __('Journée') }}

{{ __('Choisir une date') }}

@include('partials.hydration-consumption-form', ['modalName' => 'dashboard-add-consumption', 'selectedDate' => $selectedDate]) @include('partials.activity-session-form', ['modalName' => 'dashboard-add-activity', 'selectedDate' => $selectedDate]) @foreach ($activityHistory as $activity) @php $editModalName = 'dashboard-edit-activity-' . $activity->id; @endphp @include('partials.activity-session-form', [ 'modalName' => $editModalName, 'session' => $activityHistoryForms[$activity->id] ?? null, 'method' => 'PUT', 'action' => route('activities.sessions.update', $activity->id), 'submitLabel' => 'Enregistrer', 'formTitle' => __('Modifier l’activité'), 'formEyebrow' => __('Activité récente'), 'selectedDate' => $selectedDate, 'resetOnOpen' => false, ]) @endforeach @include('partials.phone-usage-form', ['modalName' => 'dashboard-phone-usage', 'selectedDate' => $selectedDate]) @include('partials.sleep-record-form', ['modalName' => 'dashboard-sleep-record', 'selectedDate' => $selectedDate])
@csrf @method('PUT')

{{ __('État journalier') }}

{{ __('Scores de la journée') }}

@if ($errors->any() && old('_modal') === 'dashboard-daily-score')

{{ __('Certains champs obligatoires sont manquants ou invalides.') }}

@endif
@include('partials.nap-record-form', ['modalName' => 'dashboard-nap-record', 'selectedDate' => $selectedDate])