@deep-eye/core 0.1.0

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 ADDED
@@ -0,0 +1,49 @@
1
+ # @deep-eye/core
2
+
3
+ Deep-Eye - 一个全面的 Vue 3 组件库 | A comprehensive Vue 3 component library
4
+
5
+ ## 安装 Installation
6
+
7
+ ```bash
8
+ # npm
9
+ npm install @deep-eye/core
10
+
11
+ # pnpm
12
+ pnpm add @deep-eye/core
13
+
14
+ # yarn
15
+ yarn add @deep-eye/core
16
+ ```
17
+
18
+ ## 使用 Usage
19
+
20
+ ```vue
21
+ <script setup>
22
+ import { D3MindMap } from '@deep-eye/core'
23
+ import '@deep-eye/core/style.css'
24
+
25
+ const data = {
26
+ nodeData: {
27
+ id: 'root',
28
+ topic: 'Deep-Eye',
29
+ root: true,
30
+ children: [
31
+ { id: '1', topic: '可视化组件' },
32
+ { id: '2', topic: '布局组件' }
33
+ ]
34
+ }
35
+ }
36
+ </script>
37
+
38
+ <template>
39
+ <D3MindMap :data="data" height="600px" />
40
+ </template>
41
+ ```
42
+
43
+ ## 组件 Components
44
+
45
+ - **D3MindMap** - 基于 D3.js 的高性能思维导图组件,支持缩放、拖拽、展开折叠等交互功能
46
+
47
+ ## License
48
+
49
+ MIT
@@ -0,0 +1,2 @@
1
+ export * from './visualization';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,75 @@
1
+ import type { D3MindMapProps, MindMapData, MindMapNode, ExportOptions } from './types';
2
+ declare var __VLS_1: {
3
+ zoomIn: () => void;
4
+ zoomOut: () => void;
5
+ fit: () => void;
6
+ toCenter: () => void;
7
+ expandAll: () => void;
8
+ collapseAll: () => void;
9
+ exportImage: (format?: "png" | "svg", options?: ExportOptions) => Promise<Blob>;
10
+ scale: number;
11
+ visibleNodeCount: number;
12
+ };
13
+ type __VLS_Slots = {} & {
14
+ toolbar?: (props: typeof __VLS_1) => any;
15
+ };
16
+ declare const __VLS_component: import("vue").DefineComponent<D3MindMapProps, {
17
+ getData: () => any;
18
+ setData: (data: any) => void;
19
+ toCenter: () => void;
20
+ expandAll: (expand: boolean) => void;
21
+ zoomIn: () => void;
22
+ zoomOut: () => void;
23
+ setZoom: (scale: number) => void;
24
+ getZoom: () => number;
25
+ getInstance: () => {
26
+ treeData: any;
27
+ nodeData: any;
28
+ };
29
+ fit: () => void;
30
+ fitToWindow: () => void;
31
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
32
+ change: (data: MindMapData) => any;
33
+ "node-click": (node: MindMapNode, event: MouseEvent) => any;
34
+ "node-dblclick": (node: MindMapNode, event: MouseEvent) => any;
35
+ "node-contextmenu": (node: MindMapNode, event: MouseEvent) => any;
36
+ "node-mouseenter": (node: MindMapNode, event: MouseEvent) => any;
37
+ "node-mouseleave": (node: MindMapNode, event: MouseEvent) => any;
38
+ "node-expand": (node: MindMapNode) => any;
39
+ "node-collapse": (node: MindMapNode) => any;
40
+ zoom: (scale: number) => any;
41
+ pan: (transform: import("./types").TransformInfo) => any;
42
+ download: () => any;
43
+ ready: () => any;
44
+ }, string, import("vue").PublicProps, Readonly<D3MindMapProps> & Readonly<{
45
+ onChange?: ((data: MindMapData) => any) | undefined;
46
+ "onNode-click"?: ((node: MindMapNode, event: MouseEvent) => any) | undefined;
47
+ "onNode-dblclick"?: ((node: MindMapNode, event: MouseEvent) => any) | undefined;
48
+ "onNode-contextmenu"?: ((node: MindMapNode, event: MouseEvent) => any) | undefined;
49
+ "onNode-mouseenter"?: ((node: MindMapNode, event: MouseEvent) => any) | undefined;
50
+ "onNode-mouseleave"?: ((node: MindMapNode, event: MouseEvent) => any) | undefined;
51
+ "onNode-expand"?: ((node: MindMapNode) => any) | undefined;
52
+ "onNode-collapse"?: ((node: MindMapNode) => any) | undefined;
53
+ onZoom?: ((scale: number) => any) | undefined;
54
+ onPan?: ((transform: import("./types").TransformInfo) => any) | undefined;
55
+ onDownload?: (() => any) | undefined;
56
+ onReady?: (() => any) | undefined;
57
+ }>, {
58
+ width: string | number;
59
+ height: string | number;
60
+ data: MindMapData;
61
+ readonly: boolean;
62
+ showToolbar: boolean;
63
+ showDownload: boolean;
64
+ showCounts: boolean;
65
+ showScale: boolean;
66
+ toolbarPosition: "top" | "right" | "bottom" | "left";
67
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
68
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
69
+ export default _default;
70
+ type __VLS_WithSlots<T, S> = T & {
71
+ new (): {
72
+ $slots: S;
73
+ };
74
+ };
75
+ //# sourceMappingURL=D3MindMap.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"D3MindMap.vue.d.ts","sourceRoot":"","sources":["../../../src/components/visualization/D3MindMap.vue"],"names":[],"mappings":"AA6lFA,OAAO,KAAK,EACV,cAAc,EAEd,WAAW,EACX,WAAW,EAKX,aAAa,EACd,MAAM,SAAS,CAAA;AAozEhB,QAAA,IAAI,OAAO;;;;;;;2BAxeD,KAAK,GAAG,KAAK,YACX,aAAa,KACtB,OAAO,CAAC,IAAI,CAAC;;;CAseM,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AA0C/C,QAAA,MAAM,eAAe;mBA5/BD,GAAG;oBA2BA,GAAG;;wBAsRC,OAAO;;;qBA0IV,MAAM;mBAgBV,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6EA0jBxB,CAAC;wBACkB,eAAe,CAAC,OAAO,eAAe,EAAE,WAAW,CAAC;AAAzE,wBAA0E;AAa1E,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { default as D3MindMap } from './D3MindMap.vue';
2
+ export * from './types';
3
+ export * from './themes';
4
+ export * from './utils';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/visualization/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACtD,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA"}
@@ -0,0 +1,40 @@
1
+ import type { Theme } from './types';
2
+ /**
3
+ * 默认主题(保持原有样式)
4
+ */
5
+ export declare const defaultTheme: Theme;
6
+ /**
7
+ * 深色主题 - 参考 XMind Dark
8
+ */
9
+ export declare const darkTheme: Theme;
10
+ /**
11
+ * 彩色主题 - 参考 MindNode Rainbow
12
+ */
13
+ export declare const colorfulTheme: Theme;
14
+ /**
15
+ * 极简主题 - 参考 Coggle Clean
16
+ */
17
+ export declare const minimalTheme: Theme;
18
+ /**
19
+ * 商务主题 - 参考 XMind Business
20
+ */
21
+ export declare const professionalTheme: Theme;
22
+ /**
23
+ * 所有预设主题
24
+ */
25
+ export declare const themes: {
26
+ default: Theme;
27
+ dark: Theme;
28
+ colorful: Theme;
29
+ minimal: Theme;
30
+ professional: Theme;
31
+ };
32
+ /**
33
+ * 根据主题名称获取主题
34
+ */
35
+ export declare function getTheme(name: keyof typeof themes): Theme;
36
+ /**
37
+ * 合并主题配置
38
+ */
39
+ export declare function mergeTheme(base: Theme, override: Partial<Theme>): Theme;
40
+ //# sourceMappingURL=themes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../../src/components/visualization/themes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,KAwC1B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,KAwCvB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,KAwC3B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,KAgC1B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAwC/B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,MAAM;;;;;;CAMlB,CAAA;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,MAAM,GAAG,KAAK,CAEzD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAqBvE"}
@@ -0,0 +1,291 @@
1
+ /**
2
+ * 节点数据结构
3
+ */
4
+ export interface MindMapNode {
5
+ id: string;
6
+ topic: string;
7
+ root?: boolean;
8
+ expanded?: boolean;
9
+ children?: MindMapNode[];
10
+ [key: string]: any;
11
+ }
12
+ /**
13
+ * 思维导图数据结构
14
+ */
15
+ export interface MindMapData {
16
+ nodeData: MindMapNode;
17
+ }
18
+ /**
19
+ * 节点样式配置函数类型
20
+ */
21
+ export type NodeStyleFunction<T> = (node: MindMapNode, depth: number) => T;
22
+ /**
23
+ * 节点样式配置
24
+ */
25
+ export interface NodeStyleConfig {
26
+ /** 节点颜色配置(数组按深度索引,函数动态计算) */
27
+ colors?: string[] | NodeStyleFunction<string>;
28
+ /** 节点背景色(优先级高于 colors) */
29
+ backgroundColor?: string | NodeStyleFunction<string>;
30
+ /** 文本颜色 */
31
+ textColor?: string | NodeStyleFunction<string>;
32
+ /** 字体大小 */
33
+ fontSize?: number | string;
34
+ /** 字体族 */
35
+ fontFamily?: string;
36
+ /** 字体粗细 */
37
+ fontWeight?: number | string;
38
+ /** 圆角半径 */
39
+ borderRadius?: number;
40
+ /** 内边距 [水平, 垂直] 或单个值 */
41
+ padding?: [number, number] | number;
42
+ /** 最小宽度 */
43
+ minWidth?: number;
44
+ /** 最小高度 */
45
+ minHeight?: number;
46
+ /** 边框宽度 */
47
+ borderWidth?: number;
48
+ /** 边框颜色 */
49
+ borderColor?: string | NodeStyleFunction<string>;
50
+ /** 边框样式 */
51
+ borderStyle?: 'solid' | 'dashed' | 'dotted' | 'none';
52
+ }
53
+ /**
54
+ * 连线样式配置函数类型
55
+ */
56
+ export type LinkStyleFunction<T> = (link: {
57
+ source: any;
58
+ target: any;
59
+ }, depth: number) => T;
60
+ /**
61
+ * 连线样式配置
62
+ */
63
+ export interface LinkStyleConfig {
64
+ /** 连线颜色 */
65
+ color?: string | LinkStyleFunction<string>;
66
+ /** 连线宽度 */
67
+ width?: number;
68
+ /** 连线样式 */
69
+ style?: 'solid' | 'dashed' | 'dotted';
70
+ /** 曲线类型 */
71
+ curve?: 'bezier' | 'straight' | 'step' | 'smooth';
72
+ /** 是否启用动画 */
73
+ animated?: boolean;
74
+ /** 动画持续时间(毫秒) */
75
+ animationDuration?: number;
76
+ }
77
+ /**
78
+ * 布局配置
79
+ */
80
+ export interface LayoutConfig {
81
+ /** 布局方向 */
82
+ direction?: 'horizontal' | 'vertical';
83
+ /** 兄弟节点间距 */
84
+ nodeSpacing?: number;
85
+ /** 层级间距 */
86
+ levelSpacing?: number;
87
+ /** 对齐方式 */
88
+ align?: 'start' | 'center' | 'end';
89
+ }
90
+ /**
91
+ * 主题配置
92
+ */
93
+ export interface Theme {
94
+ /** 主题名称 */
95
+ name: string;
96
+ /** 节点样式 */
97
+ nodeStyle?: NodeStyleConfig;
98
+ /** 连线样式 */
99
+ linkStyle?: LinkStyleConfig;
100
+ /** 布局配置 */
101
+ layoutConfig?: LayoutConfig;
102
+ /** 背景色 */
103
+ background?: string;
104
+ /** 网格配置 */
105
+ grid?: {
106
+ show?: boolean;
107
+ color?: string;
108
+ size?: number;
109
+ };
110
+ }
111
+ /**
112
+ * 导出选项
113
+ */
114
+ export interface ExportOptions {
115
+ /** 导出质量(0-1) */
116
+ quality?: number;
117
+ /** 背景色 */
118
+ backgroundColor?: string;
119
+ /** 是否包含背景 */
120
+ includeBackground?: boolean;
121
+ /** 缩放比例 */
122
+ scale?: number;
123
+ /** 宽度 */
124
+ width?: number;
125
+ /** 高度 */
126
+ height?: number;
127
+ }
128
+ /**
129
+ * 变换信息
130
+ */
131
+ export interface TransformInfo {
132
+ x: number;
133
+ y: number;
134
+ k: number;
135
+ }
136
+ /**
137
+ * 节点插槽参数
138
+ */
139
+ export interface NodeSlotProps {
140
+ /** 节点数据 */
141
+ node: MindMapNode;
142
+ /** 节点深度 */
143
+ depth: number;
144
+ /** 是否展开 */
145
+ expanded: boolean;
146
+ /** 是否为根节点 */
147
+ isRoot: boolean;
148
+ /** 节点宽度 */
149
+ width: number;
150
+ /** 节点高度 */
151
+ height: number;
152
+ }
153
+ /**
154
+ * 展开按钮插槽参数
155
+ */
156
+ export interface ExpandButtonSlotProps {
157
+ /** 节点数据 */
158
+ node: MindMapNode;
159
+ /** 是否展开 */
160
+ expanded: boolean;
161
+ /** 切换展开/折叠 */
162
+ toggle: () => void;
163
+ }
164
+ /**
165
+ * 工具栏插槽参数
166
+ */
167
+ export interface ToolbarSlotProps {
168
+ /** 放大 */
169
+ zoomIn: () => void;
170
+ /** 缩小 */
171
+ zoomOut: () => void;
172
+ /** 适应窗口 */
173
+ fit: () => void;
174
+ /** 居中 */
175
+ toCenter: () => void;
176
+ /** 展开所有 */
177
+ expandAll: () => void;
178
+ /** 折叠所有 */
179
+ collapseAll: () => void;
180
+ /** 导出图片 */
181
+ exportImage: (format?: 'png' | 'svg') => Promise<Blob>;
182
+ /** 当前缩放比例 */
183
+ scale: number;
184
+ /** 可见节点数量 */
185
+ visibleNodeCount: number;
186
+ }
187
+ /**
188
+ * D3MindMap 组件 Props
189
+ */
190
+ export interface D3MindMapProps {
191
+ /** 思维导图数据 */
192
+ data?: MindMapData;
193
+ /** 是否只读 */
194
+ readonly?: boolean;
195
+ /** 高度 */
196
+ height?: string | number;
197
+ /** 宽度 */
198
+ width?: string | number;
199
+ /** 是否显示工具栏 */
200
+ showToolbar?: boolean;
201
+ /** 是否显示下载按钮 */
202
+ showDownload?: boolean;
203
+ /** 是否显示节点数量 */
204
+ showCounts?: boolean;
205
+ /** 是否显示缩放比例 */
206
+ showScale?: boolean;
207
+ /** 工具栏位置 */
208
+ toolbarPosition?: 'top' | 'right' | 'bottom' | 'left';
209
+ /** 主题配置 */
210
+ theme?: Theme;
211
+ /** 节点样式配置 */
212
+ nodeStyle?: NodeStyleConfig;
213
+ /** 连线样式配置 */
214
+ linkStyle?: LinkStyleConfig;
215
+ /** 布局配置 */
216
+ layoutConfig?: LayoutConfig;
217
+ }
218
+ /**
219
+ * D3MindMap 组件 Emits
220
+ */
221
+ export interface D3MindMapEmits {
222
+ /** 数据变化 */
223
+ (e: 'change', data: MindMapData): void;
224
+ /** 节点单击 */
225
+ (e: 'node-click', node: MindMapNode, event: MouseEvent): void;
226
+ /** 节点双击 */
227
+ (e: 'node-dblclick', node: MindMapNode, event: MouseEvent): void;
228
+ /** 节点右键 */
229
+ (e: 'node-contextmenu', node: MindMapNode, event: MouseEvent): void;
230
+ /** 节点鼠标进入 */
231
+ (e: 'node-mouseenter', node: MindMapNode, event: MouseEvent): void;
232
+ /** 节点鼠标离开 */
233
+ (e: 'node-mouseleave', node: MindMapNode, event: MouseEvent): void;
234
+ /** 节点展开 */
235
+ (e: 'node-expand', node: MindMapNode): void;
236
+ /** 节点折叠 */
237
+ (e: 'node-collapse', node: MindMapNode): void;
238
+ /** 缩放变化 */
239
+ (e: 'zoom', scale: number): void;
240
+ /** 平移变化 */
241
+ (e: 'pan', transform: TransformInfo): void;
242
+ /** 下载 */
243
+ (e: 'download'): void;
244
+ /** 组件就绪 */
245
+ (e: 'ready'): void;
246
+ }
247
+ /**
248
+ * D3MindMap 组件暴露的方法
249
+ */
250
+ export interface D3MindMapExpose {
251
+ /** 获取数据 */
252
+ getData: () => MindMapData | null;
253
+ /** 设置数据 */
254
+ setData: (data: MindMapData) => void;
255
+ /** 居中到根节点 */
256
+ toCenter: () => void;
257
+ /** 展开/折叠所有节点 */
258
+ expandAll: (expand: boolean) => void;
259
+ /** 放大 */
260
+ zoomIn: () => void;
261
+ /** 缩小 */
262
+ zoomOut: () => void;
263
+ /** 设置缩放比例 */
264
+ setZoom: (scale: number) => void;
265
+ /** 获取缩放比例 */
266
+ getZoom: () => number;
267
+ /** 获取实例 */
268
+ getInstance: () => {
269
+ treeData: any;
270
+ nodeData: any;
271
+ };
272
+ /** 适应窗口 */
273
+ fit: () => void;
274
+ /** 适应窗口(别名) */
275
+ fitToWindow: () => void;
276
+ /** 聚焦到指定节点 */
277
+ fitToNode: (nodeId: string) => void;
278
+ /** 展开指定节点 */
279
+ expandNode: (nodeId: string) => void;
280
+ /** 折叠指定节点 */
281
+ collapseNode: (nodeId: string) => void;
282
+ /** 根据 ID 获取节点 */
283
+ getNodeById: (nodeId: string) => MindMapNode | null;
284
+ /** 更新节点数据 */
285
+ updateNode: (nodeId: string, data: Partial<MindMapNode>) => void;
286
+ /** 导出图片 */
287
+ exportImage: (format?: 'png' | 'svg', options?: ExportOptions) => Promise<Blob>;
288
+ /** 获取可见节点列表 */
289
+ getVisibleNodes: () => MindMapNode[];
290
+ }
291
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/visualization/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * 工具函数
3
+ */
4
+ /**
5
+ * 生成唯一 ID
6
+ */
7
+ export declare function generateId(): string;
8
+ /**
9
+ * 获取文本宽度
10
+ */
11
+ export declare function getTextWidth(text: string, font: string): number;
12
+ /**
13
+ * 深度克隆对象
14
+ */
15
+ export declare function deepClone<T>(obj: T): T;
16
+ /**
17
+ * 防抖函数
18
+ */
19
+ export declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number): (...args: Parameters<T>) => void;
20
+ /**
21
+ * 节流函数
22
+ */
23
+ export declare function throttle<T extends (...args: any[]) => any>(func: T, wait: number): (...args: Parameters<T>) => void;
24
+ /**
25
+ * 将 SVG 转换为 Blob
26
+ */
27
+ export declare function svgToBlob(svgElement: SVGSVGElement, backgroundColor?: string): Promise<Blob>;
28
+ /**
29
+ * 将 SVG 转换为 PNG
30
+ */
31
+ export declare function svgToPng(svgElement: SVGSVGElement, options?: {
32
+ scale?: number;
33
+ backgroundColor?: string;
34
+ quality?: number;
35
+ }): Promise<Blob>;
36
+ /**
37
+ * 下载 Blob
38
+ */
39
+ export declare function downloadBlob(blob: Blob, filename: string): void;
40
+ /**
41
+ * 判断是否为渐变色
42
+ */
43
+ export declare function isGradient(color: string): boolean;
44
+ /**
45
+ * 解析渐变色(简单实现,返回第一个颜色)
46
+ */
47
+ export declare function parseGradientColor(gradient: string): string;
48
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/visualization/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAO/D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAwBtC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,GACX,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAelC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,GACX,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CA2BlC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB5F;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,UAAU,EAAE,aAAa,EACzB,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;CACZ,GACL,OAAO,CAAC,IAAI,CAAC,CA2Df;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAS/D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG3D"}
@@ -0,0 +1,3 @@
1
+ export * from './useMindMapTheme';
2
+ export * from './useMindMapLayout';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/composables/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,16 @@
1
+ import type { LayoutConfig } from '../components/visualization/types';
2
+ /**
3
+ * 布局 Composable
4
+ */
5
+ export declare function useMindMapLayout(layoutConfig?: LayoutConfig): {
6
+ direction: import("vue").ComputedRef<"horizontal" | "vertical">;
7
+ nodeSpacing: import("vue").ComputedRef<number | undefined>;
8
+ levelSpacing: import("vue").ComputedRef<number | undefined>;
9
+ align: import("vue").ComputedRef<"start" | "center" | "end">;
10
+ isHorizontal: import("vue").ComputedRef<boolean>;
11
+ isVertical: import("vue").ComputedRef<boolean>;
12
+ getNodeSpacing: () => number | undefined;
13
+ getLevelSpacing: () => number | undefined;
14
+ getAlign: () => "start" | "center" | "end";
15
+ };
16
+ //# sourceMappingURL=useMindMapLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMindMapLayout.d.ts","sourceRoot":"","sources":["../../src/composables/useMindMapLayout.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAErE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,CAAC,EAAE,YAAY;;;;;;;0BA0B/B,MAAM,GAAG,SAAS;2BAOjB,MAAM,GAAG,SAAS;oBAOzB,OAAO,GAAG,QAAQ,GAAG,KAAK;EAehD"}
@@ -0,0 +1,43 @@
1
+ import { type ComputedRef, type Ref } from 'vue';
2
+ import type { Theme, NodeStyleConfig, LinkStyleConfig, MindMapNode } from '../components/visualization/types';
3
+ /**
4
+ * 主题 Composable
5
+ */
6
+ export declare function useMindMapTheme(theme?: Theme | Ref<Theme> | (() => Theme | undefined), nodeStyle?: NodeStyleConfig, linkStyle?: LinkStyleConfig): {
7
+ finalTheme: ComputedRef<Theme>;
8
+ getNodeColor: (node: MindMapNode, depth: number) => string;
9
+ getNodeTextColor: (node: MindMapNode, depth: number) => string;
10
+ getNodeBorderColor: (node: MindMapNode, depth: number) => string | undefined;
11
+ getLinkColor: (link: {
12
+ source: any;
13
+ target: any;
14
+ }, depth: number) => string;
15
+ getNodeStyle: (node: MindMapNode, depth: number) => {
16
+ backgroundColor: string;
17
+ color: string;
18
+ fontSize: string;
19
+ fontFamily: string;
20
+ fontWeight: string | number;
21
+ borderRadius: string;
22
+ borderWidth: string;
23
+ borderColor: string | undefined;
24
+ borderStyle: "solid" | "dashed" | "dotted" | "none";
25
+ };
26
+ getNodePadding: () => [number, number];
27
+ getNodeMinSize: () => {
28
+ minWidth: number;
29
+ minHeight: number;
30
+ };
31
+ getLinkWidth: () => number;
32
+ getLinkStyle: () => string;
33
+ getBackgroundStyle: () => {
34
+ backgroundColor: string;
35
+ backgroundImage?: undefined;
36
+ backgroundSize?: undefined;
37
+ } | {
38
+ backgroundColor: string;
39
+ backgroundImage: string;
40
+ backgroundSize: string;
41
+ };
42
+ };
43
+ //# sourceMappingURL=useMindMapTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMindMapTheme.d.ts","sourceRoot":"","sources":["../../src/composables/useMindMapTheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,WAAW,EAAE,KAAK,GAAG,EAAS,MAAM,KAAK,CAAA;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAG7G;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,SAAS,CAAC,EACtD,SAAS,CAAC,EAAE,eAAe,EAC3B,SAAS,CAAC,EAAE,eAAe;;yBA0BC,WAAW,SAAS,MAAM,KAAG,MAAM;6BAkC/B,WAAW,SAAS,MAAM,KAAG,MAAM;+BAoBjC,WAAW,SAAS,MAAM,KAAG,MAAM,GAAG,SAAS;yBAgBrD;QAAE,MAAM,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,SAAS,MAAM,KAAG,MAAM;yBAsBpD,WAAW,SAAS,MAAM;;;;;;;;;;;0BAmB3B,CAAC,MAAM,EAAE,MAAM,CAAC;0BAiBhB;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;wBAYzC,MAAM;wBAON,MAAM;;;;;;;;;;EAwChC"}