Polish UX across all screens, renderers, and UI primitives#61
Merged
Conversation
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
Buttonloading state + active scale + haptics;Inputleft/right slots + focus/error states; newEmptyState,ListSkeleton, andPressableCardprimitives.(app)routes.EmptyStatefor empty & error; press feedback on rows/cards; swipe-action a11y.Switch,Checkbox,Select,MultiSelect,Tabs,DatePicker;BottomSheet/Toasta11y;SearchBarclear button;FloatingActionButtonhaptics.Originheader from the client (RN lacks the@better-auth/expoplugin) to fix the "Miss origin" login error.Verification
npx tsc --noEmit— cleannpx eslinton all changed files — cleanNotes
.envintentionally excluded from the commit.