diff --git a/crates/op-editor-ui/src/widgets/figma_import.rs b/crates/op-editor-ui/src/widgets/figma_import.rs index 491e9d109..c28ef6609 100644 --- a/crates/op-editor-ui/src/widgets/figma_import.rs +++ b/crates/op-editor-ui/src/widgets/figma_import.rs @@ -57,9 +57,9 @@ impl FigmaImportModal { if rect_contains(close_rect(panel), point) { return FigmaImportHit::Close; } - // Drop zone is paint-only until the `.fig` parser lands — - // returning `DropZone` would surface a stub picker that the - // backend can't actually consume. + if rect_contains(drop_zone_rect(panel), point) { + return FigmaImportHit::DropZone; + } FigmaImportHit::Inside } } @@ -92,14 +92,10 @@ fn rect_contains(r: Rect, p: Point2D) -> bool { } fn t(locale: Locale, key: &str) -> &'static str { - // Drop-zone copy is intentionally non-actionable: the .fig parser - // isn't wired yet, so promising "drop a file here / or click to - // browse" would lie. The "drop" key resolves to a "not yet wired" - // line so the affordance reads as informational. match key { "title" => op_i18n::translate(locale, "figma.title"), - "drop" => op_i18n::translate(locale, "figma.importNotWired"), - "browse" => op_i18n::translate(locale, "figma.comingSoon"), + "drop" => op_i18n::translate(locale, "figma.dropFile"), + "browse" => op_i18n::translate(locale, "figma.orBrowse"), "footer" => op_i18n::translate(locale, "figma.exportTip"), _ => "", } @@ -225,3 +221,21 @@ fn to_jian(c: Color) -> jian_core::scene::Color { } jian_core::scene::Color::rgba(ch(c.r), ch(c.g), ch(c.b), ch(c.a)) } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn clicking_drop_zone_requests_figma_import() { + let modal = FigmaImportModal::for_editor(&EditorState::new()); + let panel = modal.rect(800.0, 600.0); + let drop = drop_zone_rect(panel); + let point = Point2D::new( + drop.origin.x + drop.size.x / 2.0, + drop.origin.y + drop.size.y / 2.0, + ); + + assert_eq!(modal.hit_test(panel, point), FigmaImportHit::DropZone); + } +}