21 lines
1.8 KiB
Markdown
21 lines
1.8 KiB
Markdown
# UI/UX Reviewer Memory — Fluffytrix
|
|
|
|
See `patterns.md` for detailed design conventions.
|
|
|
|
## Key Conventions (short form)
|
|
- Spacing rhythm: 4/6/8/10/12/16/24/32dp — no odd values
|
|
- Channel list item padding: horizontal 12dp, vertical 10dp
|
|
- Settings screen row padding: vertical 6dp (info rows), vertical 12dp (nav rows)
|
|
- Icon size in lists: 20dp (channel icons, drag handles); 32dp (member avatars)
|
|
- Space sidebar icons: 48dp touch target, 64dp column width
|
|
- Color tokens: always MaterialTheme.colorScheme — EXCEPT senderColors array (Discord palette, intentional)
|
|
- Two hardcoded colors in SpaceList unread dots: `Color.Red` and `Color.Gray` — inconsistent with ChannelList which uses `colorScheme.error` and `colorScheme.primary`
|
|
- Typography: titleMedium for section headers in panels; labelMedium uppercase for channel sections; bodyLarge for channel names; bodyMedium for settings labels; bodySmall for subtitles
|
|
- Icon style: filled (Icons.Default.*) throughout — AutoMirrored used for directional icons
|
|
- Scaffold used in SettingsScreen with TopAppBar; MainScreen Scaffold has no topBar (custom layout)
|
|
- `collectAsStateWithLifecycle` used in MainScreen; `collectAsState` used in SettingsScreen — inconsistent
|
|
- MainScreen uses `@Immutable` data class for ProfileSheetState (good practice)
|
|
- Drag gesture threshold: 60f px for swipe-open/close channel list
|
|
- LazyListState for channel list is owned by ViewModel (correct — survives recomposition)
|
|
- IME insets: enableEdgeToEdge() is active; Scaffold default contentWindowInsets excludes IME; MessageTimeline Column must carry `.imePadding()` before static padding — without it the keyboard overlays the input bar. AndroidView EditText does not auto-participate in Compose IME avoidance. Never use windowSoftInputMode=adjustResize with edge-to-edge.
|