From ee144847bdd91a9142da6fbfdff3d69b73909883 Mon Sep 17 00:00:00 2001 From: igor Date: Sat, 14 Feb 2026 13:04:37 +0100 Subject: [PATCH] added component for MacroBadge, used MacroBadge.vue in Day Meal, Meal View and Ingrediens View --- doc/prompt.txt | 56 +++++++++- frontend/src/assets/css/style.css | 105 ++++++++++++++++-- frontend/src/components/common/MacroBadge.vue | 28 +++++ frontend/src/components/today/DayMealCard.vue | 16 ++- .../src/components/today/DayTotalsCard.vue | 27 ++--- frontend/src/locales/cs.json | 3 +- frontend/src/locales/de.json | 3 +- frontend/src/locales/en.json | 3 +- frontend/src/locales/es.json | 3 +- frontend/src/locales/sk.json | 3 +- frontend/src/views/IngredientsView.vue | 28 ++++- frontend/src/views/MealsView.vue | 27 ++++- 12 files changed, 256 insertions(+), 46 deletions(-) create mode 100644 frontend/src/components/common/MacroBadge.vue diff --git a/doc/prompt.txt b/doc/prompt.txt index cdafb77..d7b7bee 100644 --- a/doc/prompt.txt +++ b/doc/prompt.txt @@ -45,4 +45,58 @@ dopln kluce pre UI texty pre preklad, pre kluce pouzivaj anglictinu, dopln potom na zobrazeni app/ingredients sprav aby formular pre pridanie novej suroviny sa zobrazil az ked kliknem na tlacitko Nova surovina, a po uspesnom ulozeni ten formular pre pridanie novej suroviny skry, nezabudni vynulovat udaje vo formulari po ulozeni ----- 2026-02-14 08:08:33 ----------------------------------------------------- -dopln jemnejší UX flow (toasty, confirm modaly pri delete, loading/error states per card) \ No newline at end of file +dopln jemnejší UX flow (toasty, confirm modaly pri delete, loading/error states per card) + +----- 2026-02-14 12:44:33 ----------------------------------------------------- +v zozname surovin app/ingredients sa zobrazuju len bielkoviny, sacharidy a tuky, pridaj tam aj vlakninu, + +zaroven to chcem farebne rozlisit, urob to ako farebny stitok, ze bielkoviny budu modre, sacharidy oranzove, tuky cervene (mierne tlmena) a vlaknina tmavsia zelena + +podobne farebne to rozlis aj na denndom prehlade app/today v sucte dna a tiez tam pridaj vlakninu + +v zozname jedalnickov app/meals je pri kazdom len pocet kalorii, pridaj tam tiez sumar makrozivin (bielkoviny, sacharidy, tuky a vlaknina) + +GPT upravil takto: +Rozšír UI aplikácie Nutrio nasledovne: + +1) Ingredients list (route: /app/ingredients) +- Aktuálne sa zobrazujú len bielkoviny, sacharidy a tuky. +- Pridaj zobrazenie vlákniny (fiber_g_100). +- Makrá zobraz ako malé farebné štítky (badge), nie ako obyčajný text. + +Farby štítkov: +- Bielkoviny (protein) → modrá #3B82F6 +- Sacharidy (carbs) → oranžová #F59E0B +- Tuky (fat) → tlmená červená #EF4444 +- Vláknina (fiber) → tmavšia zelená #10B981 + +Štýl badge: +- malé zaoblené pill tvary +- jemné svetlé pozadie (napr. 10–15% opacity farby) +- text farba plná farba +- formát: B 12g / S 24g / T 5g / V 6g + +2) Today page (route: /app/today) +- V dennom súčte pridaj vlákninu. +- Makrá zobraz rovnakým farebným štýlom ako v ingredients. +- Kalórie nech ostanú neutrálne (tmavá šedá), vizuálne dominantné veľkosťou písma, nie farbou. + +Layout: +- hore veľké číslo kcal +- pod tým horizontálne makrá ako farebné štítky + +3) Meals list (route: /app/meals) +- Aktuálne sa zobrazuje len počet kalórií. +- Pridaj aj súhrn makier (protein, carbs, fat, fiber). +- Zobraz ich rovnakým badge systémom pre konzistentnosť. +- Kcal nech je oddelené (napr. nad makrami alebo výraznejšie písmo). + +4) Konzistentnosť: +- Použi jeden spoločný komponent napr. +- Nepoužívaj sýte plné farebné pozadia. +- Použi minimalistický SaaS štýl. +- Farby makier musia byť identické naprieč celou aplikáciou. +- Nepridávaj nové knižnice. + +Výsledok: +Čistý, konzistentný, moderný vzhľad bez prehnaných farieb. diff --git a/frontend/src/assets/css/style.css b/frontend/src/assets/css/style.css index bae23f2..3936f2f 100644 --- a/frontend/src/assets/css/style.css +++ b/frontend/src/assets/css/style.css @@ -13,6 +13,10 @@ --color-success-bg: #e7f4d8; --color-error-bg: #f6dde0; --color-error: #7d2430; + --macro-protein: #3B82F6; + --macro-carbs: #F59E0B; + --macro-fat: #EF4444; + --macro-fiber: #10B981; --radius-md: 0.875rem; --radius-lg: 1.25rem; --space-xs: 0.5rem; @@ -535,6 +539,20 @@ select { font-size: var(--fs-sm); } +.list-row__meta--nutrition { + min-width: 0; + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 0.42rem; +} + +.list-row__kcal { + font-size: 1rem; + font-weight: 700; + color: color-mix(in srgb, var(--color-text) 88%, var(--color-muted)); +} + .list-row__actions { display: flex; gap: var(--space-xs); @@ -556,20 +574,89 @@ select { color: var(--color-muted); } -.totals-grid { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - gap: var(--space-sm); +.day-meal-card__summary--nutrition { + display: flex; + flex-direction: column; + gap: 0.45rem; } -.totals-grid span { +.day-meal-card__kcal { + font-size: var(--fs-sm); + font-weight: 700; + color: color-mix(in srgb, var(--color-text) 88%, var(--color-muted)); +} + +.totals-card__kcal { + display: flex; + flex-direction: column; + margin-bottom: var(--space-sm); +} + +.totals-card__kcal-label { display: block; color: var(--color-muted); font-size: var(--fs-sm); } -.totals-grid strong { - font-size: 1.1rem; +.totals-card__kcal-value { + font-size: clamp(2rem, 5vw, 2.75rem); + line-height: 1.05; + letter-spacing: -0.015em; + color: color-mix(in srgb, var(--color-text) 90%, var(--color-muted)); +} + +.macro-badge-group { + display: flex; + flex-wrap: wrap; + gap: 0.42rem; +} + +.macro-badge-group--with-top-gap { + margin-top: 0.45rem; +} + +.macro-badge-group--compact { + gap: 0.32rem; +} + +.macro-badge-group--right { + justify-content: flex-end; +} + +.macro-badge { + display: inline-flex; + align-items: center; + border-radius: 999px; + padding: 0.24rem 0.56rem; + border: 1px solid transparent; + font-size: 0.76rem; + font-weight: 600; + line-height: 1; + white-space: nowrap; +} + +.macro-badge--protein { + color: var(--macro-protein); + border-color: color-mix(in srgb, var(--macro-protein) 30%, var(--color-border)); + background: color-mix(in srgb, var(--macro-protein) 13%, var(--color-surface)); +} + +.macro-badge--carbs { + color: var(--macro-carbs); + border-color: color-mix(in srgb, var(--macro-carbs) 30%, var(--color-border)); + background: color-mix(in srgb, var(--macro-carbs) 13%, var(--color-surface)); +} + +.macro-badge--fat { + color: var(--macro-fat); + border-color: color-mix(in srgb, var(--macro-fat) 30%, var(--color-border)); + background: color-mix(in srgb, var(--macro-fat) 13%, var(--color-surface)); +} + +.macro-badge--fiber { + color: var(--macro-fiber); + border-color: color-mix(in srgb, var(--macro-fiber) 30%, var(--color-border)); + background: color-mix(in srgb, var(--macro-fiber) 13%, var(--color-surface)); } .meal-items-editor h3, @@ -747,10 +834,6 @@ select { grid-template-columns: 1fr; } - .totals-grid { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - .grid-two { grid-template-columns: 1fr; } diff --git a/frontend/src/components/common/MacroBadge.vue b/frontend/src/components/common/MacroBadge.vue new file mode 100644 index 0000000..37c37fe --- /dev/null +++ b/frontend/src/components/common/MacroBadge.vue @@ -0,0 +1,28 @@ + + + diff --git a/frontend/src/components/today/DayMealCard.vue b/frontend/src/components/today/DayMealCard.vue index 5ba9184..88333ae 100644 --- a/frontend/src/components/today/DayMealCard.vue +++ b/frontend/src/components/today/DayMealCard.vue @@ -1,6 +1,7 @@