feat(ux): usable amounts, colour-coded category/form chips, currency quick-picks

Four usability passes across the everyday flows:

- Quantity picker: a countable unit (cob/pod/ear…) now defaults to 1 and
  the stepper clamps at a minimum of 1 — you can never store 'a cob' with
  a blank/zero figure. Vibe units (a few) still carry no number.
- Category & form chips are colour-coded (new category_palette.dart): a
  small muted earthy palette maps each botanical family to a STABLE
  tonality (fill + readable ink), and each lot form gets its own tone.
  Applied to the inventory filter bar (now grouped attributes | forms |
  families, separated by a hairline), the list's category headers (a
  matching colour dot), and the lot-form selector.
- Sale currency: quick-pick chips (€ · Ğ1 · hours) fill the field in one
  tap — Ğ1 offered quietly among familiar options, never imposed — while
  free text still takes anything else. New i18n key sale.hours (en/es/pt/ast).

Tests: quantity_picker_test (default-1, clamp, vibe, clear-still-1),
category_palette_test (stable/distinct swatches); overflow guard + the
inventory widget tests stay green.
This commit is contained in:
vjrj 2026-07-11 06:06:04 +02:00
parent e2665c27d4
commit 5b487ba1ec
15 changed files with 364 additions and 53 deletions

View file

@ -862,6 +862,7 @@ class _Translations$sale$es extends Translations$sale$en {
@override String get amount => 'Importe';
@override String get currency => 'Moneda';
@override String get currencyHint => '€, Ğ1, horas… (opcional)';
@override String get hours => 'horas';
@override String get note => 'Nota (opcional)';
@override String get save => 'Guardar';
@override String get delete => 'Quitar';
@ -1663,6 +1664,7 @@ extension on TranslationsEs {
'sale.amount' => 'Importe',
'sale.currency' => 'Moneda',
'sale.currencyHint' => '€, Ğ1, horas… (opcional)',
'sale.hours' => 'horas',
'sale.note' => 'Nota (opcional)',
'sale.save' => 'Guardar',
'sale.delete' => 'Quitar',