@logicflow/vue-node-registry 1.2.0 → 1.2.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.
Files changed (63) hide show
  1. package/README.md +6 -3
  2. package/dist/index.css +122 -0
  3. package/es/components/container.d.ts +19 -0
  4. package/es/components/container.js +27 -0
  5. package/es/components/container.js.map +1 -0
  6. package/es/components/titleBar.d.ts +24 -0
  7. package/es/components/titleBar.js +160 -0
  8. package/es/components/titleBar.js.map +1 -0
  9. package/es/index.css +122 -0
  10. package/es/index.less +1 -0
  11. package/es/model.d.ts +18 -1
  12. package/es/model.js +44 -5
  13. package/es/model.js.map +1 -1
  14. package/es/registry.d.ts +14 -3
  15. package/es/registry.js +28 -5
  16. package/es/registry.js.map +1 -1
  17. package/es/style/index.css +122 -0
  18. package/es/style/index.less +140 -0
  19. package/es/style/raw.d.ts +4 -0
  20. package/es/style/raw.js +6 -0
  21. package/es/style/raw.js.map +1 -0
  22. package/es/utils/size.d.ts +2 -0
  23. package/es/utils/size.js +14 -0
  24. package/es/utils/size.js.map +1 -0
  25. package/es/view.d.ts +9 -0
  26. package/es/view.js +158 -16
  27. package/es/view.js.map +1 -1
  28. package/lib/components/container.d.ts +19 -0
  29. package/lib/components/container.js +30 -0
  30. package/lib/components/container.js.map +1 -0
  31. package/lib/components/titleBar.d.ts +24 -0
  32. package/lib/components/titleBar.js +163 -0
  33. package/lib/components/titleBar.js.map +1 -0
  34. package/lib/index.css +122 -0
  35. package/lib/index.less +1 -0
  36. package/lib/model.d.ts +18 -1
  37. package/lib/model.js +42 -3
  38. package/lib/model.js.map +1 -1
  39. package/lib/registry.d.ts +14 -3
  40. package/lib/registry.js +30 -6
  41. package/lib/registry.js.map +1 -1
  42. package/lib/style/index.css +122 -0
  43. package/lib/style/index.less +140 -0
  44. package/lib/style/raw.d.ts +4 -0
  45. package/lib/style/raw.js +9 -0
  46. package/lib/style/raw.js.map +1 -0
  47. package/lib/utils/size.d.ts +2 -0
  48. package/lib/utils/size.js +19 -0
  49. package/lib/utils/size.js.map +1 -0
  50. package/lib/view.d.ts +9 -0
  51. package/lib/view.js +156 -14
  52. package/lib/view.js.map +1 -1
  53. package/package.json +10 -5
  54. package/.turbo/turbo-build$colon$dev.log +0 -10
  55. package/.turbo/turbo-build.log +0 -34
  56. package/CHANGELOG.md +0 -217
  57. package/src/index.ts +0 -4
  58. package/src/model.ts +0 -64
  59. package/src/registry.ts +0 -43
  60. package/src/teleport.ts +0 -155
  61. package/src/view.ts +0 -109
  62. package/stats.html +0 -4842
  63. package/tsconfig.json +0 -20
