@akiojin/gwt 4.2.0 → 4.3.1
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/dist/claude.d.ts +2 -0
- package/dist/claude.d.ts.map +1 -1
- package/dist/claude.js +49 -2
- package/dist/claude.js.map +1 -1
- package/dist/cli/ui/components/App.d.ts.map +1 -1
- package/dist/cli/ui/components/App.js +68 -68
- package/dist/cli/ui/components/App.js.map +1 -1
- package/dist/cli/ui/components/screens/BranchListScreen.d.ts.map +1 -1
- package/dist/cli/ui/components/screens/BranchListScreen.js +6 -1
- package/dist/cli/ui/components/screens/BranchListScreen.js.map +1 -1
- package/dist/client/assets/index-ChHC-Puh.css +1 -0
- package/dist/client/assets/index-PqK9jkug.js +78 -0
- package/dist/client/index.html +2 -2
- package/dist/config/builtin-tools.d.ts.map +1 -1
- package/dist/config/builtin-tools.js +3 -0
- package/dist/config/builtin-tools.js.map +1 -1
- package/dist/config/tools.d.ts.map +1 -1
- package/dist/config/tools.js +10 -1
- package/dist/config/tools.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/launcher.d.ts.map +1 -1
- package/dist/launcher.js +15 -0
- package/dist/launcher.js.map +1 -1
- package/dist/services/aiToolResolver.d.ts.map +1 -1
- package/dist/services/aiToolResolver.js +55 -8
- package/dist/services/aiToolResolver.js.map +1 -1
- package/dist/services/customToolResolver.d.ts.map +1 -1
- package/dist/services/customToolResolver.js +22 -17
- package/dist/services/customToolResolver.js.map +1 -1
- package/dist/utils/webui.js +1 -1
- package/dist/web/client/src/components/BranchGraph.d.ts +5 -0
- package/dist/web/client/src/components/BranchGraph.d.ts.map +1 -1
- package/dist/web/client/src/components/BranchGraph.js +35 -108
- package/dist/web/client/src/components/BranchGraph.js.map +1 -1
- package/dist/web/client/src/components/graph/BranchDetailPanel.d.ts +15 -0
- package/dist/web/client/src/components/graph/BranchDetailPanel.d.ts.map +1 -0
- package/dist/web/client/src/components/graph/BranchDetailPanel.js +57 -0
- package/dist/web/client/src/components/graph/BranchDetailPanel.js.map +1 -0
- package/dist/web/client/src/components/graph/BranchNode.d.ts +13 -0
- package/dist/web/client/src/components/graph/BranchNode.d.ts.map +1 -0
- package/dist/web/client/src/components/graph/BranchNode.js +103 -0
- package/dist/web/client/src/components/graph/BranchNode.js.map +1 -0
- package/dist/web/client/src/components/graph/ClusterNode.d.ts +13 -0
- package/dist/web/client/src/components/graph/ClusterNode.d.ts.map +1 -0
- package/dist/web/client/src/components/graph/ClusterNode.js +109 -0
- package/dist/web/client/src/components/graph/ClusterNode.js.map +1 -0
- package/dist/web/client/src/components/graph/SynapticCanvas.d.ts +17 -0
- package/dist/web/client/src/components/graph/SynapticCanvas.d.ts.map +1 -0
- package/dist/web/client/src/components/graph/SynapticCanvas.js +94 -0
- package/dist/web/client/src/components/graph/SynapticCanvas.js.map +1 -0
- package/dist/web/client/src/components/graph/SynapticEdge.d.ts +13 -0
- package/dist/web/client/src/components/graph/SynapticEdge.d.ts.map +1 -0
- package/dist/web/client/src/components/graph/SynapticEdge.js +113 -0
- package/dist/web/client/src/components/graph/SynapticEdge.js.map +1 -0
- package/dist/web/client/src/components/graph/graphUtils.d.ts +67 -0
- package/dist/web/client/src/components/graph/graphUtils.d.ts.map +1 -0
- package/dist/web/client/src/components/graph/graphUtils.js +175 -0
- package/dist/web/client/src/components/graph/graphUtils.js.map +1 -0
- package/dist/web/client/src/components/graph/index.d.ts +10 -0
- package/dist/web/client/src/components/graph/index.d.ts.map +1 -0
- package/dist/web/client/src/components/graph/index.js +10 -0
- package/dist/web/client/src/components/graph/index.js.map +1 -0
- package/dist/web/client/src/lib/websocket.d.ts.map +1 -1
- package/dist/web/client/src/lib/websocket.js +2 -1
- package/dist/web/client/src/lib/websocket.js.map +1 -1
- package/dist/web/client/vite.config.js +1 -1
- package/dist/web/server/env/importer.d.ts.map +1 -1
- package/dist/web/server/env/importer.js +4 -0
- package/dist/web/server/env/importer.js.map +1 -1
- package/dist/web/server/index.d.ts.map +1 -1
- package/dist/web/server/index.js +9 -0
- package/dist/web/server/index.js.map +1 -1
- package/dist/web/server/pty/manager.d.ts.map +1 -1
- package/dist/web/server/pty/manager.js +24 -1
- package/dist/web/server/pty/manager.js.map +1 -1
- package/dist/web/server/routes/sessions.d.ts.map +1 -1
- package/dist/web/server/routes/sessions.js +7 -0
- package/dist/web/server/routes/sessions.js.map +1 -1
- package/dist/web/server/tray.d.ts +1 -1
- package/dist/web/server/tray.d.ts.map +1 -1
- package/dist/web/server/tray.js +52 -34
- package/dist/web/server/tray.js.map +1 -1
- package/dist/web/server/websocket/handler.d.ts.map +1 -1
- package/dist/web/server/websocket/handler.js +4 -0
- package/dist/web/server/websocket/handler.js.map +1 -1
- package/package.json +5 -2
- package/src/claude.ts +57 -2
- package/src/cli/ui/__tests__/components/App.shortcuts.test.tsx +104 -0
- package/src/cli/ui/components/App.tsx +91 -81
- package/src/cli/ui/components/screens/BranchListScreen.tsx +6 -1
- package/src/cli/ui/types.ts +1 -1
- package/src/config/builtin-tools.ts +3 -0
- package/src/config/tools.ts +24 -1
- package/src/index.ts +3 -1
- package/src/launcher.ts +26 -0
- package/src/services/aiToolResolver.ts +75 -9
- package/src/services/customToolResolver.ts +32 -17
- package/src/utils/webui.ts +1 -1
- package/src/web/client/src/components/BranchGraph.tsx +51 -208
- package/src/web/client/src/components/graph/BranchDetailPanel.tsx +152 -0
- package/src/web/client/src/components/graph/BranchNode.tsx +200 -0
- package/src/web/client/src/components/graph/ClusterNode.tsx +211 -0
- package/src/web/client/src/components/graph/SynapticCanvas.tsx +171 -0
- package/src/web/client/src/components/graph/SynapticEdge.tsx +311 -0
- package/src/web/client/src/components/graph/graphUtils.ts +265 -0
- package/src/web/client/src/components/graph/index.ts +10 -0
- package/src/web/client/src/index.css +314 -29
- package/src/web/client/src/lib/websocket.ts +2 -1
- package/src/web/client/vite.config.ts +1 -1
- package/src/web/server/env/importer.ts +5 -0
- package/src/web/server/index.ts +10 -0
- package/src/web/server/pty/manager.ts +43 -1
- package/src/web/server/routes/sessions.ts +15 -0
- package/src/web/server/tray.ts +62 -46
- package/src/web/server/websocket/handler.ts +13 -0
- package/dist/client/assets/index-DsDNCy5f.css +0 -1
- package/dist/client/assets/index-v8smkNOL.js +0 -72
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customToolResolver.js","sourceRoot":"","sources":["../../src/services/customToolResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"customToolResolver.js","sourceRoot":"","sources":["../../src/services/customToolResolver.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/webui.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BranchGraph.d.ts","sourceRoot":"","sources":["../../../../../src/web/client/src/components/BranchGraph.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"BranchGraph.d.ts","sourceRoot":"","sources":["../../../../../src/web/client/src/components/BranchGraph.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAgC,MAAM,OAAO,CAAC;AAGrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGvD,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,qBA8EzD"}
|
|
@@ -1,122 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* ブランチグラフ - シナプス風ビジュアライゼーション
|
|
3
|
+
*
|
|
4
|
+
* React Flow + D3-forceによるインタラクティブなブランチ関係図
|
|
5
|
+
*/
|
|
6
|
+
import React, { useState, useCallback } from "react";
|
|
3
7
|
import { Card, CardHeader, CardContent } from "@/components/ui/card";
|
|
4
8
|
import { Badge } from "@/components/ui/badge";
|
|
5
|
-
import {
|
|
6
|
-
const UNKNOWN_BASE = "__unknown__";
|
|
7
|
-
function formatBranchLabel(branch) {
|
|
8
|
-
return branch.name.length > 32
|
|
9
|
-
? `${branch.name.slice(0, 29)}...`
|
|
10
|
-
: branch.name;
|
|
11
|
-
}
|
|
12
|
-
function getDivergenceLabel(branch) {
|
|
13
|
-
if (!branch.divergence) {
|
|
14
|
-
return "divergence: n/a";
|
|
15
|
-
}
|
|
16
|
-
const { ahead, behind, upToDate } = branch.divergence;
|
|
17
|
-
if (upToDate) {
|
|
18
|
-
return "divergence: up-to-date";
|
|
19
|
-
}
|
|
20
|
-
return `divergence: +${ahead} / -${behind}`;
|
|
21
|
-
}
|
|
9
|
+
import { SynapticCanvas, BranchDetailPanel } from "./graph";
|
|
22
10
|
export function BranchGraph({ branches }) {
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
return baseSet;
|
|
34
|
-
}, [branches]);
|
|
35
|
-
const lanes = useMemo(() => {
|
|
36
|
-
const laneMap = new Map();
|
|
37
|
-
branches.forEach((branch) => {
|
|
38
|
-
const base = branch.baseBranch ?? UNKNOWN_BASE;
|
|
39
|
-
if (!branch.baseBranch && referencedBases.has(branch.name)) {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
if (!laneMap.has(base)) {
|
|
43
|
-
const baseNode = base !== UNKNOWN_BASE ? (branchMap.get(base) ?? null) : null;
|
|
44
|
-
laneMap.set(base, {
|
|
45
|
-
id: base,
|
|
46
|
-
baseLabel: base === UNKNOWN_BASE ? "ベース不明" : base,
|
|
47
|
-
baseNode,
|
|
48
|
-
nodes: [],
|
|
49
|
-
isSyntheticBase: baseNode === null,
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
laneMap.get(base)?.nodes.push(branch);
|
|
53
|
-
});
|
|
54
|
-
return Array.from(laneMap.values()).sort((a, b) => {
|
|
55
|
-
if (a.id === UNKNOWN_BASE)
|
|
56
|
-
return 1;
|
|
57
|
-
if (b.id === UNKNOWN_BASE)
|
|
58
|
-
return -1;
|
|
59
|
-
return a.baseLabel.localeCompare(b.baseLabel, "ja");
|
|
60
|
-
});
|
|
61
|
-
}, [branches, branchMap, referencedBases]);
|
|
62
|
-
if (!lanes.length) {
|
|
11
|
+
const [selectedBranch, setSelectedBranch] = useState(null);
|
|
12
|
+
const handleNodeClick = useCallback((branch) => {
|
|
13
|
+
setSelectedBranch(branch);
|
|
14
|
+
}, []);
|
|
15
|
+
const handlePanelClose = useCallback(() => {
|
|
16
|
+
setSelectedBranch(null);
|
|
17
|
+
}, []);
|
|
18
|
+
if (!branches.length) {
|
|
63
19
|
return (React.createElement(Card, { className: "border-dashed" },
|
|
64
20
|
React.createElement(CardContent, { className: "flex flex-col items-center justify-center py-12 text-center" },
|
|
65
21
|
React.createElement("p", { className: "text-muted-foreground" }, "\u30B0\u30E9\u30D5\u8868\u793A\u3067\u304D\u308B\u30D6\u30E9\u30F3\u30C1\u304C\u3042\u308A\u307E\u305B\u3093\u3002"),
|
|
66
22
|
React.createElement("p", { className: "text-sm text-muted-foreground" }, "fetch\u6E08\u307F\u306E\u30D6\u30E9\u30F3\u30C1\u3084Worktree\u3092\u8FFD\u52A0\u3059\u308B\u3068\u95A2\u4FC2\u56F3\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002"))));
|
|
67
23
|
}
|
|
68
|
-
return (React.createElement(Card,
|
|
24
|
+
return (React.createElement(Card, { className: "relative overflow-hidden" },
|
|
69
25
|
React.createElement(CardHeader, { className: "pb-4" },
|
|
70
26
|
React.createElement("div", { className: "flex flex-wrap items-start justify-between gap-4" },
|
|
71
27
|
React.createElement("div", null,
|
|
72
|
-
React.createElement("p", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground" }, "
|
|
73
|
-
React.createElement("h2", { className: "mt-1 text-lg font-semibold" }, "\
|
|
74
|
-
React.createElement("p", { className: "mt-1 text-sm text-muted-foreground" }, "
|
|
28
|
+
React.createElement("p", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground" }, "SYNAPTIC GRAPH"),
|
|
29
|
+
React.createElement("h2", { className: "mt-1 text-lg font-semibold" }, "\u30D6\u30E9\u30F3\u30C1\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF"),
|
|
30
|
+
React.createElement("p", { className: "mt-1 text-sm text-muted-foreground" }, "\u30AF\u30EA\u30C3\u30AF\u3067\u30CE\u30FC\u30C9\u3092\u5C55\u958B\u30FB\u8A73\u7D30\u8868\u793A\u3002\u30C9\u30E9\u30C3\u30B0\u3067\u79FB\u52D5\u3001\u30B9\u30AF\u30ED\u30FC\u30EB\u3067\u30BA\u30FC\u30E0\u3002")),
|
|
75
31
|
React.createElement("div", { className: "flex flex-wrap gap-2" },
|
|
76
|
-
React.createElement(Badge, { variant: "outline"
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
React.createElement(Badge, { variant: "
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
lane.nodes.map((branch) => (React.createElement(BranchNode, { key: branch.name, branch: branch }))))))))));
|
|
93
|
-
}
|
|
94
|
-
function renderBaseNode(lane) {
|
|
95
|
-
const label = lane.baseLabel === "ベース不明" ? "Unknown base" : lane.baseLabel;
|
|
96
|
-
const content = (React.createElement("div", { className: cn("group relative rounded-md border bg-card px-3 py-2 transition-colors hover:border-muted-foreground/50", lane.baseNode?.type === "local" && "border-l-2 border-l-local", lane.baseNode?.type === "remote" && "border-l-2 border-l-remote") },
|
|
97
|
-
React.createElement("span", { className: "block truncate text-sm font-medium" }, label),
|
|
98
|
-
React.createElement("span", { className: "text-xs text-muted-foreground" }, "BASE"),
|
|
99
|
-
React.createElement("div", { className: "invisible absolute bottom-full left-0 z-10 mb-2 w-48 rounded-md border bg-popover p-2 text-xs shadow-md group-hover:visible" },
|
|
100
|
-
React.createElement("p", { className: "font-medium" }, label),
|
|
101
|
-
React.createElement("p", { className: "text-muted-foreground" }, lane.baseNode
|
|
102
|
-
? `type: ${lane.baseNode.type}`
|
|
103
|
-
: "推定されたベースブランチ"))));
|
|
104
|
-
if (lane.baseNode) {
|
|
105
|
-
return (React.createElement(Link, { key: `base-${lane.id}`, to: `/${encodeURIComponent(lane.baseNode.name)}`, className: "block", "aria-label": `ベースブランチ ${lane.baseNode.name} を開く` }, content));
|
|
106
|
-
}
|
|
107
|
-
return React.createElement("div", { key: `base-${lane.id}` }, content);
|
|
108
|
-
}
|
|
109
|
-
function BranchNode({ branch }) {
|
|
110
|
-
const node = (React.createElement("div", { className: cn("group relative rounded-md border bg-card px-3 py-2 transition-colors hover:border-muted-foreground/50", branch.type === "local" && "border-l-2 border-l-local", branch.type === "remote" && "border-l-2 border-l-remote", branch.mergeStatus === "merged" && "opacity-60") },
|
|
111
|
-
React.createElement("span", { className: "block truncate text-sm font-medium" }, formatBranchLabel(branch)),
|
|
112
|
-
React.createElement("span", { className: "text-xs text-muted-foreground" }, branch.worktreePath ? "Worktree" : "No Worktree"),
|
|
113
|
-
React.createElement("div", { className: "invisible absolute bottom-full left-0 z-10 mb-2 w-56 rounded-md border bg-popover p-2 text-xs shadow-md group-hover:visible" },
|
|
114
|
-
React.createElement("p", { className: "font-medium" }, branch.name),
|
|
115
|
-
React.createElement("p", { className: "text-muted-foreground" },
|
|
116
|
-
"base: ",
|
|
117
|
-
branch.baseBranch ?? "unknown"),
|
|
118
|
-
React.createElement("p", { className: "text-muted-foreground" }, getDivergenceLabel(branch)),
|
|
119
|
-
React.createElement("p", { className: "text-muted-foreground" }, branch.worktreePath ?? "Worktree未作成"))));
|
|
120
|
-
return (React.createElement(Link, { to: `/${encodeURIComponent(branch.name)}`, className: "block", "aria-label": `${branch.name} の詳細を開く` }, node));
|
|
32
|
+
React.createElement(Badge, { variant: "outline", className: "flex items-center gap-1" },
|
|
33
|
+
React.createElement("span", { className: "h-2 w-2 rounded-full bg-muted-foreground/30" }),
|
|
34
|
+
"Cluster"),
|
|
35
|
+
React.createElement(Badge, { variant: "local", className: "flex items-center gap-1" },
|
|
36
|
+
React.createElement("span", { className: "h-2 w-2 rounded-full bg-local" }),
|
|
37
|
+
"Local"),
|
|
38
|
+
React.createElement(Badge, { variant: "remote", className: "flex items-center gap-1" },
|
|
39
|
+
React.createElement("span", { className: "h-2 w-2 rounded-full bg-remote" }),
|
|
40
|
+
"Remote"),
|
|
41
|
+
React.createElement(Badge, { variant: "success", className: "flex items-center gap-1" },
|
|
42
|
+
React.createElement("span", { className: "h-2 w-2 rounded-full bg-success" }),
|
|
43
|
+
"Worktree")))),
|
|
44
|
+
React.createElement(CardContent, { className: "relative p-0" },
|
|
45
|
+
React.createElement("div", { className: "relative h-[500px] w-full" },
|
|
46
|
+
React.createElement(SynapticCanvas, { branches: branches, onNodeClick: handleNodeClick, className: "h-full w-full" }),
|
|
47
|
+
React.createElement(BranchDetailPanel, { branch: selectedBranch, onClose: handlePanelClose })))));
|
|
121
48
|
}
|
|
122
49
|
//# sourceMappingURL=BranchGraph.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BranchGraph.js","sourceRoot":"","sources":["../../../../../src/web/client/src/components/BranchGraph.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"BranchGraph.js","sourceRoot":"","sources":["../../../../../src/web/client/src/components/BranchGraph.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAM5D,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAoB;IACxD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAE1E,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,MAAqB,EAAE,EAAE;QAC5D,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,CACL,oBAAC,IAAI,IAAC,SAAS,EAAC,eAAe;YAC7B,oBAAC,WAAW,IAAC,SAAS,EAAC,6DAA6D;gBAClF,2BAAG,SAAS,EAAC,uBAAuB,yHAEhC;gBACJ,2BAAG,SAAS,EAAC,+BAA+B,0KAExC,CACQ,CACT,CACR,CAAC;IACJ,CAAC;IAED,OAAO,CACL,oBAAC,IAAI,IAAC,SAAS,EAAC,0BAA0B;QACxC,oBAAC,UAAU,IAAC,SAAS,EAAC,MAAM;YAC1B,6BAAK,SAAS,EAAC,kDAAkD;gBAC/D;oBACE,2BAAG,SAAS,EAAC,oEAAoE,qBAE7E;oBACJ,4BAAI,SAAS,EAAC,4BAA4B,mEAAgB;oBAC1D,2BAAG,SAAS,EAAC,oCAAoC,yNAE7C,CACA;gBACN,6BAAK,SAAS,EAAC,sBAAsB;oBACnC,oBAAC,KAAK,IAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,yBAAyB;wBAC1D,8BAAM,SAAS,EAAC,6CAA6C,GAAG;kCAE1D;oBACR,oBAAC,KAAK,IAAC,OAAO,EAAC,OAAO,EAAC,SAAS,EAAC,yBAAyB;wBACxD,8BAAM,SAAS,EAAC,+BAA+B,GAAG;gCAE5C;oBACR,oBAAC,KAAK,IAAC,OAAO,EAAC,QAAQ,EAAC,SAAS,EAAC,yBAAyB;wBACzD,8BAAM,SAAS,EAAC,gCAAgC,GAAG;iCAE7C;oBACR,oBAAC,KAAK,IAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,yBAAyB;wBAC1D,8BAAM,SAAS,EAAC,iCAAiC,GAAG;mCAE9C,CACJ,CACF,CACK;QAEb,oBAAC,WAAW,IAAC,SAAS,EAAC,cAAc;YAEnC,6BAAK,SAAS,EAAC,2BAA2B;gBACxC,oBAAC,cAAc,IACb,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,eAAe,EAC5B,SAAS,EAAC,eAAe,GACzB;gBAGF,oBAAC,iBAAiB,IAChB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,gBAAgB,GACzB,CACE,CACM,CACT,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ブランチ詳細パネル
|
|
3
|
+
*
|
|
4
|
+
* ノードクリック時に右側に表示されるサイドパネル
|
|
5
|
+
*/
|
|
6
|
+
import React from "react";
|
|
7
|
+
import type { Branch } from "../../../../../types/api.js";
|
|
8
|
+
interface BranchDetailPanelProps {
|
|
9
|
+
branch: Branch | null;
|
|
10
|
+
onClose: () => void;
|
|
11
|
+
className?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function BranchDetailPanel({ branch, onClose, className, }: BranchDetailPanelProps): React.JSX.Element | null;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=BranchDetailPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BranchDetailPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/web/client/src/components/graph/BranchDetailPanel.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAE1D,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,OAAO,EACP,SAAS,GACV,EAAE,sBAAsB,4BAyHxB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ブランチ詳細パネル
|
|
3
|
+
*
|
|
4
|
+
* ノードクリック時に右側に表示されるサイドパネル
|
|
5
|
+
*/
|
|
6
|
+
import React from "react";
|
|
7
|
+
import { Link } from "react-router-dom";
|
|
8
|
+
import { X } from "lucide-react";
|
|
9
|
+
import { Badge } from "@/components/ui/badge";
|
|
10
|
+
import { Button } from "@/components/ui/button";
|
|
11
|
+
import { Card, CardHeader, CardContent, CardFooter, } from "@/components/ui/card";
|
|
12
|
+
import { cn } from "@/lib/utils";
|
|
13
|
+
export function BranchDetailPanel({ branch, onClose, className, }) {
|
|
14
|
+
if (!branch)
|
|
15
|
+
return null;
|
|
16
|
+
const hasWorktree = Boolean(branch.worktreePath);
|
|
17
|
+
return (React.createElement("div", { className: cn("absolute right-0 top-0 h-full w-80 border-l bg-card/95 backdrop-blur-sm", "animate-in slide-in-from-right duration-300", className) },
|
|
18
|
+
React.createElement(Card, { className: "h-full rounded-none border-0" },
|
|
19
|
+
React.createElement(CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-4" },
|
|
20
|
+
React.createElement("div", { className: "flex items-center gap-2" },
|
|
21
|
+
React.createElement(Badge, { variant: branch.type === "local" ? "local" : "remote" }, branch.type === "local" ? "Local" : "Remote"),
|
|
22
|
+
hasWorktree && React.createElement(Badge, { variant: "success" }, "Worktree")),
|
|
23
|
+
React.createElement(Button, { variant: "ghost", size: "icon", onClick: onClose, className: "h-8 w-8" },
|
|
24
|
+
React.createElement(X, { className: "h-4 w-4" }))),
|
|
25
|
+
React.createElement(CardContent, { className: "space-y-4" },
|
|
26
|
+
React.createElement("div", null,
|
|
27
|
+
React.createElement("p", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground" }, "Branch Name"),
|
|
28
|
+
React.createElement("p", { className: "mt-1 break-all font-mono text-sm" }, branch.name)),
|
|
29
|
+
React.createElement("div", null,
|
|
30
|
+
React.createElement("p", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground" }, "Base Branch"),
|
|
31
|
+
React.createElement("p", { className: "mt-1 font-mono text-sm" }, branch.baseBranch ?? "Unknown")),
|
|
32
|
+
React.createElement("div", null,
|
|
33
|
+
React.createElement("p", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground" }, "Last Commit"),
|
|
34
|
+
React.createElement("p", { className: "mt-1 text-sm text-muted-foreground" }, branch.commitMessage ?? "No commit message")),
|
|
35
|
+
branch.divergence && (React.createElement("div", null,
|
|
36
|
+
React.createElement("p", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground" }, "Divergence"),
|
|
37
|
+
React.createElement("div", { className: "mt-2 flex flex-wrap gap-2" },
|
|
38
|
+
React.createElement(Badge, { variant: "outline", className: "text-xs" },
|
|
39
|
+
"\u2191 ",
|
|
40
|
+
branch.divergence.ahead,
|
|
41
|
+
" ahead"),
|
|
42
|
+
React.createElement(Badge, { variant: "outline", className: "text-xs" },
|
|
43
|
+
"\u2193 ",
|
|
44
|
+
branch.divergence.behind,
|
|
45
|
+
" behind"),
|
|
46
|
+
React.createElement(Badge, { variant: branch.divergence.upToDate ? "success" : "warning", className: "text-xs" }, branch.divergence.upToDate ? "Up to date" : "Needs sync")))),
|
|
47
|
+
hasWorktree && (React.createElement("div", null,
|
|
48
|
+
React.createElement("p", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground" }, "Worktree Path"),
|
|
49
|
+
React.createElement("p", { className: "mt-1 break-all font-mono text-xs text-muted-foreground" }, branch.worktreePath))),
|
|
50
|
+
branch.mergeStatus && (React.createElement("div", null,
|
|
51
|
+
React.createElement("p", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground" }, "Merge Status"),
|
|
52
|
+
React.createElement(Badge, { variant: branch.mergeStatus === "merged" ? "success" : "outline", className: "mt-1" }, branch.mergeStatus)))),
|
|
53
|
+
React.createElement(CardFooter, { className: "flex flex-col gap-2" },
|
|
54
|
+
React.createElement(Button, { asChild: true, className: "w-full" },
|
|
55
|
+
React.createElement(Link, { to: `/${encodeURIComponent(branch.name)}` }, "View Details"))))));
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=BranchDetailPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BranchDetailPanel.js","sourceRoot":"","sources":["../../../../../../src/web/client/src/components/graph/BranchDetailPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ブランチノードコンポーネント
|
|
3
|
+
*
|
|
4
|
+
* ソーマ(神経細胞体)をイメージした生物発光ノード
|
|
5
|
+
* 多層グロー効果と有機的なアニメーションで生命感を表現
|
|
6
|
+
*/
|
|
7
|
+
import React from "react";
|
|
8
|
+
import { type NodeProps } from "@xyflow/react";
|
|
9
|
+
import { type GraphNode } from "./graphUtils";
|
|
10
|
+
type BranchNodeProps = NodeProps<GraphNode>;
|
|
11
|
+
export declare const BranchNode: React.NamedExoticComponent<BranchNodeProps>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=BranchNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BranchNode.d.ts","sourceRoot":"","sources":["../../../../../../src/web/client/src/components/graph/BranchNode.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAEjE,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzE,KAAK,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;AAE5C,eAAO,MAAM,UAAU,6CAyLrB,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ブランチノードコンポーネント
|
|
3
|
+
*
|
|
4
|
+
* ソーマ(神経細胞体)をイメージした生物発光ノード
|
|
5
|
+
* 多層グロー効果と有機的なアニメーションで生命感を表現
|
|
6
|
+
*/
|
|
7
|
+
import React, { memo, useMemo } from "react";
|
|
8
|
+
import { Handle, Position } from "@xyflow/react";
|
|
9
|
+
import { cn } from "@/lib/utils";
|
|
10
|
+
import { getNodeColor, getNodeSize } from "./graphUtils";
|
|
11
|
+
export const BranchNode = memo(function BranchNode({ data, selected, }) {
|
|
12
|
+
const { branch } = data;
|
|
13
|
+
if (!branch)
|
|
14
|
+
return null;
|
|
15
|
+
const size = getNodeSize(branch);
|
|
16
|
+
const _baseColor = getNodeColor(branch);
|
|
17
|
+
const hasWorktree = Boolean(branch.worktreePath);
|
|
18
|
+
const isMerged = branch.mergeStatus === "merged";
|
|
19
|
+
// ブランチ名を短縮
|
|
20
|
+
const displayName = useMemo(() => {
|
|
21
|
+
if (branch.name.length > 18) {
|
|
22
|
+
return `${branch.name.slice(0, 15)}...`;
|
|
23
|
+
}
|
|
24
|
+
return branch.name;
|
|
25
|
+
}, [branch.name]);
|
|
26
|
+
// ノードカラーをHSL値として抽出(動的スタイル用)
|
|
27
|
+
const colorStyle = useMemo(() => {
|
|
28
|
+
if (hasWorktree) {
|
|
29
|
+
return {
|
|
30
|
+
primary: "hsl(160 90% 45%)",
|
|
31
|
+
glow: "hsl(160 90% 45% / 0.4)",
|
|
32
|
+
inner: "hsl(160 90% 50% / 0.2)",
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (branch.type === "local") {
|
|
36
|
+
return {
|
|
37
|
+
primary: "hsl(280 85% 65%)",
|
|
38
|
+
glow: "hsl(280 85% 65% / 0.4)",
|
|
39
|
+
inner: "hsl(280 85% 70% / 0.2)",
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
primary: "hsl(200 90% 55%)",
|
|
44
|
+
glow: "hsl(200 90% 55% / 0.4)",
|
|
45
|
+
inner: "hsl(200 90% 60% / 0.2)",
|
|
46
|
+
};
|
|
47
|
+
}, [hasWorktree, branch.type]);
|
|
48
|
+
return (React.createElement(React.Fragment, null,
|
|
49
|
+
React.createElement(Handle, { type: "target", position: Position.Top, className: "!h-3 !w-3 !rounded-full !border-2 !bg-transparent transition-all duration-300", style: {
|
|
50
|
+
borderColor: colorStyle.primary,
|
|
51
|
+
boxShadow: `0 0 8px ${colorStyle.glow}`,
|
|
52
|
+
} }),
|
|
53
|
+
React.createElement("div", { className: cn("group relative flex cursor-pointer items-center justify-center rounded-full", "transition-all duration-500 ease-out", hasWorktree && "animate-active-synapse", !hasWorktree && "animate-soma-pulse", selected && "ring-2 ring-offset-4 ring-offset-background", isMerged && "opacity-50"), style: {
|
|
54
|
+
width: size,
|
|
55
|
+
height: size,
|
|
56
|
+
background: `radial-gradient(circle at 30% 30%, ${colorStyle.inner}, transparent 60%)`,
|
|
57
|
+
border: `2px solid ${colorStyle.primary}`,
|
|
58
|
+
boxShadow: selected
|
|
59
|
+
? `0 0 30px ${colorStyle.glow}, inset 0 0 20px ${colorStyle.inner}, 0 0 0 4px ${colorStyle.primary}`
|
|
60
|
+
: undefined,
|
|
61
|
+
} },
|
|
62
|
+
React.createElement("div", { className: "absolute -inset-2 rounded-full opacity-30 blur-md", style: { backgroundColor: colorStyle.primary } }),
|
|
63
|
+
React.createElement("div", { className: "absolute inset-2 rounded-full border opacity-40", style: { borderColor: colorStyle.primary } }),
|
|
64
|
+
React.createElement("div", { className: "relative z-10 flex items-center justify-center rounded-full shadow-lg", style: {
|
|
65
|
+
width: size * 0.45,
|
|
66
|
+
height: size * 0.45,
|
|
67
|
+
background: `linear-gradient(135deg, ${colorStyle.primary}, ${colorStyle.inner})`,
|
|
68
|
+
boxShadow: `0 0 15px ${colorStyle.glow}`,
|
|
69
|
+
} },
|
|
70
|
+
React.createElement("span", { className: "text-xs font-bold text-background" }, branch.type === "local" ? "L" : "R")),
|
|
71
|
+
!isMerged && (React.createElement(React.Fragment, null,
|
|
72
|
+
React.createElement("div", { className: "absolute h-1.5 w-1.5 rounded-full animate-vesicle-release", style: {
|
|
73
|
+
backgroundColor: colorStyle.primary,
|
|
74
|
+
top: "20%",
|
|
75
|
+
right: "25%",
|
|
76
|
+
animationDelay: "0s",
|
|
77
|
+
} }),
|
|
78
|
+
React.createElement("div", { className: "absolute h-1 w-1 rounded-full animate-vesicle-release", style: {
|
|
79
|
+
backgroundColor: colorStyle.primary,
|
|
80
|
+
bottom: "25%",
|
|
81
|
+
left: "20%",
|
|
82
|
+
animationDelay: "0.7s",
|
|
83
|
+
} }))),
|
|
84
|
+
hasWorktree && (React.createElement("div", { className: "absolute -right-1 -top-1 flex h-4 w-4 items-center justify-center rounded-full animate-synapse-spark", style: {
|
|
85
|
+
backgroundColor: "hsl(160 90% 45%)",
|
|
86
|
+
boxShadow: "0 0 10px hsl(160 90% 45% / 0.8)",
|
|
87
|
+
} },
|
|
88
|
+
React.createElement("span", { className: "text-[8px] font-bold text-background" }, "W"))),
|
|
89
|
+
isMerged && (React.createElement("div", { className: "absolute inset-0 flex items-center justify-center rounded-full bg-background/60 backdrop-blur-sm" },
|
|
90
|
+
React.createElement("span", { className: "text-[10px] font-medium text-muted-foreground" }, "merged"))),
|
|
91
|
+
React.createElement("div", { className: cn("absolute -bottom-12 left-1/2 z-50 -translate-x-1/2", "rounded-lg border border-border/50 bg-card/95 px-3 py-1.5 backdrop-blur-md", "opacity-0 shadow-xl transition-all duration-300", "group-hover:opacity-100 group-hover:-translate-y-1"), style: {
|
|
92
|
+
boxShadow: `0 4px 20px hsl(220 30% 0% / 0.5), 0 0 20px ${colorStyle.glow}`,
|
|
93
|
+
} },
|
|
94
|
+
React.createElement("p", { className: "whitespace-nowrap text-xs font-medium text-foreground" }, displayName),
|
|
95
|
+
React.createElement("p", { className: "text-[10px] text-muted-foreground" },
|
|
96
|
+
branch.type === "local" ? "Local" : "Remote",
|
|
97
|
+
hasWorktree && " • Active"))),
|
|
98
|
+
React.createElement(Handle, { type: "source", position: Position.Bottom, className: "!h-3 !w-3 !rounded-full !border-2 !bg-transparent transition-all duration-300", style: {
|
|
99
|
+
borderColor: colorStyle.primary,
|
|
100
|
+
boxShadow: `0 0 8px ${colorStyle.glow}`,
|
|
101
|
+
} })));
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=BranchNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BranchNode.js","sourceRoot":"","sources":["../../../../../../src/web/client/src/components/graph/BranchNode.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* クラスタノードコンポーネント
|
|
3
|
+
*
|
|
4
|
+
* ニューロン群(神経細胞集合体)をイメージした有機的ノード
|
|
5
|
+
* 変形する膜と軌道を描く核で複数ブランチのグループを表現
|
|
6
|
+
*/
|
|
7
|
+
import React from "react";
|
|
8
|
+
import { type NodeProps } from "@xyflow/react";
|
|
9
|
+
import type { GraphNode } from "./graphUtils";
|
|
10
|
+
type ClusterNodeProps = NodeProps<GraphNode>;
|
|
11
|
+
export declare const ClusterNode: React.NamedExoticComponent<ClusterNodeProps>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=ClusterNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClusterNode.d.ts","sourceRoot":"","sources":["../../../../../../src/web/client/src/components/graph/ClusterNode.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,KAAK,gBAAgB,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;AAE7C,eAAO,MAAM,WAAW,8CAoMtB,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* クラスタノードコンポーネント
|
|
3
|
+
*
|
|
4
|
+
* ニューロン群(神経細胞集合体)をイメージした有機的ノード
|
|
5
|
+
* 変形する膜と軌道を描く核で複数ブランチのグループを表現
|
|
6
|
+
*/
|
|
7
|
+
import React, { memo, useMemo } from "react";
|
|
8
|
+
import { Handle, Position } from "@xyflow/react";
|
|
9
|
+
import { cn } from "@/lib/utils";
|
|
10
|
+
export const ClusterNode = memo(function ClusterNode({ data, selected, }) {
|
|
11
|
+
const { clusterSize = 0, expanded } = data;
|
|
12
|
+
// クラスタサイズに応じてノードサイズを調整
|
|
13
|
+
const baseSize = 70;
|
|
14
|
+
const size = Math.min(baseSize + clusterSize * 5, 120);
|
|
15
|
+
// 内部の核の数(最大8個)
|
|
16
|
+
const nucleiCount = Math.min(clusterSize, 8);
|
|
17
|
+
// 核の配置角度を計算
|
|
18
|
+
const nuclei = useMemo(() => {
|
|
19
|
+
return Array.from({ length: nucleiCount }).map((_, i) => {
|
|
20
|
+
const angle = (360 / nucleiCount) * i;
|
|
21
|
+
const delay = i * 0.5;
|
|
22
|
+
const orbitRadius = size * 0.28;
|
|
23
|
+
return { angle, delay, orbitRadius };
|
|
24
|
+
});
|
|
25
|
+
}, [nucleiCount, size]);
|
|
26
|
+
return (React.createElement(React.Fragment, null,
|
|
27
|
+
React.createElement(Handle, { type: "target", position: Position.Top, className: "!h-3 !w-3 !rounded-full !border-2 !bg-transparent transition-all duration-300", style: {
|
|
28
|
+
borderColor: "hsl(185 100% 65%)",
|
|
29
|
+
boxShadow: "0 0 8px hsl(185 100% 65% / 0.4)",
|
|
30
|
+
} }),
|
|
31
|
+
React.createElement("div", { className: cn("group relative flex cursor-pointer items-center justify-center", "transition-all duration-500 ease-out", "animate-membrane-morph", selected &&
|
|
32
|
+
"ring-2 ring-primary ring-offset-4 ring-offset-background"), style: {
|
|
33
|
+
width: size,
|
|
34
|
+
height: size,
|
|
35
|
+
background: expanded
|
|
36
|
+
? "radial-gradient(circle at 40% 40%, hsl(185 100% 65% / 0.15), hsl(310 85% 60% / 0.08) 50%, transparent 70%)"
|
|
37
|
+
: "radial-gradient(circle at 40% 40%, hsl(220 30% 15% / 0.8), hsl(220 25% 10% / 0.6) 60%, transparent 80%)",
|
|
38
|
+
border: expanded
|
|
39
|
+
? "2px solid hsl(185 100% 65% / 0.6)"
|
|
40
|
+
: "2px dashed hsl(200 30% 30%)",
|
|
41
|
+
boxShadow: expanded
|
|
42
|
+
? "0 0 30px hsl(185 100% 65% / 0.3), inset 0 0 30px hsl(185 100% 65% / 0.1)"
|
|
43
|
+
: "0 0 20px hsl(220 30% 0% / 0.5), inset 0 0 20px hsl(220 30% 5% / 0.5)",
|
|
44
|
+
} },
|
|
45
|
+
React.createElement("div", { className: cn("absolute -inset-3 rounded-full blur-lg transition-opacity duration-500", expanded ? "opacity-40" : "opacity-20"), style: {
|
|
46
|
+
backgroundColor: expanded
|
|
47
|
+
? "hsl(185 100% 65%)"
|
|
48
|
+
: "hsl(200 30% 40%)",
|
|
49
|
+
borderRadius: "inherit",
|
|
50
|
+
} }),
|
|
51
|
+
React.createElement("div", { className: "absolute inset-3 rounded-full border border-dashed opacity-30", style: {
|
|
52
|
+
borderColor: expanded ? "hsl(185 100% 65%)" : "hsl(200 30% 40%)",
|
|
53
|
+
borderRadius: "inherit",
|
|
54
|
+
} }),
|
|
55
|
+
React.createElement("div", { className: "absolute inset-0 flex items-center justify-center" }, nuclei.map((nucleus, i) => (React.createElement("div", { key: i, className: "absolute animate-nucleus-orbit", style: {
|
|
56
|
+
animationDelay: `${-nucleus.delay}s`,
|
|
57
|
+
animationDuration: `${8 + i * 0.5}s`,
|
|
58
|
+
} },
|
|
59
|
+
React.createElement("div", { className: "h-2.5 w-2.5 rounded-full animate-vesicle-release", style: {
|
|
60
|
+
backgroundColor: expanded
|
|
61
|
+
? `hsl(${185 + i * 15} 80% 60%)`
|
|
62
|
+
: `hsl(${200 + i * 10} 50% 50%)`,
|
|
63
|
+
boxShadow: expanded
|
|
64
|
+
? `0 0 8px hsl(${185 + i * 15} 80% 60% / 0.8)`
|
|
65
|
+
: `0 0 4px hsl(${200 + i * 10} 50% 50% / 0.5)`,
|
|
66
|
+
animationDelay: `${nucleus.delay * 0.3}s`,
|
|
67
|
+
transform: `translateX(${nucleus.orbitRadius}px)`,
|
|
68
|
+
} }))))),
|
|
69
|
+
React.createElement("div", { className: cn("relative z-10 flex items-center justify-center rounded-full", "border-2 backdrop-blur-sm transition-all duration-300"), style: {
|
|
70
|
+
width: size * 0.4,
|
|
71
|
+
height: size * 0.4,
|
|
72
|
+
backgroundColor: expanded
|
|
73
|
+
? "hsl(220 30% 8% / 0.9)"
|
|
74
|
+
: "hsl(220 30% 10% / 0.95)",
|
|
75
|
+
borderColor: expanded
|
|
76
|
+
? "hsl(185 100% 65% / 0.8)"
|
|
77
|
+
: "hsl(200 30% 35%)",
|
|
78
|
+
boxShadow: expanded
|
|
79
|
+
? "0 0 20px hsl(185 100% 65% / 0.4), inset 0 0 15px hsl(185 100% 65% / 0.1)"
|
|
80
|
+
: "0 0 10px hsl(220 30% 0% / 0.5)",
|
|
81
|
+
} },
|
|
82
|
+
React.createElement("span", { className: cn("text-sm font-bold transition-colors duration-300", expanded ? "text-primary" : "text-muted-foreground") }, clusterSize)),
|
|
83
|
+
React.createElement("div", { className: cn("absolute -right-2 -top-2 flex h-6 w-6 items-center justify-center rounded-full", "border-2 text-xs font-bold transition-all duration-300"), style: {
|
|
84
|
+
backgroundColor: expanded
|
|
85
|
+
? "hsl(185 100% 65%)"
|
|
86
|
+
: "hsl(220 30% 12%)",
|
|
87
|
+
borderColor: expanded ? "hsl(185 100% 70%)" : "hsl(200 30% 25%)",
|
|
88
|
+
color: expanded ? "hsl(220 30% 5%)" : "hsl(185 100% 65%)",
|
|
89
|
+
boxShadow: expanded
|
|
90
|
+
? "0 0 15px hsl(185 100% 65% / 0.6)"
|
|
91
|
+
: "0 0 8px hsl(220 30% 0% / 0.5)",
|
|
92
|
+
} }, expanded ? "−" : "+"),
|
|
93
|
+
React.createElement("div", { className: cn("absolute -bottom-14 left-1/2 z-50 -translate-x-1/2", "rounded-lg border border-border/50 bg-card/95 px-3 py-2 backdrop-blur-md", "opacity-0 shadow-xl transition-all duration-300", "group-hover:opacity-100 group-hover:-translate-y-1"), style: {
|
|
94
|
+
boxShadow: "0 4px 20px hsl(220 30% 0% / 0.5), 0 0 20px hsl(185 100% 65% / 0.2)",
|
|
95
|
+
} },
|
|
96
|
+
React.createElement("p", { className: "whitespace-nowrap text-xs font-medium text-foreground" },
|
|
97
|
+
clusterSize,
|
|
98
|
+
" branches"),
|
|
99
|
+
React.createElement("p", { className: "text-[10px] text-muted-foreground" },
|
|
100
|
+
"Click to ",
|
|
101
|
+
expanded ? "collapse" : "expand"))),
|
|
102
|
+
React.createElement(Handle, { type: "source", position: Position.Bottom, className: "!h-3 !w-3 !rounded-full !border-2 !bg-transparent transition-all duration-300", style: {
|
|
103
|
+
borderColor: expanded ? "hsl(185 100% 65%)" : "hsl(200 30% 40%)",
|
|
104
|
+
boxShadow: expanded
|
|
105
|
+
? "0 0 8px hsl(185 100% 65% / 0.4)"
|
|
106
|
+
: "0 0 6px hsl(200 30% 40% / 0.3)",
|
|
107
|
+
} })));
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=ClusterNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClusterNode.js","sourceRoot":"","sources":["../../../../../../src/web/client/src/components/graph/ClusterNode.tsx"],"names":[],"mappings":"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"}
|