Two UX fixes for the peek preview:
1. Black flash on first peek — the preview VC now depends on SDWebImage
directly (same version pinned by expo-image) and reads from
`SDImageCache.shared`. On open it paints the fullsize synchronously if it's
cached (common, since onPressIn prefetches), otherwise paints the thumb as a
placeholder while the fullsize loads and swaps in. Also switches the image
view to autoresizingMask so the dismiss animation interpolates cleanly
without AutoLayout relayout mid-animation.
2. Two-stage dismiss animation on aspect-mismatched thumbnails — drop the
explicit `previewForDismissingMenuWithConfiguration` override. With only
the highlight provider implemented iOS reverses it end-to-end, which
interpolates size and position together instead of snapping back to the
preview's original size before translating.
https://claude.ai/code/session_015REmux3R9uuEMMJUHxTyQT
Thread onPreviewPress(index) through ImageLayoutGrid / GalleryItem and the
Gallery scroll item so multi-image embeds get the same iOS peek behaviour as
single-image embeds. Each grid cell wraps its Pressable in ImageContextMenu
with the image's true aspect ratio, so the preview lifts to the full
uncropped image even when the cell is cropped to square.
https://claude.ai/code/session_015REmux3R9uuEMMJUHxTyQT