Position-based, not translation-based. Instead of tracking relative finger movement like a slider would, Rating reads the pan gesture's absolute x position inside the row and divides it by a fixed per-star slot width to get the target star. That means a plain tap and a drag both land on the correct star immediately, with a single gesture handling both instead of a separate tap handler bolted on.
No layout measurement required. Each star sits in a fixed-width slot (icon size plus gap), so the total row width is computed from max, not measured via onLayout, the gesture math and the rendered layout are guaranteed to agree.
A ref, not a shared value, gates the haptic. The commit step runs on the JS thread and compares against a plain ref of the last committed value, so the selection haptic fires once per star crossed, not once per gesture frame.
Each star owns its own pop. Every star animates its own scale from a resting inactive size up to full size with a quick timing ease when it flips active, no spring, consistent with how this library treats controls you interact with repeatedly.