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

11 — Design System Mapping (Rooms Module)

Maps the Rooms module onto the shared design system. Tokens, components, layouts, and a11y baselines live in 00-shared/02 (Design Tokens), 00-shared/03 (Component Library), 00-shared/04 (Design System Mapping), and 00-shared/05 (Global IA). This file is the module's mapping layer only — it does not re-specify shared rules.


1. Token usage

Token group (00-shared/02)Module use
Colortype-tinted icons via colorScheme.primaryContainer variants (proposed); error color reserved for capacity/duplicate errors; no literal colors in widgets
TypographytitleMedium card titles, labelMedium code chips, bodyMedium meta, bodySmall captions
ShapeshapeMedium cards, shapeFull chips/badges, shapeSmall icon containers
Spacing16 dp page padding, 8 dp between rows/chips, 24 dp section gaps
Motionm-fast entrance/feedback, m-base transitions (see 10 §7)
Elevationresting cards level-1, pressed level-2, dialog level-3

2. Component mapping

Shared component (00-shared/03)Module usage
AppAppBarS1/S2/S3 title + actions (Save in S3)
AppSearchBarS1 search (client filter (proposed))
AppChipstype/building filters, facilities, code chip
AppCardRoomCard, detail header
AppListTilemeta rows, availability rows (planned)
AppTextFieldS3 fields, S4 confirm
AppDropdownRoomTypePicker
AppButtonEdit/Delete, dialog actions
AppFABS1 "New room" (gated rooms.create)
AppSkeletonlist/detail/availability loading
AppEmptyStateno rooms, no filters match, not found
AppErrorStatelist/detail retry
AppOfflineBannerconnectivity
AppSnackbarall mutation feedback
AppDialogS4 delete, discard, concurrent-edit (proposed)
AppMenurow/detail actions

Module-specific components (07): RoomCard, RoomTypeIcon, CapacityBadge, FacilityChips, RoomFilterBar, RoomTypePicker, RoomCodeField, FacilityInputChips, DeleteRoomDialog, QRCodeCard (forward-looking), RoomAvailabilitySection (planned).

3. Visual rules

RuleSpec
Type identityRoomTypeIcon per enum (room.schema.ts:7-14); consistent tint per type across list/detail/editor
Code prominencecode chip = monospace labelMedium on surfaceContainerHighest; distinct from name
Capacity display"Cap N" CapacityBadge; absent capacity → no badge (never "Cap 0")
Buildingsubtitle text with location icon when present
Facilitieschips ≤ 2 inline; "+n" expander
Permission gatinghidden UI, never disabled-looking buttons for missing perms (per 00-shared/04)
Empty vs not-founddistinct art + copy: "No rooms yet" (list) vs "Room not found" (404 detail)

4. Layout system (00-shared/05)

BreakpointS1S2S3
< 600 dp (phone)single column + FABsingle columnsingle column, keyboard-avoiding
600–839 dp (tablet portrait)2-column grid of cards (proposed)column + sticky actions≤ 640 dp centered card
≥ 840 dp (tablet/desktop)master-detail split (list + detail pane)pane contentcentered card

5. Type → icon/color mapping (proposed)

RoomTypeIconTint
classroomschool/chairprimary
labscience/flasksecondary
librarybooktertiary
officebriefcasesecondary-variant
hallevent-seattertiary-variant
otherroom/genericneutral

6. Accessibility mapping (00-shared/09)

RuleModule application
Contrastall status/capacity info uses standard tokens (≥ 4.5:1 body)
Touch targetschips ≥ 44 dp hit area; FAB standard; row menus 48 dp
SemanticsRoomCard single label; facilities chips labeled individually on S2
Live regionsloading announcements, field errors, snackbar content
Focus orderS1: search → chips → cards → FAB; S3: F1→F6
Reduced motionrespect disableAnimations; error shake → color-only (proposed)