Add iOS peek long-press context menu for image embeds

Introduces expo-bluesky-context-menu, a compositional Root/Trigger/Menu/MenuItem
wrapper around UIContextMenuInteraction. The preview ViewController is sized to
the image's true aspect ratio so tall/panorama previews don't stretch mid-lift,
and menu icons are rasterized from the app's SVG icon set on the native side.

The preview prop is a discriminated union (image today; video and externalCard
reserved) so the same module can back those embeds in follow-ups.

https://claude.ai/code/session_015REmux3R9uuEMMJUHxTyQT
This commit is contained in:
Claude
2026-04-19 06:58:26 +00:00
committed by Samuel Newman
parent ebed23657f
commit d4fd15dc20
24 changed files with 1157 additions and 21 deletions
@@ -0,0 +1,23 @@
import ExpoModulesCore
public class ExpoBlueskyContextMenuModule: Module {
public func definition() -> ModuleDefinition {
Name("ExpoBlueskyContextMenu")
View(ExpoBlueskyContextMenuView.self) {
Events(["onItemPress", "onPreviewPress"])
Prop("preview") { (view: ExpoBlueskyContextMenuView, value: [String: Any]?) in
view.setPreview(value)
}
Prop("menuItems") { (view: ExpoBlueskyContextMenuView, value: [[String: Any]]) in
view.setMenuItems(value)
}
Prop("borderRadius") { (view: ExpoBlueskyContextMenuView, value: Double) in
view.setBorderRadius(value)
}
}
}
}