Both icons stay mounted, always. The "copy" glyph and the checkmark are absolutely positioned on top of each other inside a fixed-size wrapper, cross-fading opacity and scale off a single shared value. Conditionally rendering one or the other would unmount/remount the icon on every tap and cause a visible pop instead of a clean cross-fade.
withTiming, not withSpring, on purpose. A copy button is one of the most repeatedly-tapped controls in an app, copying an API key, an install command, a wallet address, again and again, and any spring overshoot on the icon morph gets old by the third tap. Easing.out on the way in, Easing.in on the way out.
The haptic and the clipboard write both fire on press-in, not on press. Feedback has to land the instant the finger touches down; waiting for the full press-release would make the checkmark feel like it's lagging behind the tap.
Re-tapping while already "copied" restarts the clock. The pending revert timeout is cleared and re-armed on every press, so mashing the button doesn't cause an early revert while the value is still fresh on the clipboard.