diff --git a/.claude/rules/claude-learn-frontend.md b/.claude/rules/claude-learn-frontend.md index a8739b9..532d0c7 100644 --- a/.claude/rules/claude-learn-frontend.md +++ b/.claude/rules/claude-learn-frontend.md @@ -157,3 +157,115 @@ const onFilesSelected = async (event) => { } ``` **Applied in**: `src/modules/data-entry/components/bulk/BulkUploadZone.vue` + +## P: Mobile Material Design Component Architecture +@2026-01-12 #mobile #material-design #vue #architecture | explicit:high +Unified mobile UI using shared MD3-inspired components. All mobile pages MUST use MobileTopBar for header and MobileBottomNav for persistent navigation. Components are in `src/shared/components/mobile/`. +```vue + + + + + +``` + +## P: Bottom Sheet Filter Pattern +@2026-01-12 #mobile #material-design #filters #bottom-sheet | explicit:high +On mobile, filters MUST be placed in a BottomSheet component instead of inline. BottomSheet slides up from bottom with drag-to-close gesture. Use a filter icon in MobileTopBar actions to toggle. +```vue + + + +``` + +## P: Mobile Selection Mode Flow +@2026-01-12 #mobile #material-design #selection #batch-actions | explicit:high +When items are selected on mobile, batch actions appear in MobileSelectionFooter (bottom), NOT in the header. The footer slides up when `selectedItems.length > 0`. Actions array defines available operations per context. +```vue + + + +``` + +## G: Nu duplica delete button în header și footer pe mobil +@2026-01-12 #mobile #material-design #ux #selection | explicit:high +**P**: Butonul de ștergere apărea în două locuri pe mobil: în bulk-actions-bar (header tabel) ȘI în mobile-selection-bottom-bar (footer), creând confuzie UX. +**C**: Desktop și mobile foloseau același cod pentru bulk actions, dar pe mobil acțiunile trebuie să fie DOAR în footer pentru ergonomie touch. +**S**: Afișează bulk-actions-bar DOAR când `!isMobile`. Pe mobil, toate acțiunile de selecție apar exclusiv în MobileSelectionFooter: +```vue + +
+
+ + + +``` +**Applied in**: `src/modules/data-entry/views/ReceiptsListView.vue` diff --git a/scripts/ralph/prd.json b/scripts/ralph/prd.json index ef23d0d..c1da170 100644 --- a/scripts/ralph/prd.json +++ b/scripts/ralph/prd.json @@ -333,8 +333,8 @@ "Gotcha: Nu duplica delete button în header și footer", "Format corect cu @date și tags #mobile #material-design" ], - "passes": false, - "notes": "" + "passes": true, + "notes": "Completed in iteration 7" } ] } diff --git a/scripts/ralph/progress.txt b/scripts/ralph/progress.txt index 5ea8efb..e7806a0 100644 --- a/scripts/ralph/progress.txt +++ b/scripts/ralph/progress.txt @@ -562,3 +562,9 @@ Mon Jan 12 09:44:54 AM UTC 2026 [2026-01-12 11:19:23] Working on story: US-117 [2026-01-12 11:19:23] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_6_US-117.log) [2026-01-12 11:20:26] SUCCESS: Story US-117 passed! +[2026-01-12 11:20:26] Changes committed +[2026-01-12 11:20:26] Progress: 19/20 stories completed +[2026-01-12 11:20:28] === Iteration 7/50 === +[2026-01-12 11:20:28] Working on story: US-119 +[2026-01-12 11:20:28] Running Claude... (log: /workspace/roa2web/scripts/ralph/logs/iteration_7_US-119.log) +[2026-01-12 11:21:35] SUCCESS: Story US-119 passed!