feat: enhance Mini App design guidelines and refactor layout components
- Updated Mini App design guidelines to include detailed instructions on UI changes, accessibility rules, and verification processes. - Refactored multiple components to utilize `MiniAppScreen` and `MiniAppScreenContent` for consistent layout structure across the application. - Improved error handling in `GlobalError` and `NotFound` components by integrating new layout components for better user experience. - Introduced new hooks for admin functionality, streamlining access checks and data loading processes. - Enhanced documentation to reflect changes in design policies and component usage, ensuring clarity for future development.
This commit is contained in:
@@ -100,6 +100,12 @@ Use **only** these tokens and Tailwind/shadcn aliases (`bg-background`, `text-mu
|
||||
- **Sticky headers:** Use `top-[var(--app-safe-top)]` (not `top-0`) for sticky elements (e.g. calendar header, admin header) so they sit below the Telegram UI instead of overlapping it.
|
||||
- Lists that extend to the bottom should also account for bottom inset (e.g. `padding-bottom: var(--tg-viewport-content-safe-area-inset-bottom, 12px)` in `.container-app`).
|
||||
|
||||
Official terminology (Telegram docs) uses `safeAreaInset` and `contentSafeAreaInset`
|
||||
plus events `safeAreaChanged` and `contentSafeAreaChanged`. In our code, these values
|
||||
are exposed through SDK CSS bindings and consumed via app aliases (`--app-safe-*`).
|
||||
When updating safe-area code, preserve this mapping and avoid mixing raw `env(...)`
|
||||
and Telegram content-safe insets within the same component.
|
||||
|
||||
### 3.4 Sheets and modals
|
||||
|
||||
Bottom sheets and modals that sit at the bottom of the screen must add safe area to their padding, e.g.:
|
||||
@@ -203,6 +209,31 @@ See `webapp-next/src/components/day-detail/DayDetail.tsx` for the Sheet content.
|
||||
- `setBottomBarColor('bottom_bar_bg_color')` when available (Bot API 7.10+).
|
||||
- **Surface contrast:** When `--surface` equals `--bg` (e.g. some iOS OLED themes), `fixSurfaceContrast()` in `use-telegram-theme.ts` adjusts `--surface` using ThemeParams or a light color-mix so cards and panels remain visible.
|
||||
|
||||
### 8.1 Native control policy
|
||||
|
||||
- Use platform wrappers in `src/hooks/telegram/` rather than direct SDK calls in
|
||||
feature components.
|
||||
- **BackButton:** preferred for route-level back navigation in Telegram context.
|
||||
- **SettingsButton:** use for route actions like opening `/admin` from calendar.
|
||||
- **Main/Secondary button:** optional; use only if action must align with Telegram
|
||||
bottom action affordance (do not duplicate with conflicting in-app primary CTA).
|
||||
- **Haptics:** trigger only on meaningful user actions (submit, confirm, close).
|
||||
|
||||
### 8.2 Swipe and closing policy
|
||||
|
||||
- Keep vertical swipes enabled by default (`enableVerticalSwipes` behavior).
|
||||
- Disable vertical swipes only on screens with explicit gesture conflict and document
|
||||
the reason in code review.
|
||||
- Enable closing confirmation only for stateful flows where accidental close can
|
||||
lose user intent (e.g. reassignment flow in admin sheet).
|
||||
|
||||
### 8.3 Fullscreen/newer APIs policy
|
||||
|
||||
- Fullscreen APIs (`requestFullscreen`, `exitFullscreen`) are currently optional and
|
||||
out of scope unless a feature explicitly requires immersive mode.
|
||||
- If fullscreen is introduced, review safe area/content safe area and verify
|
||||
`safeAreaChanged`, `contentSafeAreaChanged`, and `fullscreenChanged` handling.
|
||||
|
||||
---
|
||||
|
||||
## 9. Checklist for new screens and components
|
||||
@@ -215,3 +246,18 @@ Use this for review when adding or changing UI:
|
||||
- [ ] Safe area is respected for bottom padding and for sheets/modals.
|
||||
- [ ] Interactive elements and grids/lists have appropriate `aria-label`s and roles.
|
||||
- [ ] New animations respect `prefers-reduced-motion` and `data-perf="low"` (short or minimal on low-end Android).
|
||||
- [ ] User-facing strings and `aria-label`/`sr-only` text are localized via i18n (no hardcoded English in shared UI).
|
||||
- [ ] Telegram controls are connected through platform hooks (`src/hooks/telegram/*`) instead of direct SDK calls.
|
||||
- [ ] Vertical swipe and closing confirmation behavior follows the policy above.
|
||||
|
||||
## 10. Verification matrix (Mini App)
|
||||
|
||||
At minimum verify:
|
||||
|
||||
- Telegram light + dark themes.
|
||||
- iOS and Android safe area/content-safe-area behavior (portrait + landscape).
|
||||
- Android low-performance behavior (`data-perf="low"`).
|
||||
- Deep link current duty (`startParam=duty`).
|
||||
- Direct `/admin` open and reassignment flow.
|
||||
- Access denied, not-found, and error boundary screens.
|
||||
- Calendar swipe navigation with sticky header and native Telegram controls.
|
||||
|
||||
Reference in New Issue
Block a user