Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

10 — Interaction Specification (Students Module)

Interaction details on top of the global conventions (00-shared/08). Motion tokens from 00-shared/02 §6; haptics per 00-shared/08 §3.


1. Gestures & inputs (phone/tablet)

GestureBehaviourScreen
Tap rowopen detail (Hero flight on avatar, m-slow)Roster
Long-press rowAppMenu (same as trailing ⋮)Roster
Swipe left (phone)none — roster rows keep menu only (avoid accidental archive)Roster
Pull downrefresh page 1 + reset infinite scroll (RefreshIndicator, lightImpact on success)Roster, Documents, History, Parents
Scroll down/upFAB hides on scroll-down, reappears scroll-up (00-shared/03 D)Roster
Tab switchindicator slide m-base; content cross-fade m-slowDetail
Back on wizardstep back; at step 1 → leave prompt if dirtyCreate/Import
Sheet dismissdrag handle + barrier; state preserved on dismissEnroll/Upload/Link

2. Desktop/keyboard

InputBehaviour
Ctrl+Ffocus roster search
Nopen create wizard (roster)
Escclose sheets/menus/clear search; step back in wizards
Entersubmit focused form field chain
Right-click rowcontext menu = long-press menu
Hover row2% surface tint m-fast; tooltip on truncated names
Arrowsnavigate dropdown options; timeline focusable nodes

3. Motion choreography

MomentMotion
List → detailHero avatar m-slow; page slide m-base
Status badge changeAnimatedSwitcher icon morph m-fast + scale pop on badge
New document tileentrance m-entrance (stagger 40 ms with list)
Import report numberscount-up animation m-slow (reduced-motion: static)
Upload progressdeterminate LinearProgressIndicator m-instant color shifts
Snackbar confirmationssuccess < 3 s, error ≥ 4 s, slide m-base (00-shared/03 A)
Skeleton → contentcross-fade m-slow, never pop-in (00-shared/08 §4)
Reduced motionall of the above → fades ≤ m-instant; no count-up, no stagger, no shimmer

4. Micro-interactions

InteractionDetail
Filter chip toggleselected = secondaryContainer fill, m-fast
Search300 ms debounce; clear button restores; results count live-region
Submit buttonsspinner replaces label; success → check + snackbar (00-shared/08 §5)
Row tapink ripple + 40 ms press feedback
Timeline nodeactive node dot pulses m-fast; past nodes static
Unlink guardiandestructive confirm heavyImpact, then row removal on server 200 only (not optimistic — server-first)
Lifecycle actionsconfirm dialog m-base; destructive label error; heavyImpact on confirm

5. Frustration controls

  • Every network action shows pending state (button spinner / skeleton) — never a silent wait (00-shared/08 §6).
  • Repeated taps disabled while pending everywhere (create/enroll/transfer/upload/ import/link).
  • 429 on any action → countdown + disabled CTA (00-shared/06 §5).
  • Upload retry: error tile keeps file bytes in memory, retry re-posts; cancel discards.

6. Haptics map (mobile; off on web/desktop and when system disabled)

EventHaptic
Create/enroll/transfer successlightImpact
Server 409/422 on lifecycle actionmediumImpact
Long-press menuselectionClick
Destructive confirm (delete/graduate/archive/unlink)heavyImpact
Pull-to-refresh completelightImpact

7. Realtime interplay

  • No WS topics for students today (00-shared/07 §8 topics list has none for students). Roster freshness = pull-to-refresh + re-fetch on screen focus. WS roster.changed topic (forward-looking).
  • In-app notifications (StudentCreatedin-app student-enrolled, event-queue-map.ts:28) arrive to the actor; tapping a student notification → deep link /students/:id (studylyon://students/:id) (proposed).