Prompt 02: Arc Selection Wheel (Gesture & Layout)
Goal: Build the interactive arc-based selection wheel (the "Card Picker").
Design Requirements (from Master Design Guide):
- OLED Noir: Background must be absolute black (
#000000). - Ritual Pacing: The motion must feel heavy and intentional. Use
react-native-reanimatedwithuseAnimatedGestureHandleroruseSharedValue. - Haptic Feedback:
- Small, sharp haptic "tick" on card select.
- Subtle, low-intensity haptic vibration while the wheel spins to mimic physical resistance.
- Gesture Control:
PanGestureHandlerfor the rotation.RotationGestureHandlerorPanGestureHandlerto spin the wheel of cards.
- Layout:
- Cards positioned along an arc.
- Visible area: ONLY the upper arc of cards is shown (as in web).
- Responsive: Handle mobile screens. Use safe areas.
- Animations:
- Entrance: Cards should stagger in (
useAnimatedStyle,stagger). - Spin: Inertia-based rotation, similar to the web version.
- Drag hand: A visual hint (the drag icon) for users to interact, fading after the first user interaction.
- Entrance: Cards should stagger in (
Technical Specs:
- Technology:
react-native-reanimated,react-native-gesture-handler. - Logic:
- Card positions need to be calculated based on an angle on a circle of radius R.
- Rotation: The wheel
rotatevalue should be a shared value updated on pan. - Inertia: Use
withDecayfor the spin animation to feel realistic.
- Rendering:
FlatListis probably bad for circular layouts. Use aViewwith absolute positioning for cards in auseMemocalculation based on the circle radius.
Deliverable:
src/components/CardPickerWheel.tsx(The wheel)src/components/CardPickerCard.tsx(Individual card rendering with flip state and animations)