@@ -0,0 +1,19 @@
1
+ export declare const Container: import("vue-demi").DefineComponent<{
2
+ node: {
3
+ type: ObjectConstructor;
4
+ required: true;
5
+ };
6
+ graph: {
7
+ type: ObjectConstructor;
8
+ required: true;
9
+ };
10
+ }, unknown, unknown, {}, {}, import("vue-demi").ComponentOptionsMixin, import("vue-demi").ComponentOptionsMixin, {}, string, import("vue-demi").PublicProps, Readonly<import("vue-demi").ExtractPropTypes<{
11
+ node: {
12
+ type: ObjectConstructor;
13
+ required: true;
14
+ };
15
+ graph: {
16
+ type: ObjectConstructor;
17
+ required: true;
18
+ };
19
+ }>>, {}, {}>;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Container = void 0;
4
+ var vue_demi_1 = require("vue-demi");
5
+ var titleBar_1 = require("./titleBar");
6
+ exports.Container = (0, vue_demi_1.defineComponent)({
7
+ name: 'LFVueNodeContainer',
8
+ props: {
9
+ node: { type: Object, required: true },
10
+ graph: { type: Object, required: true },
11
+ },
12
+ render: function () {
13
+ var _a, _b;
14
+ var props = ((_a = this.node) === null || _a === void 0 ? void 0 : _a.properties) || {};
15
+ var children = [];
16
+ var titleColor = props.style.titleColor || '#E5EEFC';
17
+ if (props._showTitle) {
18
+ children.push((0, vue_demi_1.h)(titleBar_1.TitleBar, { node: this.node, graph: this.graph }));
19
+ }
20
+ console.log('props._expanded', props._expanded);
21
+ if (props._expanded === true) {
22
+ children.push((0, vue_demi_1.h)('div', { class: 'lf-vue-node-content-wrap' }, ((_b = this.$slots) === null || _b === void 0 ? void 0 : _b.default) ? this.$slots.default() : []));
23
+ }
24
+ return (0, vue_demi_1.h)('div', {
25
+ class: 'lf-vue-node-container',
26
+ style: " background: linear-gradient(180deg, ".concat(titleColor, " 0%, #FFFFFF 24px)"),
27
+ }, children);
28
+ },
29
+ });
30
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/components/container.ts"],"names":[],"mappings":";;;AAAA,qCAA6C;AAC7C,uCAAqC;AAExB,QAAA,SAAS,GAAG,IAAA,0BAAe,EAAC;IACvC,IAAI,EAAE,oBAAoB;IAC1B,KAAK,EAAE;QACL,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;QACtC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;KACxC;IACD,MAAM;;QACJ,IAAM,KAAK,GAAG,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,UAAU,KAAI,EAAE,CAAA;QACzC,IAAM,QAAQ,GAAU,EAAE,CAAA;QAC1B,IAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,SAAS,CAAA;QACtD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,IAAA,YAAC,EAAC,mBAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACpE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;QAC/C,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CACX,IAAA,YAAC,EACC,KAAK,EACL,EAAE,KAAK,EAAE,0BAA0B,EAAE,EACrC,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,EAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAClD,CACF,CAAA;QACH,CAAC;QACD,OAAO,IAAA,YAAC,EACN,KAAK,EACL;YACE,KAAK,EAAE,uBAAuB;YAC9B,KAAK,EAAE,+CAAwC,UAAU,uBAAoB;SAC9E,EACD,QAAQ,CACT,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,24 @@
1
+ export declare const TitleBar: import("vue-demi").DefineComponent<{
2
+ node: {
3
+ type: ObjectConstructor;
4
+ required: true;
5
+ };
6
+ graph: {
7
+ type: ObjectConstructor;
8
+ required: true;
9
+ };
10
+ }, unknown, {
11
+ showTooltip: boolean;
12
+ }, {}, {
13
+ toggleExpand(): void;
14
+ runAction(act: any): void;
15
+ }, import("vue-demi").ComponentOptionsMixin, import("vue-demi").ComponentOptionsMixin, {}, string, import("vue-demi").PublicProps, Readonly<import("vue-demi").ExtractPropTypes<{
16
+ node: {
17
+ type: ObjectConstructor;
18
+ required: true;
19
+ };
20
+ graph: {
21
+ type: ObjectConstructor;
22
+ required: true;
23
+ };
24
+ }>>, {}, {}>;
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TitleBar = void 0;
4
+ var vue_demi_1 = require("vue-demi");
5
+ var lodash_es_1 = require("lodash-es");
6
+ exports.TitleBar = (0, vue_demi_1.defineComponent)({
7
+ name: 'LFVueNodeTitleBar',
8
+ props: {
9
+ node: { type: Object, required: true },
10
+ graph: { type: Object, required: true },
11
+ },
12
+ data: function () {
13
+ return {
14
+ showTooltip: false,
15
+ };
16
+ },
17
+ mounted: function () {
18
+ var _this = this;
19
+ var _a, _b;
20
+ var trigger = ((_b = (_a = this.node) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b.titleTrigger) === 'hover'
21
+ ? 'hover'
22
+ : 'click';
23
+ var moreBtn = this.$refs.moreBtn || null;
24
+ var tooltip = this.$refs.tooltip || null;
25
+ var onDoc = function (e) {
26
+ if (!tooltip || !moreBtn)
27
+ return;
28
+ var t = e.target;
29
+ if (_this.showTooltip && !tooltip.contains(t) && !moreBtn.contains(t)) {
30
+ _this.showTooltip = false;
31
+ }
32
+ };
33
+ if (trigger === 'hover' && moreBtn && tooltip) {
34
+ moreBtn.addEventListener('mouseenter', function () {
35
+ _this.showTooltip = true;
36
+ });
37
+ moreBtn.addEventListener('mouseleave', function () {
38
+ _this.showTooltip = false;
39
+ });
40
+ }
41
+ else if (trigger === 'click' && moreBtn) {
42
+ moreBtn.addEventListener('click', function (e) {
43
+ e.stopPropagation();
44
+ _this.showTooltip = !_this.showTooltip;
45
+ });
46
+ document.addEventListener('click', onDoc);
47
+ this.$once &&
48
+ this.$once('hook:beforeDestroy', function () {
49
+ document.removeEventListener('click', onDoc);
50
+ });
51
+ }
52
+ },
53
+ methods: {
54
+ toggleExpand: function () {
55
+ var _a, _b, _c;
56
+ var cur = !!((_b = (_a = this.node) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b._expanded);
57
+ (_c = this.node) === null || _c === void 0 ? void 0 : _c.setProperty('_expanded', !cur);
58
+ },
59
+ runAction: function (act) {
60
+ try {
61
+ typeof (act === null || act === void 0 ? void 0 : act.callback) === 'function' &&
62
+ act.callback(this.node, this.graph);
63
+ }
64
+ finally {
65
+ this.showTooltip = false;
66
+ }
67
+ },
68
+ },
69
+ render: function () {
70
+ var _this = this;
71
+ var _a, _b;
72
+ var props = ((_a = this.node) === null || _a === void 0 ? void 0 : _a.properties) || {};
73
+ var icon = props._icon;
74
+ var title = props._title || '';
75
+ var expanded = !!props._expanded;
76
+ var _titleHeight = (0, lodash_es_1.isNumber)(props._titleHeight) ? props._titleHeight : 28;
77
+ var actions = ((_b = this.node) === null || _b === void 0 ? void 0 : _b.__actions) || [];
78
+ var showMoreAction = !(0, lodash_es_1.isEmpty)(actions);
79
+ console.log('showMoreAction', actions, props._titleActions);
80
+ var bar = (0, vue_demi_1.h)('div', {
81
+ class: expanded
82
+ ? 'lf-vue-node-title lf-vue-node-title-expanded'
83
+ : 'lf-vue-node-title',
84
+ style: "height:".concat(expanded ? _titleHeight : 18, "px;"),
85
+ title: title,
86
+ }, [
87
+ (0, vue_demi_1.h)('div', { class: 'lf-vue-node-title-left' }, [
88
+ icon
89
+ ? (0, vue_demi_1.h)('i', {
90
+ class: 'lf-vue-node-title-icon',
91
+ }, icon)
92
+ : null,
93
+ (0, vue_demi_1.h)('span', {
94
+ class: 'lf-vue-node-title-text',
95
+ }, title),
96
+ ]),
97
+ (0, vue_demi_1.h)('div', { class: 'lf-vue-node-title-actions' }, [
98
+ (0, vue_demi_1.h)('button', {
99
+ ref: 'expandBtn',
100
+ class: 'lf-vue-node-title-expand',
101
+ onClick: function (e) {
102
+ console.log('expandClicked');
103
+ e.stopPropagation();
104
+ _this.toggleExpand();
105
+ },
106
+ on: {
107
+ click: function (e) {
108
+ console.log('expandClicked');
109
+ e.stopPropagation();
110
+ _this.toggleExpand();
111
+ },
112
+ },
113
+ }, [
114
+ (0, vue_demi_1.h)('svg', {
115
+ width: 14,
116
+ height: 12,
117
+ viewBox: '0 0 14 12',
118
+ xmlns: 'http://www.w3.org/2000/svg',
119
+ class: 'lf-vue-node-title-expand-icon',
120
+ style: "transform:".concat(expanded ? 'rotate(180deg)' : 'rotate(0deg)', ";"),
121
+ }, [
122
+ (0, vue_demi_1.h)('path', {
123
+ d: 'M0.5201124,5.47988755C0.23603013,5.7639699,0.24460429,6.2271326,0.53900635,6.5005059L6.3195491,11.8681526C6.7032304,12.2244282,7.2967696,12.2244282,7.6804514,11.8681526L13.460994,6.5005059C13.755396,6.2271326,13.76397,5.7639699,13.479888,5.47988755C13.211547,5.21154633,12.779465,5.20215771,12.499721,5.45858961L7.3378625,10.1902928C7.1467018,10.3655233,6.8532982,10.3655233,6.6621375,10.1902928L1.5002797,5.45858967C1.2205358,5.20215771,0.78845364,5.21154633,0.5201124,5.47988755Z',
124
+ fill: '#474747',
125
+ }),
126
+ (0, vue_demi_1.h)('path', {
127
+ d: 'M0.5201124,0.47988755C0.23603013,0.7639699,0.24460429,1.2271326,0.53900635,1.5005059L6.3195491,6.8681526C6.7032304,7.2244282,7.2967696,7.2244282,7.6804514,6.8681526L13.460994,1.5005059C13.755396,1.2271326,13.76397,0.7639699,13.479888,0.47988755C13.211547,0.21154633,12.779465,0.20215771,12.499721,0.45858961L7.3378625,5.1902928C7.1467018,5.3655233,6.8532982,5.3655233,6.6621375,5.1902928L1.5002797,0.45858967C1.2205358,0.20215771,0.78845364,0.21154633,0.5201124,0.47988755Z',
128
+ fill: '#9B9B9B',
129
+ }),
130
+ ]),
131
+ ]),
132
+ showMoreAction &&
133
+ (0, vue_demi_1.h)('button', {
134
+ ref: 'moreBtn',
135
+ class: 'lf-vue-node-title-more',
136
+ }, [(0, vue_demi_1.h)('i', { class: 'lf-vue-node-title-more-icon' }, '⋯')]),
137
+ (0, vue_demi_1.h)('div', {
138
+ ref: 'tooltip',
139
+ class: 'lf-vue-node-title-tooltip',
140
+ style: "opacity:".concat(this.showTooltip ? 1 : 0, ";pointer-events:").concat(this.showTooltip ? 'auto' : 'none', ";"),
141
+ }, [
142
+ (0, vue_demi_1.h)('div', { class: 'lf-vue-node-title-tooltip-list' }, actions.map(function (act) {
143
+ return (0, vue_demi_1.h)('div', {
144
+ class: 'lf-vue-node-title-tooltip-item',
145
+ onClick: function (e) {
146
+ e.stopPropagation();
147
+ _this.runAction(act);
148
+ },
149
+ on: {
150
+ click: function (e) {
151
+ e.stopPropagation();
152
+ _this.runAction(act);
153
+ },
154
+ },
155
+ }, (act === null || act === void 0 ? void 0 : act.name) || '');
156
+ })),
157
+ ]),
158
+ ]),
159
+ ]);
160
+ return bar;
161
+ },
162
+ });
163
+ //# sourceMappingURL=titleBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"titleBar.js","sourceRoot":"","sources":["../../src/components/titleBar.ts"],"names":[],"mappings":"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"}
package/lib/index.css ADDED
@@ -0,0 +1,122 @@
1
+ .lf-vue-node-container {
2
+ position: relative;
3
+ display: flex;
4
+ flex-direction: column;
5
+ box-sizing: border-box;
6
+ padding: 6px;
7
+ color: #474747;
8
+ border-radius: 12px;
9
+ box-shadow: 0 0 10px #cad2e15f;
10
+ }
11
+ .lf-vue-node-content-wrap {
12
+ display: flex;
13
+ flex: 1 1 auto;
14
+ justify-content: center;
15
+ }
16
+ .lf-vue-node-title {
17
+ display: flex;
18
+ align-items: flex-start;
19
+ justify-content: space-between;
20
+ box-sizing: border-box;
21
+ margin-bottom: 4px;
22
+ padding: 0 8px;
23
+ backdrop-filter: saturate(180%) blur(4px);
24
+ }
25
+ .lf-vue-node-title-expanded {
26
+ margin-bottom: 6px;
27
+ padding-bottom: 8px;
28
+ border-bottom: 1px solid #eaeaea;
29
+ }
30
+ @supports not (backdrop-filter: blur(1px)) {
31
+ .lf-vue-node-title {
32
+ backdrop-filter: none;
33
+ }
34
+ }
35
+ .lf-vue-node-title-left {
36
+ display: flex;
37
+ gap: 6px;
38
+ align-items: center;
39
+ min-width: 0;
40
+ }
41
+ .lf-vue-node-title-icon {
42
+ display: inline-block;
43
+ width: 16px;
44
+ height: 16px;
45
+ color: #666;
46
+ font-style: normal;
47
+ line-height: 16px;
48
+ text-align: center;
49
+ }
50
+ .lf-vue-node-title-text {
51
+ overflow: hidden;
52
+ color: #333;
53
+ font-weight: 500;
54
+ font-size: 14px;
55
+ white-space: nowrap;
56
+ text-overflow: ellipsis;
57
+ }
58
+ .lf-vue-node-title-actions {
59
+ display: flex;
60
+ gap: 6px;
61
+ align-items: center;
62
+ }
63
+ .lf-vue-node-title-expand,
64
+ .lf-vue-node-title-more {
65
+ display: inline-flex;
66
+ align-items: center;
67
+ justify-content: center;
68
+ width: 20px;
69
+ height: 20px;
70
+ padding: 2px;
71
+ background: transparent;
72
+ border: none;
73
+ border-radius: 4px;
74
+ cursor: pointer;
75
+ transition: background 0.15s ease;
76
+ appearance: none;
77
+ }
78
+ .lf-vue-node-title-expand:hover,
79
+ .lf-vue-node-title-more:hover {
80
+ background: rgba(0, 0, 0, 0.06);
81
+ }
82
+ .lf-vue-node-title-expand-icon {
83
+ color: #666;
84
+ font-style: normal;
85
+ transition: transform 0.3s ease;
86
+ }
87
+ .lf-vue-node-title-more-icon {
88
+ color: #666;
89
+ font-style: normal;
90
+ }
91
+ .lf-vue-node-title-tooltip {
92
+ position: absolute;
93
+ top: -50px;
94
+ right: -135px;
95
+ min-width: 120px;
96
+ max-width: 240px;
97
+ padding: 6px 8px;
98
+ background: #fff;
99
+ border: 1px solid rgba(0, 0, 0, 0.1);
100
+ border-radius: 6px;
101
+ box-shadow: 0 6px 20px rgba(0, 0, 0, 0.12);
102
+ transform: translateY(calc(100% + 4px));
103
+ transition: opacity 0.15s ease, transform 0.15s ease;
104
+ }
105
+ .lf-vue-node-title-tooltip-list {
106
+ display: flex;
107
+ flex-direction: column;
108
+ gap: 4px;
109
+ }
110
+ .lf-vue-node-title-tooltip-item {
111
+ display: flex;
112
+ align-items: center;
113
+ justify-content: flex-start;
114
+ padding: 6px;
115
+ color: #333;
116
+ font-size: 12px;
117
+ border-radius: 4px;
118
+ cursor: pointer;
119
+ }
120
+ .lf-vue-node-title-tooltip-item:hover {
121
+ background: rgba(0, 0, 0, 0.05);
122
+ }
package/lib/index.less ADDED
@@ -0,0 +1 @@
1
+ @import url('./style/index.less');
package/lib/model.d.ts CHANGED
@@ -1,4 +1,9 @@
1
- import LogicFlow, { HtmlNodeModel, IHtmlNodeProperties } from '@logicflow/core';
1
+ import LogicFlow, { GraphModel, BaseNodeModel, HtmlNodeModel, IHtmlNodeProperties } from '@logicflow/core';
2
+ import NodeConfig = LogicFlow.NodeConfig;
3
+ export type NodeAction = {
4
+ name: string;
5
+ callback?: (node: BaseNodeModel, graph: GraphModel) => void;
6
+ };
2
7
  export interface VueCustomProperties extends IHtmlNodeProperties {
3
8
  width?: number;
4
9
  height?: number;
@@ -7,10 +12,22 @@ export interface VueCustomProperties extends IHtmlNodeProperties {
7
12
  refY?: number;
8
13
  style?: LogicFlow.CommonTheme;
9
14
  textStyle?: LogicFlow.TextNodeTheme;
15
+ _showTitle?: boolean;
16
+ _title?: string;
17
+ _icon?: string;
18
+ _titleHeight?: number;
19
+ _expanded?: boolean;
10
20
  }
11
21
  export declare class VueNodeModel<P extends VueCustomProperties = VueCustomProperties> extends HtmlNodeModel<P> {
22
+ private __baseHeight?;
23
+ __actions?: {
24
+ name: string;
25
+ callback?: (node: BaseNodeModel, graph: GraphModel) => void;
26
+ }[];
27
+ constructor(data: NodeConfig<P>, graphModel: GraphModel);
12
28
  setAttributes(): void;
13
29
  getTextStyle(): LogicFlow.TextNodeTheme;
14
30
  getNodeStyle(): LogicFlow.CommonTheme;
31
+ setNodeActions(actions: NodeAction[]): void;
15
32
  }
16
33
  export default VueNodeModel;
package/lib/model.js CHANGED
@@ -31,12 +31,41 @@ var core_1 = require("@logicflow/core");
31
31
  var lodash_es_1 = require("lodash-es");
32
32
  var VueNodeModel = /** @class */ (function (_super) {
33
33
  __extends(VueNodeModel, _super);
34
- function VueNodeModel() {
35
- return _super !== null && _super.apply(this, arguments) || this;
34
+ function VueNodeModel(data, graphModel) {
35
+ var _this = _super.call(this, data, graphModel) || this;
36
+ var properties = data.properties;
37
+ // 如果需要展示标题,则重新设置一个能把节点内容都展示出来的最小宽高
38
+ if (properties) {
39
+ var _a = properties._showTitle, _showTitle = _a === void 0 ? false : _a, _b = properties.style, style = _b === void 0 ? {} : _b;
40
+ if (_showTitle) {
41
+ _this.minWidth = 160;
42
+ _this.minHeight = 80;
43
+ _this.text.editable = false;
44
+ // 判断当前节点宽高是否小于最小宽高,如果是,强制设置为最小宽高
45
+ var newWidth = _this.width < _this.minWidth ? _this.minWidth : _this.width;
46
+ var newHeight = _this.height < _this.minHeight ? _this.minHeight : _this.height;
47
+ _this.setProperties(__assign(__assign({ _expanded: false }, properties), { style: __assign({ overflow: 'visible' }, (0, lodash_es_1.cloneDeep)(style)), width: newWidth + 8, height: newHeight + 8 }));
48
+ _this.setNodeActions([
49
+ {
50
+ name: '复制',
51
+ callback: function (nodeModel, graphModel) {
52
+ graphModel.cloneNode(nodeModel.id);
53
+ },
54
+ },
55
+ {
56
+ name: '删除',
57
+ callback: function (nodeModel, graphModel) {
58
+ graphModel.deleteNode(nodeModel.id);
59
+ },
60
+ },
61
+ ]);
62
+ }
63
+ }
64
+ return _this;
36
65
  }
37
66
  VueNodeModel.prototype.setAttributes = function () {
38
67
  // DONE: 解决 width、height、radius 为 0 时的问题
39
- var _a = this.properties, width = _a.width, height = _a.height, radius = _a.radius;
68
+ var _a = this.properties, width = _a.width, height = _a.height, radius = _a.radius, _showTitle = _a._showTitle, _titleHeight = _a._titleHeight;
40
69
  if (!(0, lodash_es_1.isNil)(width)) {
41
70
  this.width = width;
42
71
  }
@@ -46,6 +75,12 @@ var VueNodeModel = /** @class */ (function (_super) {
46
75
  if (!(0, lodash_es_1.isNil)(radius)) {
47
76
  this.radius = radius;
48
77
  }
78
+ if (this.__baseHeight === undefined) {
79
+ this.__baseHeight = (0, lodash_es_1.isNil)(height) ? this.height : height;
80
+ }
81
+ var extra = _showTitle ? (_titleHeight !== null && _titleHeight !== void 0 ? _titleHeight : 28) : 0;
82
+ var base = (0, lodash_es_1.isNil)(height) ? this.__baseHeight : height;
83
+ this.height = base + extra;
49
84
  };
50
85
  VueNodeModel.prototype.getTextStyle = function () {
51
86
  var _a = this.properties, _b = _a.refX, refX = _b === void 0 ? 0 : _b, _c = _a.refY, refY = _c === void 0 ? 0 : _c, textStyle = _a.textStyle;
@@ -58,6 +93,10 @@ var VueNodeModel = /** @class */ (function (_super) {
58
93
  var customNodeStyle = this.properties.style;
59
94
  return __assign(__assign({}, style), ((0, lodash_es_1.cloneDeep)(customNodeStyle) || {}));
60
95
  };
96
+ VueNodeModel.prototype.setNodeActions = function (actions) {
97
+ this.__actions =
98
+ (0, lodash_es_1.isArray)(actions) && !(0, lodash_es_1.isEmpty)(actions) ? (0, lodash_es_1.cloneDeep)(actions) : [];
99
+ };
61
100
  return VueNodeModel;
62
101
  }(core_1.HtmlNodeModel));
63
102
  exports.VueNodeModel = VueNodeModel;
package/lib/model.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA+E;AAC/E,uCAA4C;AAiB5C;IAEU,gCAAgB;IAF1B;;IA2CA,CAAC;IAxCC,oCAAa,GAAb;QACE,wCAAwC;QAClC,IAAA,KAA4B,IAAI,CAAC,UAAU,EAAzC,KAAK,WAAA,EAAE,MAAM,YAAA,EAAE,MAAM,YAAoB,CAAA;QACjD,IAAI,CAAC,IAAA,iBAAK,EAAC,KAAK,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QACpB,CAAC;QACD,IAAI,CAAC,IAAA,iBAAK,EAAC,MAAM,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACtB,CAAC;QACD,IAAI,CAAC,IAAA,iBAAK,EAAC,MAAM,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACtB,CAAC;IACH,CAAC;IAED,mCAAY,GAAZ;QACQ,IAAA,KAAoC,IAAI,CAAC,UAAU,EAAjD,YAAQ,EAAR,IAAI,mBAAG,CAAC,KAAA,EAAE,YAAQ,EAAR,IAAI,mBAAG,CAAC,KAAA,EAAE,SAAS,eAAoB,CAAA;QACzD,IAAM,KAAK,GAAG,gBAAK,CAAC,YAAY,WAAE,CAAA;QAElC,6BAA6B;QAC7B,sCACK,KAAK,GACL,CAAC,IAAA,qBAAS,EAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAC/B,SAAS,EAAE,yBAAkB,IAAI,cAAI,IAAI,MAAG,IAC7C;IACH,CAAC;IAED,mCAAY,GAAZ;QACE,IAAM,KAAK,GAAG,gBAAK,CAAC,YAAY,WAAE,CAAA;QAEhC,IAAO,eAAe,GAEpB,IAAI,CAAC,UAAU,MAFK,CAEL;QAEnB,6BACK,KAAK,GACL,CAAC,IAAA,qBAAS,EAAC,eAAe,CAAC,IAAI,EAAE,CAAC,EAGtC;IACH,CAAC;IACH,mBAAC;AAAD,CAAC,AA3CD,CAEU,oBAAa,GAyCtB;AA3CY,oCAAY;AA6CzB,kBAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
package/lib/registry.d.ts CHANGED
@@ -1,12 +1,23 @@
1
- import LogicFlow from '@logicflow/core';
1
+ import LogicFlow, { GraphModel } from '@logicflow/core';
2
2
  import RegisterConfig = LogicFlow.RegisterConfig;
3
3
  export type VueNodeConfig = {
4
4
  type: string;
5
5
  component: any;
6
6
  effect?: (keyof LogicFlow.PropertiesType)[];
7
7
  } & Partial<RegisterConfig>;
8
- export declare const vueNodesMap: Record<string, {
8
+ type VueNodeEntry = {
9
9
  component: any;
10
10
  effect?: (keyof LogicFlow.PropertiesType)[];
11
- }>;
11
+ };
12
+ /**
13
+ * @deprecated Use {@link getVueNodeConfig} instead for multi-instance support.
14
+ * This global map is still populated for backward compatibility but does NOT
15
+ * isolate registrations across different LogicFlow instances.
16
+ */
17
+ export declare const vueNodesMap: Record<string, VueNodeEntry>;
18
+ /**
19
+ * Retrieve the Vue node configuration scoped to a specific LogicFlow instance.
20
+ */
21
+ export declare function getVueNodeConfig(type: string, graphModel?: GraphModel | null): VueNodeEntry | undefined;
12
22
  export declare function register(config: VueNodeConfig, lf: LogicFlow): void;
23
+ export {};
package/lib/registry.js CHANGED
@@ -1,18 +1,42 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.register = exports.vueNodesMap = void 0;
3
+ exports.register = exports.getVueNodeConfig = exports.vueNodesMap = void 0;
4
4
  var view_1 = require("./view");
5
5
  var model_1 = require("./model");
6
- exports.vueNodesMap = {};
6
+ // Per-instance map: entries are eligible for garbage collection once the associated GraphModel instance is no longer referenced
7
+ var vueNodesMaps = new WeakMap();
8
+ /**
9
+ * @deprecated Use {@link getVueNodeConfig} instead for multi-instance support.
10
+ * This global map is still populated for backward compatibility but does NOT
11
+ * isolate registrations across different LogicFlow instances.
12
+ */
13
+ exports.vueNodesMap = Object.create(null);
14
+ /**
15
+ * Retrieve the Vue node configuration scoped to a specific LogicFlow instance.
16
+ */
17
+ function getVueNodeConfig(type, graphModel) {
18
+ var _a;
19
+ if (typeof graphModel !== 'object' || graphModel === null) {
20
+ return undefined;
21
+ }
22
+ return (_a = vueNodesMaps.get(graphModel)) === null || _a === void 0 ? void 0 : _a.get(type);
23
+ }
24
+ exports.getVueNodeConfig = getVueNodeConfig;
7
25
  function register(config, lf) {
8
26
  var type = config.type, component = config.component, effect = config.effect, CustomNodeView = config.view, CustomNodeModel = config.model;
9
27
  if (!type) {
10
28
  throw new Error('You should specify type in config');
11
29
  }
12
- exports.vueNodesMap[type] = {
13
- component: component,
14
- effect: effect,
15
- };
30
+ var entry = { component: component, effect: effect };
31
+ // Scope to this LogicFlow instance
32
+ var map = vueNodesMaps.get(lf.graphModel);
33
+ if (!map) {
34
+ map = new Map();
35
+ vueNodesMaps.set(lf.graphModel, map);
36
+ }
37
+ map.set(type, entry);
38
+ // Also populate global map for backward compatibility
39
+ exports.vueNodesMap[type] = entry;
16
40
  lf.register({
17
41
  type: type,
18
42
  view: CustomNodeView || view_1.VueNodeView,
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":";;;AACA,+BAAoC;AACpC,iCAAsC;AAUzB,QAAA,WAAW,GAMpB,EAAE,CAAA;AAEN,SAAgB,QAAQ,CAAC,MAAqB,EAAE,EAAa;IAEzD,IAAA,IAAI,GAKF,MAAM,KALJ,EACJ,SAAS,GAIP,MAAM,UAJC,EACT,MAAM,GAGJ,MAAM,OAHF,EACA,cAAc,GAElB,MAAM,KAFY,EACb,eAAe,GACpB,MAAM,MADc,CACd;IAEV,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACtD,CAAC;IACD,mBAAW,CAAC,IAAI,CAAC,GAAG;QAClB,SAAS,WAAA;QACT,MAAM,QAAA;KACP,CAAA;IAED,EAAE,CAAC,QAAQ,CAAC;QACV,IAAI,MAAA;QACJ,IAAI,EAAE,cAAc,IAAI,kBAAW;QACnC,KAAK,EAAE,eAAe,IAAI,oBAAY;KACvC,CAAC,CAAA;AACJ,CAAC;AAtBD,4BAsBC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":";;;AACA,+BAAoC;AACpC,iCAAsC;AAetC,gIAAgI;AAChI,IAAM,YAAY,GAAG,IAAI,OAAO,EAAyC,CAAA;AAEzE;;;;GAIG;AACU,QAAA,WAAW,GAAiC,MAAM,CAAC,MAAM,CACpE,IAAI,CAC2B,CAAA;AAEjC;;GAEG;AACH,SAAgB,gBAAgB,CAC9B,IAAY,EACZ,UAA8B;;IAE9B,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QAC1D,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,MAAA,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,0CAAE,GAAG,CAAC,IAAI,CAAC,CAAA;AAChD,CAAC;AARD,4CAQC;AAED,SAAgB,QAAQ,CAAC,MAAqB,EAAE,EAAa;IAEzD,IAAA,IAAI,GAKF,MAAM,KALJ,EACJ,SAAS,GAIP,MAAM,UAJC,EACT,MAAM,GAGJ,MAAM,OAHF,EACA,cAAc,GAElB,MAAM,KAFY,EACb,eAAe,GACpB,MAAM,MADc,CACd;IAEV,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACtD,CAAC;IAED,IAAM,KAAK,GAAiB,EAAE,SAAS,WAAA,EAAE,MAAM,QAAA,EAAE,CAAA;IAEjD,mCAAmC;IACnC,IAAI,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;IACzC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,GAAG,IAAI,GAAG,EAAwB,CAAA;QACrC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;IACtC,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAEpB,sDAAsD;IACtD,mBAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;IAEzB,EAAE,CAAC,QAAQ,CAAC;QACV,IAAI,MAAA;QACJ,IAAI,EAAE,cAAc,IAAI,kBAAW;QACnC,KAAK,EAAE,eAAe,IAAI,oBAAY;KACvC,CAAC,CAAA;AACJ,CAAC;AA/BD,4BA+BC"}