About this drop
The interaction is one Gesture.Pan from react-native-gesture-handler with activateAfterLongPress(350): moving 10pt before the press registers fails it, so a surrounding ScrollView still scrolls, and once active it keeps tracking the finger anywhere on screen. Its callbacks are worklets, so opening, hit-testing and releasing all run on the UI thread; only the expo-haptics calls hop to the JS thread through scheduleOnRN. Reanimated 4 does the animation work. The popup reads a single shared value clock and derives every style from it: the pill width on Telegram's cubic-bezier(.38, .7, .125, 1) over 300ms, the corner radius, and a staggered pop-in spring for each avatar that re-times Telegram's CASpringAnimation (mass 5, stiffness 900, damping 88) to 400ms. Hover focus is one animated array, and selection hit-tests the target layout rather than the in-flight one. Toasts live in two pre-mounted slots, so a send starts on the frame the finger lifts; the avatar rides a 10-point parabola inside the sliding toast, then react-native-svg masks animate the checkmark or the Saved Messages envelope. The pill, name tags and toast use expo-blur. Built and checked on the iOS simulator with Expo SDK 56 in a development build. Android and Expo Go are untested; on Android, expo-blur shows a plain translucent tint by default, and the SF Symbols icons and liquid glass bars are iOS-only.