@@ -76,15 +76,82 @@ export function ClickableNode({ data }: NodeProps<NodeData>) {
7676 tabIndex = { isClickable ? 0 : - 1 }
7777 aria-label = { isClickable ? `Navigate to ${ link || label } ` : label }
7878 >
79- { /* Connection handles on all 4 sides for Draw.io edge routing */ }
79+ { /* Connection handles — 4 sides, 3 positions per side (20/50/80%), plus legacy
80+ midpoint-only ids (e.g. "top-source") for the draw.io converter that doesn't
81+ emit along-side offsets. */ }
82+ { /* Top — legacy midpoint */ }
8083 < Handle id = "top-target" type = "target" position = { Position . Top } />
8184 < Handle id = "top-source" type = "source" position = { Position . Top } />
85+ { /* Top — 20/50/80 */ }
86+ < Handle id = "top-20-target" type = "target" position = { Position . Top } style = { { left : '20%' } } />
87+ < Handle id = "top-20-source" type = "source" position = { Position . Top } style = { { left : '20%' } } />
88+ < Handle id = "top-50-target" type = "target" position = { Position . Top } style = { { left : '50%' } } />
89+ < Handle id = "top-50-source" type = "source" position = { Position . Top } style = { { left : '50%' } } />
90+ < Handle id = "top-80-target" type = "target" position = { Position . Top } style = { { left : '80%' } } />
91+ < Handle id = "top-80-source" type = "source" position = { Position . Top } style = { { left : '80%' } } />
92+
93+ { /* Right — legacy midpoint */ }
8294 < Handle id = "right-target" type = "target" position = { Position . Right } />
8395 < Handle id = "right-source" type = "source" position = { Position . Right } />
96+ { /* Right — 20/50/80 */ }
97+ < Handle id = "right-20-target" type = "target" position = { Position . Right } style = { { top : '20%' } } />
98+ < Handle id = "right-20-source" type = "source" position = { Position . Right } style = { { top : '20%' } } />
99+ < Handle id = "right-50-target" type = "target" position = { Position . Right } style = { { top : '50%' } } />
100+ < Handle id = "right-50-source" type = "source" position = { Position . Right } style = { { top : '50%' } } />
101+ < Handle id = "right-80-target" type = "target" position = { Position . Right } style = { { top : '80%' } } />
102+ < Handle id = "right-80-source" type = "source" position = { Position . Right } style = { { top : '80%' } } />
103+
104+ { /* Bottom — legacy midpoint */ }
84105 < Handle id = "bottom-target" type = "target" position = { Position . Bottom } />
85106 < Handle id = "bottom-source" type = "source" position = { Position . Bottom } />
107+ { /* Bottom — 20/50/80 */ }
108+ < Handle
109+ id = "bottom-20-target"
110+ type = "target"
111+ position = { Position . Bottom }
112+ style = { { left : '20%' } }
113+ />
114+ < Handle
115+ id = "bottom-20-source"
116+ type = "source"
117+ position = { Position . Bottom }
118+ style = { { left : '20%' } }
119+ />
120+ < Handle
121+ id = "bottom-50-target"
122+ type = "target"
123+ position = { Position . Bottom }
124+ style = { { left : '50%' } }
125+ />
126+ < Handle
127+ id = "bottom-50-source"
128+ type = "source"
129+ position = { Position . Bottom }
130+ style = { { left : '50%' } }
131+ />
132+ < Handle
133+ id = "bottom-80-target"
134+ type = "target"
135+ position = { Position . Bottom }
136+ style = { { left : '80%' } }
137+ />
138+ < Handle
139+ id = "bottom-80-source"
140+ type = "source"
141+ position = { Position . Bottom }
142+ style = { { left : '80%' } }
143+ />
144+
145+ { /* Left — legacy midpoint */ }
86146 < Handle id = "left-target" type = "target" position = { Position . Left } />
87147 < Handle id = "left-source" type = "source" position = { Position . Left } />
148+ { /* Left — 20/50/80 */ }
149+ < Handle id = "left-20-target" type = "target" position = { Position . Left } style = { { top : '20%' } } />
150+ < Handle id = "left-20-source" type = "source" position = { Position . Left } style = { { top : '20%' } } />
151+ < Handle id = "left-50-target" type = "target" position = { Position . Left } style = { { top : '50%' } } />
152+ < Handle id = "left-50-source" type = "source" position = { Position . Left } style = { { top : '50%' } } />
153+ < Handle id = "left-80-target" type = "target" position = { Position . Left } style = { { top : '80%' } } />
154+ < Handle id = "left-80-source" type = "source" position = { Position . Left } style = { { top : '80%' } } />
88155
89156 < div className = "node-content" style = { contentStyle } >
90157 { labelContent }
0 commit comments