Skip to content

Polish UX across all screens, renderers, and UI primitives#61

Merged
xuyushun441-sys merged 3 commits into
mainfrom
ux/mobile-polish
May 31, 2026
Merged

Polish UX across all screens, renderers, and UI primitives#61
xuyushun441-sys merged 3 commits into
mainfrom
ux/mobile-polish

Conversation

@xuyushun441-sys
Copy link
Copy Markdown
Contributor

Summary

Bring the entire mobile app up to top-tier mobile-app UX standards. Every screen, view renderer, and shared UI primitive now has consistent loading skeletons, badged empty/error states, press feedback, haptics, and accessibility.

Changes

  • Design system: Button loading state + active scale + haptics; Input left/right slots + focus/error states; new EmptyState, ListSkeleton, and PressableCard primitives.
  • Screens: skeleton loaders, badged empty/error states with retry, press feedback + a11y across auth, tabs, account, and (app) routes.
  • View renderers: replaced full-screen spinners with context-appropriate skeletons (list / kanban / calendar / timeline / map / gantt / chart / report / page / gallery / image); badged EmptyState for empty & error; press feedback on rows/cards; swipe-action a11y.
  • UI primitives: haptics + press feedback + a11y on Switch, Checkbox, Select, MultiSelect, Tabs, DatePicker; BottomSheet/Toast a11y; SearchBar clear button; FloatingActionButton haptics.
  • Auth fix: stamp Origin header from the client (RN lacks the @better-auth/expo plugin) to fix the "Miss origin" login error.

Verification

  • npx tsc --noEmit — clean
  • npx eslint on all changed files — clean
  • iOS native bundle compiles via Metro (HTTP 200, no resolution/transform errors)
  • Public sign-in screen renders correctly in web preview

Notes

  • No new native modules introduced — all changes are JS/TSX, so no native rebuild is required (existing dev clients pick up changes via Metro).
  • .env intentionally excluded from the commit.

os-zhuang added 3 commits May 31, 2026 07:59
Bring the whole app up to top-tier mobile-app UX standards:

- Design system: Button loading state + active scale + haptics; Input
  left/right slots + focus/error states; new EmptyState, ListSkeleton,
  and PressableCard primitives.
- Screens: skeleton loaders, badged empty/error states with retry,
  press feedback + a11y across auth, tabs, account, and (app) routes.
- View renderers: replaced full-screen spinners with context-appropriate
  skeletons (list/kanban/calendar/timeline/map/gantt/chart/report/page/
  gallery/image), badged EmptyState for empty/error, press feedback on
  rows/cards, swipe-action a11y.
- UI primitives: haptics + press feedback + a11y on Switch, Checkbox,
  Select, MultiSelect, Tabs, DatePicker; BottomSheet/Toast a11y;
  SearchBar clear button; FAB haptics.
- Auth: stamp Origin header from client (RN lacks @better-auth/expo
  plugin) to fix "Miss origin" login error.
- Initialize i18next at app root (import ~/lib/i18n) so all t() resolve;
  previously only LanguageSelector imported it, leaving every screen
  showing raw keys ('missing i18n resources').
- Mount the previously-unmounted ToastProvider so useToast() works.
- Add apiFetch()/getApiUrl() to lib/objectstack for authed non-SDK routes
  (carries better-auth cookie + CSRF Origin header).
- Add lib/record-actions engine (confirm -> params -> dispatch by type:
  url/flow/api/script/modal -> toast/result dialog/refresh), modeled on
  the objectui ActionRunner.
- Add hooks/useRecordActions wiring the engine to native UI (Alert confirm,
  param BottomSheet, result Modal, toasts, per-button spinner).
- Enhance DetailViewRenderer with variant-styled header action buttons and
  a '...' overflow menu for record_more actions.
- Wire meta.actions into the record detail screen, filtered by location and
  visibility.
- Localize new action strings (actions.*) into en/zh/ar.
# Conflicts:
#	app/(auth)/sign-in.tsx
#	app/(auth)/sign-up.tsx
@xuyushun441-sys xuyushun441-sys merged commit d786ff3 into main May 31, 2026
1 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants