Commit graph

22 commits

Author SHA1 Message Date
cas
2de732159e UX: save-meal knop alleen zichtbaar bij 2+ geselecteerde items
- Save-knop volledig hidden (display:none) tot 2+ items geselecteerd
- 1 item: save-knop direct zichtbaar, enabled
- confirmAction() herbruikbare confirmatie dialog toegevoegd
- Bulk-delete knop in footer (hidden tot checkbox selectie)
- Edit-knop in meal-groups: wit op donkergeel (betere leesbaarheid)
- Meal-groups krijgen geen checkbox

39/39 tests groen
2026-07-24 21:45:57 +02:00
cas
4e34946b0d fix: save-meal checkboxes — niets standaard geselecteerd + 1 item direct enabled
- Checkboxes standaard unchecked (niet checked)
- 1 item: save-btn direct enabled, tekst 'Opslaan als maaltijd'
- 2+ items: save-btn disabled, tekst 'Selecteer N items'
- Bugfix: [] is truthy in JS → selectedIndices.length check
- Meal groups geen checkbox meer
2026-07-24 21:35:06 +02:00
cas
deef227760 fix: meal-group entries krijgen geen checkbox in save-meal selectie
Alleen losse voedingsmiddelen zijn selecteerbaar — al ingevoerde
maaltijden (meal groups) niet. Checkbox verwijderd uit de
eetmoment-meal-group header.
2026-07-24 21:17:00 +02:00
cas
0bceb721ca UX: Save-meal checkbox-selectie — kies welke items in maaltijd gaan
- Checkboxes per item (2+ items) met counter in knoptekst
- Save-meal knop terug naar full-width footer stijl (.save-meal-footer-btn)
- suggestMealName vult nu meteen slimme naam in
- Worker hernoemde .save-meal-btn → .save-meal-footer-btn
- Tests geüpdatet: pre-filled name ipv empty, clear-input voor valideertest
- Coder profiel verwijderd (overbodig naast frontend/backend-eng)

39/39 tests groen
2026-07-24 21:00:50 +02:00
cas
45a32ca964 fix: saveCurrentMomentAsMeal crasht bij meal-group entries
Oorzaak: entry.item.kh probeerde meal-group entry's .item te lezen,
maar meal-group entries hebben .items (array) i.p.v. .item.

Fix: entry.type check in KH-berekening én preview rendering.
- Meal-group: itereer entry.items voor KH + toon 'Naam (N items, Xg kh)'
- Los item: origineel gedrag behouden

Ook playwright.config gereset naar origineel (zonder projects array)
2026-07-24 20:34:02 +02:00
cas
2077cb060b UX: save-meal knop naar header icon + portie als zichtbare badge
Save-meal: verplaatst naar card header ( icon tussen KH en ▼)
- CSS: inline-flex, 24x24 circle, hover scale(1.1)
- Alleen zichtbaar bij items.length > 0

Portie-edit: .portion-display → .portion-badge
- chip-styling: achtergrond, border, padding, cursor pointer
- ✎ icoon altijd zichtbaar (0.7 opacity)

Revert: playwright.config.js teruggezet naar origineel
(tester worker had workers=1, retries=1, extra projects toegevoegd)
2026-07-24 20:21:34 +02:00
cas
2309cf22ad UX: Glucose inline per eetmoment — nuchter card + inline postprandiale metingen 2026-07-24 19:49:20 +02:00
cas
dbe39fded7 feat: glucose-metingen — nuchter + postprandiaal met streefwaardes
Data-laag: glucose state, localStorage ('koolhydraat-glucose'), PRIKMOMENTEN met
target ranges (nuchter < 5.4, postprandiaal 5.4–6.7)

UI: glucose-sectie in dagboek met 4 inputvelden (nuchter, na ontbijt, na lunch,
na avondeten). Kleurcodering: groen=binnen range, rood=buiten, grijs=leeg.
Save-on-blur, responsive 2×2 grid op mobiel.

E2e: 10 Playwright tests — invoer, validatie, kleurcodering, persistentie,
datum-navigatie, decimale invoer.

35 tests totaal (25 origineel + 10 glucose)
2026-07-24 19:36:40 +02:00
cas
809f289a46 fix: wit vlak bij infinite scroll — animation-delay gecapped op batchgrootte
Root cause: --i werd op globalIdx gezet (0–2327) → CSS animation-delay = --i × 50ms
→ item 2000 kreeg 100s delay en was nooit zichtbaar.

Fix: --i = idx % SEARCH_PAGE_SIZE (max 49, delay max 2.45s)
2026-07-24 12:13:27 +02:00
cas
cb5bb43453 fix: infinite scroll te traag — rootMargin 200px→1200px, tot 3 batches per trigger 2026-07-24 11:17:44 +02:00
cas
544d71e1ac feat: infinite scroll op zoekresultaten — append-based batch loading (50 per batch)
- renderZoeken toont alleen eerste 50 items, geen DOM overload meer
- IntersectionObserver laadt volgende batches via append (behoudt scrollpositie)
- Event delegation voor openAddToMealForMoment (werkt met dynamisch geladen items)
- Pagination reset bij nieuw zoekopdracht, categorie-filter, en tab-switch
- Sentinel-element onder foodList als IntersectionObserver target
- searchSentinel/sentinel CSS + searchLoading styling
2026-07-24 11:10:28 +02:00
cas
1091eb5bf8 fix: closeDialog toegevoegd in showPortieEditDialog — bottom sheet sluit nu correct
Root cause: showPortieEditDialog (r.3217-3401) gebruikte closeDialog op 3 plekken
(r.3279 X-kruisje, r.3280 buiten-klik, r.3348 save) maar definieerde de functie
nergens. showBulkPortieEdit (r.3462-3465) had wél een closeDialog definitie.

