+ {/* SVG background circles */}
+
+
+
+
+
+
+
+
+
+ {/* Circle A fill */}
+
+ {/* Circle B fill */}
+
+ {/* Intersection highlight */}
+
+
+
+ {/* Group A label */}
+
+
+ {data.groupAName}
+
+
+
+ {/* Group B label */}
+
+
+ {data.groupBName}
+
+
+
+ {/* Region A-only */}
+ {
+ if (el) {
+ regionRefs.current.a = el;
+ }
+ }}
+ style={{
+ top: `${((CY_A - R + 14) / vbH) * 100}%`,
+ height: `${((OVERLAP_TOP - (CY_A - R + 14)) / vbH) * 100}%`
+ }}
+ onClick={() => handleRegionClick("a")}
+ >
+ {keywordsByRegion("a").map(kw => (
+
+ ))}
+ {keywordsByRegion("a").length === 0 && (
+ タップしてキーワードを追加
+ )}
+
+
+ {/* Region Intersection */}
+ {
+ if (el) {
+ regionRefs.current.both = el;
+ }
+ }}
+ style={{
+ top: `${(OVERLAP_TOP / vbH) * 100}%`,
+ height: `${((OVERLAP_BOT - OVERLAP_TOP) / vbH) * 100}%`
+ }}
+ onClick={() => handleRegionClick("both")}
+ >
+ {keywordsByRegion("both").map(kw => (
+
+ ))}
+ {keywordsByRegion("both").length === 0 && (
+ 共通領域
+ )}
+
+
+ {/* Region B-only */}
+ {
+ if (el) {
+ regionRefs.current.b = el;
+ }
+ }}
+ style={{
+ top: `${(OVERLAP_BOT / vbH) * 100}%`,
+ height: `${((CY_B + R - 14 - OVERLAP_BOT) / vbH) * 100}%`
+ }}
+ onClick={() => handleRegionClick("b")}
+ >
+ {keywordsByRegion("b").map(kw => (
+
+ ))}
+ {keywordsByRegion("b").length === 0 && (
+ タップしてキーワードを追加
+ )}
+
+
+