Module-specific interactions layered on shared 00-shared/08 . Covers every input
modality on phone/tablet/desktop for list, forms, grading, attachments.
Gesture Behaviour Where
Tap open card, submit, grade, preview attachment all
Tap on submit/grade CTA submitting-aware disabled re-tap submit/grade forms
Long-press AppMenu on homework rows (Edit/Delete); attachment menu (Save/Share)lists, attachments
Double-tap zoom in attachment preview (PDF/image) preview only (08 §1 )
Swipe left homework row quick actions (Edit, Delete) — ≤ 2 (08 §1 ) teacher list
Pull down refresh list / submissions (RefreshIndicator) all scrollables
Hardware back pop form/sheet → previous screen; form with content → discard prompt all
Edge swipe shell drawer app shell
Input Behaviour
Tab logical form order (class → subject → title → description → dueDate → attachments → CTA); focus ring primary
Enter submits single-field contexts; Ctrl+Enter submits forms from text areas (remarks/description)
Esc closes sheet/dialog/menu; cancels selection; focus returns to trigger
N new homework (list screen, teacher)
Ctrl/Cmd+K global search (shell)
Arrows dropdown navigation (class/subject/status)
Right-click context menu = long-press menu
Hover m-fast tint on cards/rows; tooltip after 500 ms
Focus visible ring everywhere; logical traversal (09 §6 )
Event Haptic
Submit success lightImpact
Grade saved lightImpact
409 duplicate (already submitted) selectionClick (informational)
Delete confirm heavyImpact
Upload complete (per file) selectionClick
Upload failed mediumImpact
Rule off when system haptics off; none on desktop (08 §3 )
Transition Duration/curve Used by
List → detail m-base slide (+ Hero on card title m-slow)detail open
Form open m-base slide-upcreate/edit/submit
Status chip change AnimatedSwitcher fade m-fastsubmitted→graded
Row removal after delete m-base fade/slidelist
Card entrance m-entrance stagger 40 mslist load
Upload progress bar determinate m-instant updates attachment uploader
Late badge appear m-fast popcomputed on load
Reduced-motion: fades + instant only; no stagger, no hero, no shake.
Interaction Detail
Submit pressed button loading swap m-base, double-tap locked, haptic on success
409 already-submitted form swaps to success-ish state + info banner; no red flash
Grade saved snackbar "Grade saved" + row re-animates (marks badge pop m-fast)
Attachment uploaded chip icon morph file→check m-fast; progress 100% → selectionClick
Attachment failed red ring + failed chip + Retry button; error persists until acted
Delete homework confirm dialog → server confirm → row fade-out; snackbar "Homework deleted" (no undo — no restore endpoint)
Regrade confirm warning banner inside sheet + dialog if a previous grade exists
All presses respond < 100 ms with m-fast ripple.
Every network action shows pending state (button spinner, per-file progress, skeleton).
Submit/grade buttons disabled while pending — anti-double-submit.
Uploads never fail silently: per-file error + retry.
Errors persist until corrected/dismissed (persistent banner for 409/regrade warnings).
No auto-retry on 429; countdown shown.
studylyon://homework/:id → detail; notification tap (graded/submitted) → detail.
Attachment preview: copy text-selection in PDF; share via platform sheet.
Marks entry: paste a number is accepted; formatter strips non-digits.
Never block submit client-side on dueDate (server accepts late — OQ-1).
Never allow a second submission in UI (409 is the boundary; UI treats it as done).
Grade feedback always rendered from the server doc (marks? may be absent while
status='submitted' — homework-submission.schema.ts:24,30-31).
Delete = soft delete; the row must disappear from lists (isDeleted filter,
base.repository.ts:20-30) but the client must not assume the file records are gone.
No optimistic mutations anywhere in the module (create/submit/grade/delete all
server-confirmed — 00-shared/07 §9 ).