diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 68d0c58..4ba122b 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -57,7 +57,7 @@ jobs: pip install -r requirements-e2e.txt python3 -m playwright install --with-deps chromium - name: Exercise packaged mobile work journeys - run: python3 -m pytest tests/e2e/test_mobile_offline_issue_release.py tests/e2e/test_mobile_search_preview_navigation.py tests/e2e/test_mobile_find_work_release.py tests/e2e/test_mobile_today_handoff_release.py -q + run: python3 -m pytest tests/e2e/test_mobile_offline_issue_release.py tests/e2e/test_mobile_search_preview_navigation.py tests/e2e/test_mobile_find_work_release.py tests/e2e/test_mobile_today_handoff_release.py tests/e2e/test_mobile_today_wrap_up_release.py -q release-candidate: runs-on: ubuntu-latest diff --git a/frontend/dashboard.css b/frontend/dashboard.css index 74ec847..716387d 100644 --- a/frontend/dashboard.css +++ b/frontend/dashboard.css @@ -258,12 +258,26 @@ textarea { resize: vertical; min-height: 120px; } .today-recap-totals { margin:12px 0; padding:12px; border-radius:10px; background:#10233d; font-weight:700; } .today-recap-actions { position:sticky; bottom:0; display:grid; grid-template-columns:1fr 1fr; gap:8px; margin:16px -6px -6px; padding:12px 6px; padding-bottom:calc(12px + env(safe-area-inset-bottom)); background:rgba(11,21,38,.98); border-top:1px solid #2a496e; } .today-recap-actions button { min-height:44px; width:100%; } +.today-wrap-up-sheet { position:fixed; inset:0; z-index:89; display:flex; align-items:flex-end; justify-content:center; background:rgba(5,12,21,.82); backdrop-filter:blur(4px); } +.today-wrap-up-sheet[hidden] { display:none; } +.today-wrap-up-panel { box-sizing:border-box; width:min(620px,100%); max-height:100dvh; overflow:auto; overflow-x:hidden; padding:18px; padding-bottom:calc(18px + env(safe-area-inset-bottom)); border:1px solid #2a496e; border-radius:18px 18px 0 0; background:#0b1526; } +.today-wrap-up-header { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; } +.today-wrap-up-header h2 { margin:.2rem 0; } +.today-wrap-up-header button { min-height:44px; min-width:44px; } +.today-wrap-up-items { display:grid; gap:8px; margin:14px 0; } +.today-wrap-up-item { display:grid; grid-template-columns:minmax(0,1fr) auto; align-items:center; gap:12px; min-width:0; padding:12px; border:1px solid #2a496e; border-radius:12px; background:#10233d; overflow-wrap:anywhere; } +.today-wrap-up-item span { display:block; } +.today-wrap-up-item label { display:flex; align-items:center; min-height:44px; gap:8px; font-weight:700; } +.today-wrap-up-item input { width:24px; min-height:24px; } +.today-wrap-up-actions { position:sticky; bottom:0; margin:16px -6px -6px; padding:12px 6px; padding-bottom:calc(12px + env(safe-area-inset-bottom)); background:rgba(11,21,38,.98); border-top:1px solid #2a496e; } +.today-wrap-up-actions button { min-height:44px; width:100%; } @media (max-width:420px) { .today-interruption-actions { grid-template-columns:1fr; } .today-recap-actions { grid-template-columns:1fr; } .today-recap-row { grid-template-columns:1fr; } .today-recap-row input { width:min(100%,8rem); } .today-recap-variance { grid-column:1; } + .today-wrap-up-item { grid-template-columns:1fr; } } .today-readiness-sheet { position:fixed; inset:0; z-index:90; display:flex; align-items:flex-end; justify-content:center; background:rgba(5,12,21,.82); backdrop-filter:blur(4px); } .today-readiness-sheet[hidden] { display:none; } diff --git a/frontend/dashboard.js b/frontend/dashboard.js index 28b957b..ef51527 100644 --- a/frontend/dashboard.js +++ b/frontend/dashboard.js @@ -1767,11 +1767,18 @@ interruptionPrompt.resolve(button.dataset.todayInterruption) ); }); + const todayWrapUpView = setupTodayWrapUp({ todayWork, laterWork, todaySync, qs, escapeHtml, + onComplete:() => { + todayRecapView['completeReplan'](); + refreshMyWorkView(); + warmTodayOffline(); + }, + }); const todayRecapView = setupTodayRecap( timer, timerView, todayWork, api, qs, escapeHtml, closeOpenWorkSheets, updateWorkSessionActions, () => planningOwnerLogin, identity => [...todayMyWork, ...activeMyWork].find(item => todayWork.identity(item) === identity) || null, - actualMinutes => openPlanToday(qs('#plan-today'), true, actualMinutes) + actualMinutes => todayWrapUpView.open(todayMyWork, actualMinutes) ); function updateDetailDeferLabels(active) { document.querySelectorAll('[data-detail-defer-preset=today]').forEach(button => { diff --git a/frontend/index.html b/frontend/index.html index bc337f1..5dec2fc 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -406,13 +406,28 @@
- +
+ +