@rxflow/mind-map 0.0.1-alpha.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 +41 -0
- package/cjs/constants.d.ts +14 -0
- package/cjs/constants.d.ts.map +1 -0
- package/cjs/constants.js +20 -0
- package/cjs/index.d.ts +7 -0
- package/cjs/index.d.ts.map +1 -0
- package/cjs/index.js +90 -0
- package/cjs/nodes/Topic/index.d.ts +4 -0
- package/cjs/nodes/Topic/index.d.ts.map +1 -0
- package/cjs/nodes/Topic/index.js +24 -0
- package/cjs/nodes/TopicBranch/index.d.ts +4 -0
- package/cjs/nodes/TopicBranch/index.d.ts.map +1 -0
- package/cjs/nodes/TopicBranch/index.js +24 -0
- package/cjs/nodes/TopicChild/index.d.ts +5 -0
- package/cjs/nodes/TopicChild/index.d.ts.map +1 -0
- package/cjs/nodes/TopicChild/index.js +105 -0
- package/cjs/nodes/TopicChild/index.less +58 -0
- package/cjs/nodes/index.d.ts +6 -0
- package/cjs/nodes/index.d.ts.map +1 -0
- package/cjs/nodes/index.js +48 -0
- package/cjs/types.d.ts +77 -0
- package/cjs/types.d.ts.map +1 -0
- package/cjs/types.js +5 -0
- package/cjs/utils/getHandles.d.ts +4 -0
- package/cjs/utils/getHandles.d.ts.map +1 -0
- package/cjs/utils/getHandles.js +44 -0
- package/cjs/utils/getNodeBoundWidth.d.ts +4 -0
- package/cjs/utils/getNodeBoundWidth.d.ts.map +1 -0
- package/cjs/utils/getNodeBoundWidth.js +36 -0
- package/esm/constants.d.ts +14 -0
- package/esm/constants.d.ts.map +1 -0
- package/esm/constants.js +15 -0
- package/esm/index.d.ts +7 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +68 -0
- package/esm/nodes/Topic/index.d.ts +4 -0
- package/esm/nodes/Topic/index.d.ts.map +1 -0
- package/esm/nodes/Topic/index.js +20 -0
- package/esm/nodes/TopicBranch/index.d.ts +4 -0
- package/esm/nodes/TopicBranch/index.d.ts.map +1 -0
- package/esm/nodes/TopicBranch/index.js +20 -0
- package/esm/nodes/TopicChild/index.d.ts +5 -0
- package/esm/nodes/TopicChild/index.d.ts.map +1 -0
- package/esm/nodes/TopicChild/index.js +118 -0
- package/esm/nodes/TopicChild/index.less +58 -0
- package/esm/nodes/index.d.ts +6 -0
- package/esm/nodes/index.d.ts.map +1 -0
- package/esm/nodes/index.js +42 -0
- package/esm/types.d.ts +77 -0
- package/esm/types.d.ts.map +1 -0
- package/esm/types.js +1 -0
- package/esm/utils/getHandles.d.ts +4 -0
- package/esm/utils/getHandles.d.ts.map +1 -0
- package/esm/utils/getHandles.js +37 -0
- package/esm/utils/getNodeBoundWidth.d.ts +4 -0
- package/esm/utils/getNodeBoundWidth.d.ts.map +1 -0
- package/esm/utils/getNodeBoundWidth.js +30 -0
- package/package.json +49 -0
package/README.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# @rxflow/mind-map
|
|
2
|
+
|
|
3
|
+
资产树/思维导图组件。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @rxflow/mind-map @rxflow/base
|
|
9
|
+
# or
|
|
10
|
+
pnpm add @rxflow/mind-map @rxflow/base
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## 使用
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import MindMapFlow from '@rxflow/mind-map';
|
|
17
|
+
|
|
18
|
+
function App() {
|
|
19
|
+
return (
|
|
20
|
+
<MindMapFlow
|
|
21
|
+
data={mindMapData}
|
|
22
|
+
// ... other props
|
|
23
|
+
/>
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 特性
|
|
29
|
+
|
|
30
|
+
- 树形布局
|
|
31
|
+
- 节点展开/折叠
|
|
32
|
+
- 拖拽排序
|
|
33
|
+
- 主题定制
|
|
34
|
+
|
|
35
|
+
## API 文档
|
|
36
|
+
|
|
37
|
+
访问 [完整文档](https://tree-graph.publib.cn/mind-map/examples) 查看详细 API。
|
|
38
|
+
|
|
39
|
+
## License
|
|
40
|
+
|
|
41
|
+
MIT
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author: yanxianliang
|
|
3
|
+
* @date: 2025-09-10 17:25
|
|
4
|
+
* @modified:2025/9/10 17:25 by yanxianliang
|
|
5
|
+
* @desc: 内置常量配置
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2025 by yanxianliang, All Rights Reserved.
|
|
8
|
+
*/
|
|
9
|
+
export declare enum MindMapNodeEnum {
|
|
10
|
+
Topic = "topic",
|
|
11
|
+
TopicBranch = "topic-branch",
|
|
12
|
+
TopicChild = "topic-child"
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["constants.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oBAAY,eAAe;IACzB,KAAK,UAAU;IACf,WAAW,iBAAgB;IAC3B,UAAU,gBAAgB;CAC3B"}
|
package/cjs/constants.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MindMapNodeEnum = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* @author: yanxianliang
|
|
9
|
+
* @date: 2025-09-10 17:25
|
|
10
|
+
* @modified:2025/9/10 17:25 by yanxianliang
|
|
11
|
+
* @desc: 内置常量配置
|
|
12
|
+
*
|
|
13
|
+
* Copyright (c) 2025 by yanxianliang, All Rights Reserved.
|
|
14
|
+
*/
|
|
15
|
+
let MindMapNodeEnum = exports.MindMapNodeEnum = /*#__PURE__*/function (MindMapNodeEnum) {
|
|
16
|
+
MindMapNodeEnum["Topic"] = "topic";
|
|
17
|
+
MindMapNodeEnum["TopicBranch"] = "topic-branch";
|
|
18
|
+
MindMapNodeEnum["TopicChild"] = "topic-child";
|
|
19
|
+
return MindMapNodeEnum;
|
|
20
|
+
}({});
|
package/cjs/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { MindMapFlowProps } from "./";
|
|
3
|
+
declare const MindMapFlow: (props: import("react").PropsWithChildren<MindMapFlowProps>) => import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export default MindMapFlow;
|
|
5
|
+
export * from './types';
|
|
6
|
+
export * from './constants';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAqB,gBAAgB,EAAC,WAAyB;AAoCtE,QAAA,MAAM,WAAW,yGAmBM,CAAA;AAEvB,eAAe,WAAW,CAAC;AAE3B,cAAc,SAAS,CAAC;AAExB,cAAc,aAAa,CAAC"}
|
package/cjs/index.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {};
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _base = require("@rxflow/base");
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
var _nodes = require("./nodes");
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
var _types = require("./types");
|
|
13
|
+
Object.keys(_types).forEach(function (key) {
|
|
14
|
+
if (key === "default" || key === "__esModule") return;
|
|
15
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
16
|
+
if (key in exports && exports[key] === _types[key]) return;
|
|
17
|
+
Object.defineProperty(exports, key, {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () {
|
|
20
|
+
return _types[key];
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
var _constants = require("./constants");
|
|
25
|
+
Object.keys(_constants).forEach(function (key) {
|
|
26
|
+
if (key === "default" || key === "__esModule") return;
|
|
27
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
28
|
+
if (key in exports && exports[key] === _constants[key]) return;
|
|
29
|
+
Object.defineProperty(exports, key, {
|
|
30
|
+
enumerable: true,
|
|
31
|
+
get: function () {
|
|
32
|
+
return _constants[key];
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
/*
|
|
37
|
+
* @author: yanxianliang
|
|
38
|
+
* @date: 2025-06-01 18:36
|
|
39
|
+
* @desc: 资产树 / 脑图
|
|
40
|
+
*
|
|
41
|
+
* Copyright (c) 2025 by yanxianliang, All Rights Reserved.
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
const fitViewOptions = {
|
|
45
|
+
minZoom: 1,
|
|
46
|
+
maxZoom: 1
|
|
47
|
+
};
|
|
48
|
+
const omitProps = ['root', 'layoutType', 'showTooltip'];
|
|
49
|
+
const fn = () => {};
|
|
50
|
+
const usePropsTransformer = props => {
|
|
51
|
+
const {
|
|
52
|
+
nodeTypes: customNodeTypes = [],
|
|
53
|
+
root
|
|
54
|
+
} = props;
|
|
55
|
+
const nodes = (0, _react.useMemo)(() => {
|
|
56
|
+
return root ? [root] : [];
|
|
57
|
+
}, [root]);
|
|
58
|
+
return {
|
|
59
|
+
minZoom: 1,
|
|
60
|
+
maxZoom: 1,
|
|
61
|
+
onNodeClick: fn,
|
|
62
|
+
...props,
|
|
63
|
+
autoCenter: false,
|
|
64
|
+
fitViewOptions: fitViewOptions,
|
|
65
|
+
forceLayout: false,
|
|
66
|
+
nodes,
|
|
67
|
+
omitProps,
|
|
68
|
+
readOnly: true,
|
|
69
|
+
nodeTypes: [..._nodes.nodeTypes, ...customNodeTypes]
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
const MindMapFlow = (0, _base.createFlow)(props => {
|
|
73
|
+
const {
|
|
74
|
+
theme,
|
|
75
|
+
children
|
|
76
|
+
} = props;
|
|
77
|
+
const layout = (0, _react.useMemo)(() => {
|
|
78
|
+
return _base.mindMapLayout.bind(null, {
|
|
79
|
+
hGap: theme?.hGap,
|
|
80
|
+
vGap: theme?.vGap,
|
|
81
|
+
markerType: theme?.markerType
|
|
82
|
+
});
|
|
83
|
+
}, []);
|
|
84
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_base.Flow, {
|
|
85
|
+
...props,
|
|
86
|
+
layout: layout,
|
|
87
|
+
children: children
|
|
88
|
+
});
|
|
89
|
+
}, usePropsTransformer);
|
|
90
|
+
var _default = exports.default = MindMapFlow;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":"AASA,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAC,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAG/C,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,aAAa,CAItD,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TopicNode = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _TopicChild = require("../TopicChild");
|
|
9
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
/*
|
|
12
|
+
* @author: yanxianliang
|
|
13
|
+
* @date: 2025-06-01 20:44
|
|
14
|
+
* @desc: Topic Node
|
|
15
|
+
*
|
|
16
|
+
* Copyright (c) 2025 by yanxianliang, All Rights Reserved.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const TopicNode = props => {
|
|
20
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TopicChild.TopicChildNode, {
|
|
21
|
+
...props
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
exports.TopicNode = TopicNode;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAC,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAC,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAE/C,eAAO,MAAM,eAAe,EAAE,iBAAiB,CAAC,mBAAmB,CAIlE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TopicBranchNode = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _TopicChild = require("../TopicChild");
|
|
9
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
/*
|
|
12
|
+
* @author: yanxianliang
|
|
13
|
+
* @date: 2025-06-01 20:44
|
|
14
|
+
* @desc: Topic Node
|
|
15
|
+
*
|
|
16
|
+
* Copyright (c) 2025 by yanxianliang, All Rights Reserved.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const TopicBranchNode = props => {
|
|
20
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TopicChild.TopicChildNode, {
|
|
21
|
+
...props
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
exports.TopicBranchNode = TopicBranchNode;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAC,aAAa,EAAwC,MAAM,aAAa,CAAC;AAEjF,OAAO,cAAc,CAAC;AAItB,OAAO,EAAoC,iBAAiB,EAAiD,MAAM,cAAc,CAAC;AAGlI,eAAO,MAAM,cAAc,kCAmEyF,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TopicChildNode = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _react2 = require("@xyflow/react");
|
|
9
|
+
var _lodash = require("lodash");
|
|
10
|
+
require("./index.less");
|
|
11
|
+
var _classcat = _interopRequireDefault(require("classcat"));
|
|
12
|
+
var _internal = require("antd/es/theme/internal");
|
|
13
|
+
var _ahooks = require("ahooks");
|
|
14
|
+
var _base = require("@rxflow/base");
|
|
15
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
18
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
19
|
+
/*
|
|
20
|
+
* @author: yanxianliang
|
|
21
|
+
* @date: 2025-06-01 20:44
|
|
22
|
+
* @desc: Topic Node
|
|
23
|
+
*
|
|
24
|
+
* Copyright (c) 2025 by yanxianliang, All Rights Reserved.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
const TopicChildNode = exports.TopicChildNode = /*#__PURE__*/_react.default.memo(props => {
|
|
28
|
+
const {
|
|
29
|
+
data,
|
|
30
|
+
height,
|
|
31
|
+
type,
|
|
32
|
+
id
|
|
33
|
+
} = props;
|
|
34
|
+
const {
|
|
35
|
+
label,
|
|
36
|
+
level,
|
|
37
|
+
childCount,
|
|
38
|
+
collapsed,
|
|
39
|
+
children,
|
|
40
|
+
ellipsis
|
|
41
|
+
} = data; // 主题配置
|
|
42
|
+
|
|
43
|
+
const theme = (0, _base.useTheme)();
|
|
44
|
+
const showTooltip = (0, _base.usePropsSelector)(state => state.showTooltip) ?? 'ellipsis';
|
|
45
|
+
const [_, token] = (0, _internal.useToken)();
|
|
46
|
+
const triggerLayout = (0, _base.useForceUpdate)();
|
|
47
|
+
const internalNode = (0, _react2.useInternalNode)(id);
|
|
48
|
+
const ellipsisRow = (0, _react.useMemo)(() => {
|
|
49
|
+
if (typeof height === 'number' && token.lineHeight && ellipsis === 'multiLine' && theme.fontSize) {
|
|
50
|
+
return Math.floor(height / (theme.fontSize * token.lineHeight));
|
|
51
|
+
}
|
|
52
|
+
return 1;
|
|
53
|
+
}, [token.lineHeight, height, theme.fontSize]);
|
|
54
|
+
const childrenCounts = childCount ?? children?.length;
|
|
55
|
+
const onCollapsed = (0, _ahooks.useMemoizedFn)(collapsed => {
|
|
56
|
+
// 修改data 属性,触发relayout
|
|
57
|
+
data.collapsed = collapsed;
|
|
58
|
+
// 触发relayout
|
|
59
|
+
triggerLayout();
|
|
60
|
+
});
|
|
61
|
+
const canTooltipShow = (0, _ahooks.useMemoizedFn)(event => {
|
|
62
|
+
const target = event.currentTarget;
|
|
63
|
+
if (showTooltip) {
|
|
64
|
+
const textElement = target.firstElementChild;
|
|
65
|
+
return showTooltip === 'ellipsis' ? textElement && textElement.scrollHeight > textElement.clientHeight : true;
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
68
|
+
});
|
|
69
|
+
const handles = (0, _react.useMemo)(() => {
|
|
70
|
+
const {
|
|
71
|
+
source = [],
|
|
72
|
+
target
|
|
73
|
+
} = internalNode?.internals?.handleBounds || {};
|
|
74
|
+
return [...(source || []), ...(target || [])];
|
|
75
|
+
}, [internalNode?.internals?.handleBounds]);
|
|
76
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
77
|
+
children: [handles?.map(handle => /*#__PURE__*/(0, _jsxRuntime.jsx)(_base.HiddenHandle, {
|
|
78
|
+
type: handle.type,
|
|
79
|
+
position: handle.position,
|
|
80
|
+
style: {
|
|
81
|
+
left: handle.x,
|
|
82
|
+
top: handle.y
|
|
83
|
+
}
|
|
84
|
+
}, `${handle.id}_${handle.type}`)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_base.Tooltip, {
|
|
85
|
+
title: label,
|
|
86
|
+
canTooltipShow: canTooltipShow,
|
|
87
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
88
|
+
className: (0, _classcat.default)(['rxflow-topic-container', `rxflow-${type}`]),
|
|
89
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
90
|
+
className: (0, _classcat.default)(['rxflow-topic-text', {
|
|
91
|
+
['rxflow-topic-text-link']: level === 'link'
|
|
92
|
+
}]),
|
|
93
|
+
style: {
|
|
94
|
+
WebkitLineClamp: ellipsisRow
|
|
95
|
+
},
|
|
96
|
+
children: label
|
|
97
|
+
})
|
|
98
|
+
})
|
|
99
|
+
}), childrenCounts ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_base.CollapseButton, {
|
|
100
|
+
count: childrenCounts,
|
|
101
|
+
collapsed: collapsed,
|
|
102
|
+
onCollapse: onCollapsed
|
|
103
|
+
}) : null]
|
|
104
|
+
});
|
|
105
|
+
}, (prevProps, nextProps) => (0, _lodash.isEqual)(prevProps.data, nextProps.data));
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
.rxflow-topic {
|
|
2
|
+
&,&-branch{
|
|
3
|
+
align-items: center;
|
|
4
|
+
background-color: rgb(239, 244, 255);
|
|
5
|
+
border: 1px solid var(--primary-color);
|
|
6
|
+
border-radius: 6px;
|
|
7
|
+
|
|
8
|
+
&:hover {
|
|
9
|
+
box-shadow: 0 0 3px 2px var(--primary-color-lighten);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
&-child {
|
|
14
|
+
align-items: end;
|
|
15
|
+
transform: translate(0, -50%) translate(0, 1px);
|
|
16
|
+
&:after {
|
|
17
|
+
content: '';
|
|
18
|
+
display: block;
|
|
19
|
+
position: absolute;
|
|
20
|
+
bottom: 0;
|
|
21
|
+
height: 2px;
|
|
22
|
+
background-color: var(--primary-color);
|
|
23
|
+
left: 0;
|
|
24
|
+
right: 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
&:hover {
|
|
28
|
+
&:after {
|
|
29
|
+
box-shadow: 0 2px 1px 0 var(--primary-color-lighten);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
&-container {
|
|
35
|
+
width: 100%;
|
|
36
|
+
height: 100%;
|
|
37
|
+
cursor: pointer;
|
|
38
|
+
display: flex;
|
|
39
|
+
padding: 5px 5px 4px;
|
|
40
|
+
justify-content: center;
|
|
41
|
+
position: relative;
|
|
42
|
+
box-sizing: border-box;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
&-text {
|
|
46
|
+
font-family: var(--font-family);
|
|
47
|
+
font-size: var(--font-size);
|
|
48
|
+
color: var(--text-color);
|
|
49
|
+
display: -webkit-box;
|
|
50
|
+
-webkit-line-clamp: 1; /* 默认1行 */
|
|
51
|
+
-webkit-box-orient: vertical;
|
|
52
|
+
overflow: hidden;
|
|
53
|
+
|
|
54
|
+
&&-link {
|
|
55
|
+
color: var(--link-text-color);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;AAI7C;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,EAwB1C,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.nodeTypes = void 0;
|
|
7
|
+
var _constants = require("../constants");
|
|
8
|
+
var _Topic = require("./Topic");
|
|
9
|
+
var _TopicBranch = require("./TopicBranch");
|
|
10
|
+
var _TopicChild = require("./TopicChild");
|
|
11
|
+
var _getNodeBoundWidth = require("../utils/getNodeBoundWidth");
|
|
12
|
+
var _getHandles = require("../utils/getHandles");
|
|
13
|
+
/**
|
|
14
|
+
* @author: yanxianliang
|
|
15
|
+
* @date: 2025-06-20 21:48
|
|
16
|
+
* @desc: nodeTypes register
|
|
17
|
+
*
|
|
18
|
+
* Copyright (c) 2025 by yanxianliang, All Rights Reserved.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 内置的节点类型
|
|
23
|
+
*/
|
|
24
|
+
const nodeTypes = exports.nodeTypes = [{
|
|
25
|
+
type: _constants.MindMapNodeEnum.Topic,
|
|
26
|
+
component: _Topic.TopicNode,
|
|
27
|
+
defaultSize: {
|
|
28
|
+
width: _getNodeBoundWidth.getNodeBoundWidth.bind(void 0, 160),
|
|
29
|
+
height: 50
|
|
30
|
+
},
|
|
31
|
+
measureHandles: _getHandles.getHandles
|
|
32
|
+
}, {
|
|
33
|
+
type: _constants.MindMapNodeEnum.TopicBranch,
|
|
34
|
+
component: _TopicBranch.TopicBranchNode,
|
|
35
|
+
defaultSize: {
|
|
36
|
+
width: _getNodeBoundWidth.getNodeBoundWidth.bind(void 0, 100),
|
|
37
|
+
height: 40
|
|
38
|
+
},
|
|
39
|
+
measureHandles: _getHandles.getHandles
|
|
40
|
+
}, {
|
|
41
|
+
type: _constants.MindMapNodeEnum.TopicChild,
|
|
42
|
+
component: _TopicChild.TopicChildNode,
|
|
43
|
+
defaultSize: {
|
|
44
|
+
width: _getNodeBoundWidth.getNodeBoundWidth.bind(void 0, 60),
|
|
45
|
+
height: 30
|
|
46
|
+
},
|
|
47
|
+
measureHandles: _getHandles.getHandles
|
|
48
|
+
}];
|
package/cjs/types.d.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { BaseThemeConfig, IBaseFlowProps, MindMapLayoutConfig } from "@rxflow/base";
|
|
2
|
+
import { MindMapNodeEnum } from "./constants";
|
|
3
|
+
export interface MiniMapThemeConfig extends BaseThemeConfig, MindMapLayoutConfig {
|
|
4
|
+
/**
|
|
5
|
+
* @description 折叠按钮形状
|
|
6
|
+
* @default 'rect'
|
|
7
|
+
*/
|
|
8
|
+
collapseButtonShape?: 'rect' | 'circle';
|
|
9
|
+
}
|
|
10
|
+
export type LayoutType = 'compactBox' | 'mindmap';
|
|
11
|
+
export type NodeConfig = {
|
|
12
|
+
/**
|
|
13
|
+
* @description 节点默认宽度,当节点数据中未配置宽度时,使用全局默认宽度,不配置则使用对应节点类型内置的宽度
|
|
14
|
+
*/
|
|
15
|
+
width?: number | 'auto';
|
|
16
|
+
/**
|
|
17
|
+
* @description 节点高度,当节点数据中未配置宽度时,使用全局默认宽度,不配置则使用对应节点类型内置的宽度
|
|
18
|
+
*/
|
|
19
|
+
height?: number;
|
|
20
|
+
/**
|
|
21
|
+
* @description 最小宽度限制
|
|
22
|
+
*/
|
|
23
|
+
minWidth?: number;
|
|
24
|
+
/**
|
|
25
|
+
* @description 最大宽度限制
|
|
26
|
+
*/
|
|
27
|
+
maxWidth?: number;
|
|
28
|
+
};
|
|
29
|
+
export type MindMapExtendProps = {
|
|
30
|
+
/**
|
|
31
|
+
* @description 布局方式
|
|
32
|
+
* @default 'mindmap'
|
|
33
|
+
*/
|
|
34
|
+
layoutType?: LayoutType;
|
|
35
|
+
/**
|
|
36
|
+
* @description 主题配置
|
|
37
|
+
*/
|
|
38
|
+
theme?: MiniMapThemeConfig;
|
|
39
|
+
/**
|
|
40
|
+
* @description 树结构数据源
|
|
41
|
+
*/
|
|
42
|
+
root?: TopicNodeType | CustomNodeType;
|
|
43
|
+
/**
|
|
44
|
+
* @description tooltip 显示策略
|
|
45
|
+
* @default 'ellipsis'
|
|
46
|
+
*/
|
|
47
|
+
showTooltip?: 'always' | 'ellipsis' | false;
|
|
48
|
+
};
|
|
49
|
+
export type MindMapFlowProps = Omit<IBaseFlowProps, 'nodes' | 'edges' | 'defaultEdges' | 'defaultNodes' | 'markers' | 'readOnly' | 'forceLayout' | 'layout' | 'autoCenter' | 'showLegend'> & MindMapExtendProps & {};
|
|
50
|
+
export type DisplayLevel = 'link';
|
|
51
|
+
export type TopicChildNodeType = NodeConfig & {
|
|
52
|
+
id: string;
|
|
53
|
+
type: MindMapNodeEnum.TopicChild;
|
|
54
|
+
label: string;
|
|
55
|
+
level?: DisplayLevel;
|
|
56
|
+
ellipsis?: 'multiLine';
|
|
57
|
+
side?: 'left' | 'right';
|
|
58
|
+
};
|
|
59
|
+
export type TopicBranchNodeType = Omit<TopicChildNodeType, 'type'> & {
|
|
60
|
+
type: MindMapNodeEnum.TopicBranch;
|
|
61
|
+
collapsed?: boolean;
|
|
62
|
+
childCount?: number;
|
|
63
|
+
children?: Array<TopicBranchNodeType | TopicChildNodeType>;
|
|
64
|
+
};
|
|
65
|
+
export type TopicNodeType = Omit<TopicBranchNodeType, 'type'> & {
|
|
66
|
+
type: MindMapNodeEnum.Topic;
|
|
67
|
+
};
|
|
68
|
+
export type InnerNodeType = TopicNodeType | TopicBranchNodeType | TopicChildNodeType;
|
|
69
|
+
export type CustomNodeType = {
|
|
70
|
+
type: string;
|
|
71
|
+
id: string;
|
|
72
|
+
collapsed?: boolean;
|
|
73
|
+
childCount?: number;
|
|
74
|
+
children?: Array<CustomNodeType>;
|
|
75
|
+
side?: 'left' | 'right';
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAC,MAAM,cAAc,CAAC;AAClF,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,kBAAmB,SAAQ,eAAe,EAAE,mBAAmB;IAC9E;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CACzC;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;AAGlD,MAAM,MAAM,UAAU,GAAG;IACvB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAA;AAGD,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B;;OAEG;IACH,IAAI,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC;IAEtC;;;OAGG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,KAAK,CAAC;CAC7C,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,EAChD,OAAO,GACP,OAAO,GACP,cAAc,GACd,cAAc,GACd,SAAS,GACT,UAAU,GACV,aAAa,GACb,QAAQ,GACR,YAAY,GACZ,YAAY,CACb,GAAG,kBAAkB,GAAG,EAAE,CAAA;AAE3B,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,eAAe,CAAC,UAAU,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB,CAAA;AAGD,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAAG;IACnE,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC,mBAAmB,GAAG,kBAAkB,CAAC,CAAC;CAC5D,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,GAAG;IAC9D,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAGrF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB,CAAA"}
|
package/cjs/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getHandles.d.ts","sourceRoot":"","sources":["getHandles.ts"],"names":[],"mappings":"AAQA,OAAO,EAAC,IAAI,EAAC,MAAM,eAAe,CAAC;AACnC,OAAO,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAEhD,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,gBAAgB,CAwBvD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getHandles = getHandles;
|
|
7
|
+
var _react = require("@xyflow/react");
|
|
8
|
+
/**
|
|
9
|
+
* @author: yanxianliang
|
|
10
|
+
* @date: 2025-07-02 20:15
|
|
11
|
+
* @desc: 计算handles 信息
|
|
12
|
+
*
|
|
13
|
+
* Copyright (c) 2025 by yanxianliang, All Rights Reserved.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
function getHandles(node) {
|
|
17
|
+
const {
|
|
18
|
+
id,
|
|
19
|
+
width = 1,
|
|
20
|
+
height = 1
|
|
21
|
+
} = node;
|
|
22
|
+
return {
|
|
23
|
+
source: [{
|
|
24
|
+
height: 0,
|
|
25
|
+
id: null,
|
|
26
|
+
nodeId: id,
|
|
27
|
+
position: _react.Position.Right,
|
|
28
|
+
type: "source",
|
|
29
|
+
width: 0,
|
|
30
|
+
x: width,
|
|
31
|
+
y: height / 2
|
|
32
|
+
}],
|
|
33
|
+
target: [{
|
|
34
|
+
height: 0,
|
|
35
|
+
id: null,
|
|
36
|
+
nodeId: id,
|
|
37
|
+
position: _react.Position.Left,
|
|
38
|
+
type: "target",
|
|
39
|
+
width: 0,
|
|
40
|
+
x: 0,
|
|
41
|
+
y: height / 2
|
|
42
|
+
}]
|
|
43
|
+
};
|
|
44
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getNodeBoundWidth.d.ts","sourceRoot":"","sources":["getNodeBoundWidth.ts"],"names":[],"mappings":"AAQA,OAAO,EAAC,IAAI,EAAC,MAAM,eAAe,CAAC;AACnC,OAAO,EAAmB,eAAe,EAAC,MAAM,cAAc,CAAC;AAQ/D,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,UAWzF"}
|