Compare commits

..

1 commit

Author SHA1 Message Date
9343bc1907 refactor(libra): redesign transactions list status + type encoding
Rework how the standalone transactions list communicates entry status
and type so each visual channel does one job and the filter UI matches
the underlying axes.

Encoding:
- Type lives in the signed/colored amount (+green income, -red expense)
  and a matching Income/Expense badge in the badge row.
- Status lives in badges only: red Voided (leftmost) and yellow Pending
  (after the type badge). Cleared entries carry no status badge — the
  quiet default.
- Voided rows additionally strike-through and mute the amount.
- Drop the title-row status icons and the colored left border that
  previously fought with the amount color for the same meaning.

Filter UI:
- Replace the type radio + voided switch with three category chips —
  Income, Expenses, Voided — that independently toggle inclusion of one
  bucket of rows. Each row belongs to exactly one bucket (voided wins
  over type). Defaults: Income + Expenses on, Voided off.
- Empty-selection state nudges the user to enable a category.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-06 23:08:20 +02:00

View file

@ -399,16 +399,9 @@ onMounted(() => {
<span class="font-medium">Ref:</span> {{ transaction.reference }} <span class="font-medium">Ref:</span> {{ transaction.reference }}
</div> </div>
<!-- Badges: Voided (leftmost, high-signal) + type (Income / <!-- Badges: type (Income / Expense) + status (Voided / Pending,
Expense) + Pending (after type) + any user-added tags. --> mutually exclusive) + any user-added tags. -->
<div class="flex flex-wrap gap-1 mt-2"> <div class="flex flex-wrap gap-1 mt-2">
<Badge
v-if="isVoided(transaction)"
variant="secondary"
class="text-xs bg-red-100 dark:bg-red-900/20 text-red-700 dark:text-red-300"
>
Voided
</Badge>
<Badge <Badge
v-if="isIncome(transaction)" v-if="isIncome(transaction)"
variant="secondary" variant="secondary"
@ -424,7 +417,14 @@ onMounted(() => {
Expense Expense
</Badge> </Badge>
<Badge <Badge
v-if="isPending(transaction)" v-if="isVoided(transaction)"
variant="secondary"
class="text-xs bg-red-100 dark:bg-red-900/20 text-red-700 dark:text-red-300"
>
Voided
</Badge>
<Badge
v-else-if="isPending(transaction)"
variant="secondary" variant="secondary"
class="text-xs bg-yellow-100 dark:bg-yellow-900/20 text-yellow-700 dark:text-yellow-300" class="text-xs bg-yellow-100 dark:bg-yellow-900/20 text-yellow-700 dark:text-yellow-300"
> >