zelune 1.6.1 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/src/canvas/FlowArrowsLayer.tsx +15 -12
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to the **Zelune — React Native Visual Canvas & MCP** project are documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.6.2] - 2026-10-24
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- **Corridor-Routed Interconnection Wires Behind Artboard Layer (`src/canvas/FlowArrowsLayer.tsx`)**:
|
|
9
|
+
- Restored `<FlowArrowsLayer />` to `zIndex: 5` (below the `zIndex: 10` / `20` `<ScreenArtboard />` frames) so interconnection wires and badges never draw over any screen's UI.
|
|
10
|
+
- Updated same-row and cross-row Bezier routing to route non-adjacent same-row connections through the open horizontal corridor underneath the row (`58px–136px` arch depth) and adjacent connections through the open vertical alley between neighbor screens.
|
|
11
|
+
|
|
5
12
|
## [1.6.1] - 2026-10-24
|
|
6
13
|
|
|
7
14
|
### Security
|
package/package.json
CHANGED
package/plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zelune",
|
|
3
3
|
"displayName": "Zelune — React Native Visual Canvas",
|
|
4
|
-
"version": "1.6.
|
|
4
|
+
"version": "1.6.2",
|
|
5
5
|
"description": "Zelune MCP & Figma-style multi-screen React Native visual canvas with live surgical AST patching and navigation flow visualization for Google Antigravity.",
|
|
6
6
|
"logo": "assets/logo.svg",
|
|
7
7
|
"suggestedPrompts": [
|
|
@@ -39,7 +39,7 @@ export const FlowArrowsLayer: React.FC<FlowArrowsLayerProps> = React.memo(({
|
|
|
39
39
|
height: 6000,
|
|
40
40
|
pointerEvents: 'none',
|
|
41
41
|
overflow: 'visible',
|
|
42
|
-
zIndex:
|
|
42
|
+
zIndex: 5,
|
|
43
43
|
}}
|
|
44
44
|
>
|
|
45
45
|
<defs>
|
|
@@ -99,47 +99,50 @@ export const FlowArrowsLayer: React.FC<FlowArrowsLayerProps> = React.memo(({
|
|
|
99
99
|
let endY: number;
|
|
100
100
|
|
|
101
101
|
if (sameRow) {
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
const horizontalGap = toBox.x - (fromBox.x + fromBox.width);
|
|
103
|
+
const isAdjacentForward = toBox.x > fromBox.x && horizontalGap <= 240;
|
|
104
|
+
|
|
105
|
+
if (isAdjacentForward) {
|
|
106
|
+
// Directly adjacent neighbors in the same row: connect across the empty vertical alley
|
|
104
107
|
startX = fromBox.x + fromBox.width;
|
|
105
108
|
startY = fromBox.y + ARTBOARD_HEADER_OFFSET + fromBox.height * 0.45 + verticalSlot;
|
|
106
109
|
endX = toBox.x;
|
|
107
110
|
endY = toBox.y + ARTBOARD_HEADER_OFFSET + toBox.height * 0.36 + verticalSlot * 0.6;
|
|
108
|
-
const dx = Math.max(
|
|
111
|
+
const dx = Math.max(60, Math.abs(endX - startX) * 0.45);
|
|
109
112
|
cp1X = startX + dx;
|
|
110
113
|
cp1Y = startY;
|
|
111
114
|
cp2X = endX - dx;
|
|
112
115
|
cp2Y = endY;
|
|
113
116
|
} else {
|
|
114
|
-
//
|
|
117
|
+
// Non-adjacent or return in same row: arch cleanly inside the empty horizontal corridor below the row
|
|
115
118
|
startX = fromBox.x + fromBox.width * 0.5 + horizontalSlot * 0.5;
|
|
116
119
|
startY = fromBox.y + ARTBOARD_HEADER_OFFSET + fromBox.height;
|
|
117
120
|
endX = toBox.x + toBox.width * 0.5 - horizontalSlot * 0.5;
|
|
118
121
|
endY = toBox.y + ARTBOARD_HEADER_OFFSET + toBox.height;
|
|
119
|
-
const archDepth =
|
|
122
|
+
const archDepth = 58 + (idx % 4) * 26;
|
|
120
123
|
cp1X = startX;
|
|
121
124
|
cp1Y = startY + archDepth;
|
|
122
125
|
cp2X = endX;
|
|
123
126
|
cp2Y = endY + archDepth;
|
|
124
127
|
}
|
|
125
128
|
} else if (toBox.y > fromBox.y) {
|
|
126
|
-
// Cross-row downward connection
|
|
129
|
+
// Cross-row downward connection through the horizontal corridor between rows
|
|
127
130
|
startX = fromBox.x + fromBox.width * 0.5 + horizontalSlot;
|
|
128
131
|
startY = fromBox.y + ARTBOARD_HEADER_OFFSET + fromBox.height;
|
|
129
132
|
endX = toBox.x + toBox.width * 0.5 + horizontalSlot * 0.6;
|
|
130
|
-
endY = toBox.y
|
|
131
|
-
const dy = Math.max(
|
|
133
|
+
endY = toBox.y;
|
|
134
|
+
const dy = Math.max(70, Math.min(140, Math.abs(endY - startY) * 0.45));
|
|
132
135
|
cp1X = startX;
|
|
133
136
|
cp1Y = startY + dy;
|
|
134
137
|
cp2X = endX;
|
|
135
138
|
cp2Y = endY - dy;
|
|
136
139
|
} else {
|
|
137
|
-
// Cross-row upward return connection
|
|
140
|
+
// Cross-row upward return connection through the horizontal corridor between rows
|
|
138
141
|
startX = fromBox.x + fromBox.width * 0.5 + horizontalSlot;
|
|
139
|
-
startY = fromBox.y
|
|
142
|
+
startY = fromBox.y;
|
|
140
143
|
endX = toBox.x + toBox.width * 0.5 + horizontalSlot * 0.6;
|
|
141
144
|
endY = toBox.y + ARTBOARD_HEADER_OFFSET + toBox.height;
|
|
142
|
-
const dy = Math.max(
|
|
145
|
+
const dy = Math.max(70, Math.min(140, Math.abs(startY - endY) * 0.45));
|
|
143
146
|
cp1X = startX;
|
|
144
147
|
cp1Y = startY - dy;
|
|
145
148
|
cp2X = endX;
|