feat(oxibadge): add settings screen for shifts, rounding and language
Check, format and test / build (push) Successful in 10m22s

Add a settings screen (gear button on the month-confirmation screen)
to configure the expected shift times, the rounding step, the
interface language, and the time clock address — replacing the old
onboarding-only connection flow. Settings persist to the same
preferences.toml as the reader address, under a single load_settings/
save_settings command pair.

The review screen's "fix shifts" action now redistributes stacked
punches by nearest configured shift time instead of blind position,
and a stacked cell manually cleared down to one entry no longer
leaves a dangling empty input.

Assisted-by: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 18:29:57 +02:00
parent acd3efeac6
commit b65e85f908
26 changed files with 1397 additions and 118 deletions
@@ -1,6 +1,6 @@
<script lang="ts">
import { _ } from 'svelte-i18n';
import { ROUND_STEP } from './analysis';
import type { Shifts } from '$lib/shifts';
import FixButton from './FixButton.svelte';
import ActionButton from './ActionButton.svelte';
@@ -8,6 +8,7 @@
title,
scopeIssues,
scopeInfos,
shift,
items,
onclose,
onroundandexport,
@@ -16,6 +17,7 @@
title: string;
scopeIssues: number;
scopeInfos: number;
shift: Shifts;
items: { key: string; label: string; detail: string; red: boolean; go: () => void }[];
onclose: () => void;
onroundandexport: () => void;
@@ -40,7 +42,7 @@
{#if scopeIssues}
{$_('review.export_warning_issues')}
{:else}
{$_('review.export_warning_unrounded', { values: { step: ROUND_STEP } })}
{$_('review.export_warning_unrounded', { values: { step: shift.round_step_min } })}
{/if}
</p>
</div>