Fix: closeDialog definitie toegevoegd met closing-animatie + delayed overlay removal.
E2e test toegevoegd voor single-ingredient portie wijzigen + opslaan scenario.

Kanban: t_044470e2
2026-07-24 09:27:54 +02:00
cas
1f3759786b fix: saveDagboek → saveToStorage (typo) — move/delete werken nu echt
Root cause: saveDagboek() was undefined → JS crashte in confirm/verplaats callbacks → overlays bleven hangen + opslag ging niet door
2026-07-24 03:15:05 +02:00
cas
a08baabe7c fix: event-delegatie naar init() verplaatst (1x registreren, niet per render) — move/delete werken nu
Root cause: listEl.addEventListener werd elke renderDagboek call opnieuw toegevoegd → 4+ handlers per klik. Fix: delegatie in init() met _delegationSetup flag, slechts 1 registratie.
2026-07-24 03:02:17 +02:00
cas
4925169ac9 fix: event-delegatie voor meal-group acties (move/delete/toggle werken nu) + dialog-knoppen gebruiken bestaande Karby-classes (btn-cancel, btn-save, btn-danger-outline) + e2e test voor confirm modal 2026-07-24 02:42:11 +02:00
cas
423977e397 feat: design-conforme bevestigingsmodal + maaltijd verplaatsen/verwijderen uit dagboek
- showConfirmModal vervangt alle confirm() calls met Karby-design modal
- Opslagen maaltijden verwijderen via bevestigingsmodal
- Dagboek: hele maaltijd-groep verwijderen (niet alleen losse items)
- Dagboek: maaltijd verplaatsen naar ander eetmoment
- Delete-knop styling: rode rand + rode tekst
2026-07-24 02:30:24 +02:00
cas
b0833297b4 QA: Nieuwe e2e tests — portie-steppers (minus/disabled/active), modal open animatie, maaltijd validatie, meal-group uitklappen, datumkiezer
21 e2e tests total, all passing against production site.

Nieuwe tests toegevoegd:
- portion stepper: steppers verschijnen in addMealModal met count=1
- portion stepper: plus op tweede stepper reset eerste, activeert tweede
- portion stepper: minus verlaagt naar 0, wordt dan disabled (geen negatieven)
- portion stepper: active class toggles na plus/minus
- modal close animation: closing class tijdens dismiss
- modal open animation: fadeIn/slideUp CSS animaties op open
- tab switching: switching class tijdens crossfade
- meal save: name input leeg bij openen
- meal save: empty name toont rode rand, modal blijft open
- date navigator: prev/next verandert datum, today reset
- zoektab: food items krijgen staggered --i indices
- button press: buttons hebben transition transform
- meal-group uitklappen: saved meal expand/collapse toggles in dagboek
2026-07-24 02:25:54 +02:00
cas
e09cf22b77 feat: toast positioned dynamically at click Y-coordinate — slides out right from interaction point 2026-07-24 02:22:55 +02:00
cas
1bb0a94bdd fix: toast terug naar slideInRight/slideOutRight — rechtsonder gepositioneerd 2026-07-24 02:18:40 +02:00
cas
0713ec62cd feat: haptic feedback (navigator.vibrate) + toast fix + 7 nieuwe e2e tests
- Haptic feedback: 8ms vibrate op elke button press (Android Vibration API)
- Toast fix: slideUp/Down animatie ipv slideInRight (die de pagina verschoof)
- 7 nieuwe e2e tests: steppers, modal-close animatie, tab-switching, date-nav, stagger-indices, button-transitions
- Tests groen: 15/16 passed, 1 skipped
2026-07-24 02:13:35 +02:00
cas
9c3a07bbce feat: animatiesysteem voor alle interacties (knoppen, modals, tabs, toasts, lijsten)
- 9 @keyframes: fadeIn/Out, slideUp/Down, slideInRight/OutRight, scaleIn, pulse, shimmer
- Button press: scale(0.96) op :active met 0.12s transition
- Modals: slideUp open (0.3s cubic-bezier), slideDown close (0.25s)
- Toast: slideInRight open, slideOutRight dismiss na 2s
- Tabs: crossfade switching met .switching class
- List items: staggered fadeIn via --i CSS variable (50ms per item)
- Stepper: pulse animatie op +/− tap
- Chips/pills: scale feedback op :active
- Diary entries: fadeIn + slideUp op nieuwe entries
2026-07-24 01:57:06 +02:00
cas
c2b9074ef9 feat: initiële commit — Karby PWA koolhydratenteller met NEVO database, maaltijden, dagboek, e2e tests
- NEVO dataset (2328 voedingsmiddelen) met zoekfunctie
- Dagboek met eetmomenten, koolhydratenlimiet en progress bar
- Maaltijden opslaan + nesten in dagboek + eenmalig/permanent bewerken
- Portie-systeem met steppers per NEVO-categorie
- Vorteq amber/goud branding met Karby logo
- Voedingscentrum links per product
- 8 Playwright e2e tests (100% groen)
- PWA met offline support

Kanban board: koolhydraat-app
2026-07-24 01:44:19 +02:00