@basic-genomics/hivtrace-viz 1.1.4 → 1.1.6
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/README.md +52 -13
- package/dist/embed/hivtrace.js +1 -1
- package/dist/embed/hivtrace.js.map +1 -1
- package/dist/embed/index.html +109 -68
- package/dist/hivtrace.js +1 -1
- package/dist/hivtrace.js.map +1 -1
- package/dist/react/HivtraceViz.d.ts +1 -1
- package/dist/react/HivtraceViz.d.ts.map +1 -1
- package/dist/react/HivtraceViz.js +13 -9
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/types.d.ts +50 -2
- package/dist/react/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
* 封装 iframe 和 postMessage 通信,提供简洁的 React 接口
|
|
4
4
|
*/
|
|
5
5
|
import type { HivtraceVizProps } from './types';
|
|
6
|
-
export declare function HivtraceViz({ data, options, isDataFetched, showLoadingOnUpdate,
|
|
6
|
+
export declare function HivtraceViz({ data, options, isDataFetched, showLoadingOnUpdate, onFullscreenChange, onReady, onError, onRetry, error, className, style, emptyState, loadingState, customContextMenuItems, onCustomMenuItemClick, }: HivtraceVizProps): import("react/jsx-runtime").JSX.Element;
|
|
7
7
|
export default HivtraceViz;
|
|
8
8
|
//# sourceMappingURL=HivtraceViz.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HivtraceViz.d.ts","sourceRoot":"","sources":["../../src/react/HivtraceViz.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAA6C,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"HivtraceViz.d.ts","sourceRoot":"","sources":["../../src/react/HivtraceViz.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAA6C,MAAM,SAAS,CAAC;AA6F3F,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,OAAO,EACP,aAAa,EACb,mBAA0B,EAC1B,kBAAkB,EAClB,OAAO,EACP,OAAO,EACP,OAAO,EACP,KAAK,EACL,SAAS,EACT,KAAK,EACL,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,qBAAqB,GACtB,EAAE,gBAAgB,2CA0KlB;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -44,7 +44,7 @@ function DefaultLoadingState({ message }) {
|
|
|
44
44
|
animation: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',
|
|
45
45
|
} }), _jsx("p", { style: { color: '#6b7280' }, children: message })] }) }));
|
|
46
46
|
}
|
|
47
|
-
export function HivtraceViz({ data, options, isDataFetched, showLoadingOnUpdate = true,
|
|
47
|
+
export function HivtraceViz({ data, options, isDataFetched, showLoadingOnUpdate = true, onFullscreenChange, onReady, onError, onRetry, error, className, style, emptyState, loadingState, customContextMenuItems, onCustomMenuItemClick, }) {
|
|
48
48
|
const iframeRef = useRef(null);
|
|
49
49
|
const [internalLoadingState, setInternalLoadingState] = useState('initial');
|
|
50
50
|
const [isIframeReady, setIsIframeReady] = useState(false);
|
|
@@ -61,9 +61,13 @@ export function HivtraceViz({ data, options, isDataFetched, showLoadingOnUpdate
|
|
|
61
61
|
iframe.contentWindow.postMessage({
|
|
62
62
|
type,
|
|
63
63
|
graphData: data,
|
|
64
|
-
options
|
|
64
|
+
options: {
|
|
65
|
+
...options,
|
|
66
|
+
// 传递自定义菜单项配置到 iframe
|
|
67
|
+
customContextMenuItems,
|
|
68
|
+
},
|
|
65
69
|
}, '*');
|
|
66
|
-
}, [data, options]);
|
|
70
|
+
}, [data, options, customContextMenuItems]);
|
|
67
71
|
// 发送错误到 iframe
|
|
68
72
|
const sendError = useCallback((message) => {
|
|
69
73
|
const iframe = iframeRef.current;
|
|
@@ -92,11 +96,6 @@ export function HivtraceViz({ data, options, isDataFetched, showLoadingOnUpdate
|
|
|
92
96
|
setInternalLoadingState('rendered');
|
|
93
97
|
onReady?.();
|
|
94
98
|
break;
|
|
95
|
-
case 'TRACK_CLUSTER':
|
|
96
|
-
if (msg.clusterInfo && msg.allData) {
|
|
97
|
-
onTrackCluster?.(msg.clusterInfo, msg.allData);
|
|
98
|
-
}
|
|
99
|
-
break;
|
|
100
99
|
case 'FULLSCREEN_CHANGE':
|
|
101
100
|
if (typeof msg.isFullscreen === 'boolean') {
|
|
102
101
|
onFullscreenChange?.(msg.isFullscreen);
|
|
@@ -108,11 +107,16 @@ export function HivtraceViz({ data, options, isDataFetched, showLoadingOnUpdate
|
|
|
108
107
|
case 'HIVTRACE_RETRY':
|
|
109
108
|
onRetry?.();
|
|
110
109
|
break;
|
|
110
|
+
case 'CUSTOM_MENU_CLICK':
|
|
111
|
+
if (msg.itemId && msg.clusterInfo) {
|
|
112
|
+
onCustomMenuItemClick?.(msg.itemId, msg.clusterInfo);
|
|
113
|
+
}
|
|
114
|
+
break;
|
|
111
115
|
}
|
|
112
116
|
};
|
|
113
117
|
window.addEventListener('message', handleMessage);
|
|
114
118
|
return () => window.removeEventListener('message', handleMessage);
|
|
115
|
-
}, [
|
|
119
|
+
}, [onFullscreenChange, onReady, onError, onRetry, onCustomMenuItemClick]);
|
|
116
120
|
// iframe 加载完成时发送初始数据或错误
|
|
117
121
|
useEffect(() => {
|
|
118
122
|
if (isIframeReady && internalLoadingState === 'frameReady') {
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { HivtraceViz, default } from './HivtraceViz';
|
|
2
|
-
export type { HivtraceVizProps, HivtraceVizData, HivtraceVizOptions, ClusterInfo, NetworkInfo, } from './types';
|
|
2
|
+
export type { HivtraceVizProps, HivtraceVizData, HivtraceVizOptions, ClusterInfo, ClusterNodeInfo, NetworkInfo, CustomContextMenuItem, } from './types';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,WAAW,EACX,qBAAqB,GACtB,MAAM,SAAS,CAAC"}
|
package/dist/react/types.d.ts
CHANGED
|
@@ -18,6 +18,29 @@ export interface HivtraceVizOptions {
|
|
|
18
18
|
/** 基因距离阈值(如 0.015 表示 1.5%) */
|
|
19
19
|
threshold?: number;
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* 簇内节点的详细信息
|
|
23
|
+
*/
|
|
24
|
+
export interface ClusterNodeInfo {
|
|
25
|
+
/** 节点 ID */
|
|
26
|
+
id: string;
|
|
27
|
+
/** 节点度数 */
|
|
28
|
+
degree?: number;
|
|
29
|
+
/** 节点属性(如患者属性等) */
|
|
30
|
+
attributes?: Record<string, unknown>;
|
|
31
|
+
/** 节点 X 坐标 */
|
|
32
|
+
x?: number;
|
|
33
|
+
/** 节点 Y 坐标 */
|
|
34
|
+
y?: number;
|
|
35
|
+
/** 是否隐藏 */
|
|
36
|
+
is_hidden?: boolean;
|
|
37
|
+
/** 是否匹配当前筛选条件 */
|
|
38
|
+
match_filter?: boolean;
|
|
39
|
+
/** 子簇 ID */
|
|
40
|
+
subcluster_id?: string;
|
|
41
|
+
/** 子簇标签 */
|
|
42
|
+
subcluster_label?: string;
|
|
43
|
+
}
|
|
21
44
|
export interface ClusterInfo {
|
|
22
45
|
cluster_id: string | number;
|
|
23
46
|
node_count: number;
|
|
@@ -30,7 +53,10 @@ export interface ClusterInfo {
|
|
|
30
53
|
expanded: boolean;
|
|
31
54
|
fixed: boolean;
|
|
32
55
|
};
|
|
56
|
+
/** 节点 ID 列表(向后兼容) */
|
|
33
57
|
node_ids: string[];
|
|
58
|
+
/** 完整节点信息列表 */
|
|
59
|
+
nodes?: ClusterNodeInfo[];
|
|
34
60
|
}
|
|
35
61
|
export interface NetworkInfo {
|
|
36
62
|
network_info: {
|
|
@@ -39,6 +65,19 @@ export interface NetworkInfo {
|
|
|
39
65
|
total_clusters: number;
|
|
40
66
|
};
|
|
41
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* 自定义上下文菜单项接口
|
|
70
|
+
*/
|
|
71
|
+
export interface CustomContextMenuItem {
|
|
72
|
+
/** 菜单项唯一标识符 */
|
|
73
|
+
id: string;
|
|
74
|
+
/** 显示的标签文本 */
|
|
75
|
+
label: string;
|
|
76
|
+
/** 可选的 FontAwesome 图标类名(如 'fa-star') */
|
|
77
|
+
icon?: string;
|
|
78
|
+
/** 是否禁用该菜单项 */
|
|
79
|
+
disabled?: boolean;
|
|
80
|
+
}
|
|
42
81
|
export interface HivtraceVizProps {
|
|
43
82
|
/** 分析数据 */
|
|
44
83
|
data?: HivtraceVizData;
|
|
@@ -56,8 +95,6 @@ export interface HivtraceVizProps {
|
|
|
56
95
|
* - false: 静默更新,不显示 loading
|
|
57
96
|
*/
|
|
58
97
|
showLoadingOnUpdate?: boolean;
|
|
59
|
-
/** 簇追踪回调 */
|
|
60
|
-
onTrackCluster?: (clusterInfo: ClusterInfo, networkInfo: NetworkInfo) => void;
|
|
61
98
|
/** 全屏状态变化回调 */
|
|
62
99
|
onFullscreenChange?: (isFullscreen: boolean) => void;
|
|
63
100
|
/** 可视化渲染完成回调 */
|
|
@@ -80,5 +117,16 @@ export interface HivtraceVizProps {
|
|
|
80
117
|
emptyState?: React.ReactNode;
|
|
81
118
|
/** 自定义加载状态渲染 */
|
|
82
119
|
loadingState?: React.ReactNode;
|
|
120
|
+
/**
|
|
121
|
+
* 自定义上下文菜单项
|
|
122
|
+
* 会在簇节点点击菜单的默认项之后显示
|
|
123
|
+
*/
|
|
124
|
+
customContextMenuItems?: CustomContextMenuItem[];
|
|
125
|
+
/**
|
|
126
|
+
* 自定义菜单项点击回调
|
|
127
|
+
* @param itemId - 被点击菜单项的 id
|
|
128
|
+
* @param clusterInfo - 当前簇的信息
|
|
129
|
+
*/
|
|
130
|
+
onCustomMenuItemClick?: (itemId: string, clusterInfo: ClusterInfo) => void;
|
|
83
131
|
}
|
|
84
132
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/react/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE;QACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,gBAAgB;IAChB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,KAAK,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/react/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@basic-genomics/hivtrace-viz",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.6",
|
|
4
4
|
"description": "HIV-TRACE molecular transmission network visualization with React integration",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=18"
|
|
@@ -103,4 +103,4 @@
|
|
|
103
103
|
"vite"
|
|
104
104
|
],
|
|
105
105
|
"packageManager": "yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447"
|
|
106
|
-
}
|
|
106
|
+
}
|