ChatThreadList can actually render ChatThreadListSearch in two different places: inside the FlatList, and right above it.
We render it inside the FlatList to start, but when the user focuses the search bar, we "dock" it so that the user can still see it while they scroll through the search results.
If we don't lift cancelButtonExpansion, the dismissal animation doesn't work, because it's initiated on a component that is then unmounted.
By lifting this SharedValue, we allow it to be shared between the two components that are mounted in different places.
Depends on D12166