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:
parent
e2665c27d4
commit
5b487ba1ec
15 changed files with 364 additions and 53 deletions
|
|
@ -592,6 +592,7 @@
|
|||
"amount": "Importe",
|
||||
"currency": "Moneda",
|
||||
"currencyHint": "€, Ğ1, hores… (opcional)",
|
||||
"hours": "hores",
|
||||
"note": "Nota (opcional)",
|
||||
"save": "Guardar",
|
||||
"delete": "Quitar",
|
||||
|
|
|
|||
|
|
@ -595,6 +595,7 @@
|
|||
"amount": "Amount",
|
||||
"currency": "Currency",
|
||||
"currencyHint": "€, Ğ1, hours… (optional)",
|
||||
"hours": "hours",
|
||||
"note": "Note (optional)",
|
||||
"save": "Save",
|
||||
"delete": "Remove",
|
||||
|
|
|
|||
|
|
@ -594,6 +594,7 @@
|
|||
"amount": "Importe",
|
||||
"currency": "Moneda",
|
||||
"currencyHint": "€, Ğ1, horas… (opcional)",
|
||||
"hours": "horas",
|
||||
"note": "Nota (opcional)",
|
||||
"save": "Guardar",
|
||||
"delete": "Quitar",
|
||||
|
|
|
|||
|
|
@ -591,6 +591,7 @@
|
|||
"amount": "Montante",
|
||||
"currency": "Moeda",
|
||||
"currencyHint": "€, Ğ1, horas… (opcional)",
|
||||
"hours": "horas",
|
||||
"note": "Nota (opcional)",
|
||||
"save": "Guardar",
|
||||
"delete": "Remover",
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
/// To regenerate, run: `dart run slang`
|
||||
///
|
||||
/// Locales: 4
|
||||
/// Strings: 1828 (457 per locale)
|
||||
/// Strings: 1832 (458 per locale)
|
||||
///
|
||||
/// Built on 2026-07-11 at 00:20 UTC
|
||||
/// Built on 2026-07-11 at 04:03 UTC
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint, unused_import
|
||||
|
|
|
|||
|
|
@ -860,6 +860,7 @@ class _Translations$sale$ast extends Translations$sale$en {
|
|||
@override String get amount => 'Importe';
|
||||
@override String get currency => 'Moneda';
|
||||
@override String get currencyHint => '€, Ğ1, hores… (opcional)';
|
||||
@override String get hours => 'hores';
|
||||
@override String get note => 'Nota (opcional)';
|
||||
@override String get save => 'Guardar';
|
||||
@override String get delete => 'Quitar';
|
||||
|
|
@ -1659,6 +1660,7 @@ extension on TranslationsAst {
|
|||
'sale.amount' => 'Importe',
|
||||
'sale.currency' => 'Moneda',
|
||||
'sale.currencyHint' => '€, Ğ1, hores… (opcional)',
|
||||
'sale.hours' => 'hores',
|
||||
'sale.note' => 'Nota (opcional)',
|
||||
'sale.save' => 'Guardar',
|
||||
'sale.delete' => 'Quitar',
|
||||
|
|
|
|||
|
|
@ -1638,6 +1638,9 @@ class Translations$sale$en {
|
|||
/// en: '€, Ğ1, hours… (optional)'
|
||||
String get currencyHint => '€, Ğ1, hours… (optional)';
|
||||
|
||||
/// en: 'hours'
|
||||
String get hours => 'hours';
|
||||
|
||||
/// en: 'Note (optional)'
|
||||
String get note => 'Note (optional)';
|
||||
|
||||
|
|
@ -2563,6 +2566,7 @@ extension on Translations {
|
|||
'sale.amount' => 'Amount',
|
||||
'sale.currency' => 'Currency',
|
||||
'sale.currencyHint' => '€, Ğ1, hours… (optional)',
|
||||
'sale.hours' => 'hours',
|
||||
'sale.note' => 'Note (optional)',
|
||||
'sale.save' => 'Save',
|
||||
'sale.delete' => 'Remove',
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -859,6 +859,7 @@ class _Translations$sale$pt extends Translations$sale$en {
|
|||
@override String get amount => 'Montante';
|
||||
@override String get currency => 'Moeda';
|
||||
@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 => 'Remover';
|
||||
|
|
@ -1657,6 +1658,7 @@ extension on TranslationsPt {
|
|||
'sale.amount' => 'Montante',
|
||||
'sale.currency' => 'Moeda',
|
||||
'sale.currencyHint' => '€, Ğ1, horas… (opcional)',
|
||||
'sale.hours' => 'horas',
|
||||
'sale.note' => 'Nota (opcional)',
|
||||
'sale.save' => 'Guardar',
|
||||
'sale.delete' => 'Remover',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue