@likec4/diagram 1.27.1 → 1.27.2
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/bundle/index.js +2147 -6730
- package/dist/LikeC4Diagram.js +1 -1
- package/dist/LikeC4Diagram.props.d.ts +5 -3
- package/dist/StaticLikeC4Diagram.js +1 -1
- package/dist/_virtual/set.js +5 -0
- package/dist/_virtual/set2.js +3 -0
- package/dist/base/BaseXYFlow.d.ts +2 -1
- package/dist/base/primitives/compound/CompoundNodeContainer.d.ts +1 -1
- package/dist/base/primitives/compound/CompoundNodeContainer.js +0 -1
- package/dist/base/primitives/element/ElementActionButtons.js +5 -10
- package/dist/base/primitives/element/ElementNodeContainer.css.js +4 -4
- package/dist/base/updateEdges.js +1 -9
- package/dist/base/updateNodes.js +1 -12
- package/dist/bundle/LikeC4View.js +2 -2
- package/dist/bundle/LikeC4View.props.d.ts +7 -7
- package/dist/hooks/useCurrentViewId.js +8 -2
- package/dist/hooks/useDiagram.d.ts +1517 -684
- package/dist/hooks/useDiagram.js +16 -8
- package/dist/likec4diagram/ui/notation/NotationPanel.css.js +3 -3
- package/dist/likec4diagram/ui/notation/NotationPanel.js +10 -4
- package/dist/node_modules/.pnpm/mnemonist@0.40.3_patch_hash_5c12abb43fcff6fd81e53021b89075d53249640d165a2556cc1e58d71201a13a/node_modules/mnemonist/set.js +369 -0
- package/dist/overlays/Overlays.js +3 -1
- package/dist/overlays/element-details/actor.d.ts +2769 -173
- package/dist/overlays/overlay/Overlay.css.d.ts +26 -2
- package/dist/overlays/overlay/Overlay.css.js +66 -18
- package/dist/overlays/overlay/Overlay.d.ts +7 -6
- package/dist/overlays/overlay/Overlay.js +12 -8
- package/dist/overlays/overlaysActor.js +2 -2
- package/dist/overlays/relationship-details/RelationshipDetails.js +113 -70
- package/dist/overlays/relationship-details/SelectEdge.d.ts +1 -1
- package/dist/overlays/relationship-details/SelectEdge.js +15 -9
- package/dist/overlays/relationship-details/_types.d.ts +4 -1
- package/dist/overlays/relationship-details/actor.d.ts +415 -128
- package/dist/overlays/relationship-details/actor.js +162 -53
- package/dist/overlays/relationship-details/compute.d.ts +12 -0
- package/dist/overlays/relationship-details/compute.js +139 -0
- package/dist/overlays/relationship-details/custom/ElementActions.js +27 -5
- package/dist/overlays/relationship-details/custom/edgeTypes.js +1 -1
- package/dist/overlays/relationship-details/custom/nodeTypes.d.ts +2 -1
- package/dist/overlays/relationship-details/hooks.d.ts +336 -6
- package/dist/overlays/relationship-details/hooks.js +9 -7
- package/dist/overlays/relationship-details/layout-to-xyflow.d.ts +12 -0
- package/dist/overlays/relationship-details/layout-to-xyflow.js +149 -0
- package/dist/overlays/relationship-details/layout.d.ts +22 -0
- package/dist/overlays/relationship-details/layout.js +314 -0
- package/dist/overlays/relationships-browser/RelationshipsBrowser.d.ts +3 -1
- package/dist/overlays/relationships-browser/RelationshipsBrowser.js +2 -2
- package/dist/overlays/relationships-browser/_types.d.ts +2 -0
- package/dist/overlays/relationships-browser/actor.d.ts +130 -14
- package/dist/overlays/relationships-browser/actor.js +30 -16
- package/dist/overlays/relationships-browser/custom/ElementActions.js +5 -3
- package/dist/overlays/relationships-browser/custom/edgeTypes.d.ts +3 -1
- package/dist/overlays/relationships-browser/custom/edgeTypes.js +1 -1
- package/dist/overlays/relationships-browser/hooks.d.ts +3 -1
- package/dist/overlays/relationships-browser/hooks.js +1 -1
- package/dist/overlays/relationships-browser/{-useRelationshipsView.d.ts → layout.d.ts} +2 -0
- package/dist/overlays/relationships-browser/{-useRelationshipsView.js → layout.js} +19 -2
- package/dist/overlays/relationships-browser/useViewToNodesEdges.d.ts +1 -1
- package/dist/overlays/relationships-browser/useViewToNodesEdges.js +3 -1
- package/dist/packages/core/src/compute-view/relationships-view/compute.js +1 -1
- package/dist/packages/core/src/model/connection/model/ConnectionModel.js +121 -0
- package/dist/packages/core/src/model/connection/model/find.js +39 -0
- package/dist/packages/core/src/model/connection/ops.js +7 -0
- package/dist/packages/core/src/utils/const.js +3 -0
- package/dist/packages/core/src/utils/fqn.js +9 -1
- package/dist/packages/core/src/utils/iterable/find.js +21 -0
- package/dist/packages/core/src/utils/iterable/some.js +21 -0
- package/dist/packages/core/src/utils/set.js +48 -0
- package/dist/packages/core/src/utils/string-hash.js +13 -0
- package/dist/state/diagram-machine.d.ts +1552 -703
- package/dist/state/diagram-machine.js +39 -3
- package/dist/state/syncManualLayoutActor.d.ts +1 -1
- package/dist/styles.css.js +1 -1
- package/package.json +11 -11
- package/src/LikeC4Diagram.props.ts +7 -3
- package/src/LikeC4Diagram.tsx +1 -1
- package/src/StaticLikeC4Diagram.tsx +1 -1
- package/src/base/BaseXYFlow.tsx +2 -1
- package/src/base/primitives/compound/CompoundNodeContainer.tsx +0 -2
- package/src/base/primitives/element/ElementActionButtons.tsx +6 -7
- package/src/base/primitives/element/ElementNodeContainer.css.ts +4 -4
- package/src/base/updateEdges.ts +8 -8
- package/src/base/updateNodes.ts +11 -11
- package/src/bundle/LikeC4View.props.ts +7 -7
- package/src/bundle/LikeC4View.tsx +2 -2
- package/src/hooks/useCurrentViewId.ts +4 -2
- package/src/hooks/useDiagram.ts +18 -9
- package/src/likec4diagram/ui/notation/NotationPanel.css.ts +2 -2
- package/src/likec4diagram/ui/notation/NotationPanel.tsx +8 -6
- package/src/overlays/Overlays.tsx +3 -1
- package/src/overlays/overlay/Overlay.css.ts +67 -17
- package/src/overlays/overlay/Overlay.tsx +26 -21
- package/src/overlays/overlaysActor.ts +1 -1
- package/src/overlays/relationship-details/RelationshipDetails.tsx +131 -68
- package/src/overlays/relationship-details/SelectEdge.tsx +19 -12
- package/src/overlays/relationship-details/_types.ts +3 -1
- package/src/overlays/relationship-details/actor.ts +217 -68
- package/src/overlays/relationship-details/compute.ts +186 -0
- package/src/overlays/relationship-details/custom/ElementActions.tsx +27 -18
- package/src/overlays/relationship-details/custom/edgeTypes.tsx +1 -1
- package/src/overlays/relationship-details/hooks.ts +10 -8
- package/src/overlays/relationship-details/layout-to-xyflow.ts +195 -0
- package/src/overlays/relationship-details/layout.ts +470 -0
- package/src/overlays/relationships-browser/RelationshipsBrowser.tsx +2 -2
- package/src/overlays/relationships-browser/_types.ts +2 -0
- package/src/overlays/relationships-browser/actor.ts +39 -14
- package/src/overlays/relationships-browser/custom/ElementActions.tsx +5 -3
- package/src/overlays/relationships-browser/custom/edgeTypes.tsx +1 -1
- package/src/overlays/relationships-browser/hooks.ts +2 -2
- package/src/overlays/relationships-browser/{-useRelationshipsView.ts → layout.ts} +23 -13
- package/src/overlays/relationships-browser/useViewToNodesEdges.ts +3 -1
- package/src/state/diagram-machine.ts +51 -6
- package/dist/overlays/relationship-details/useLayoutedDetails.d.ts +0 -19
- package/dist/overlays/relationship-details/useLayoutedDetails.js +0 -267
- package/src/overlays/relationship-details/useLayoutedDetails.ts +0 -376
package/dist/hooks/useDiagram.js
CHANGED
|
@@ -37,17 +37,19 @@ function useDiagram() {
|
|
|
37
37
|
});
|
|
38
38
|
},
|
|
39
39
|
openSource: (params) => {
|
|
40
|
-
actor.send({ type: "open.source", ...params });
|
|
41
|
-
},
|
|
42
|
-
openElementDetails: (fqn, fromNode) => {
|
|
43
40
|
startTransition(() => {
|
|
44
|
-
actor.send({ type: "open.
|
|
41
|
+
actor.send({ type: "open.source", ...params });
|
|
45
42
|
});
|
|
46
43
|
},
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
44
|
+
openElementDetails: (fqn, fromNode) => {
|
|
45
|
+
actor.send({ type: "open.elementDetails", fqn, fromNode });
|
|
46
|
+
},
|
|
47
|
+
openRelationshipDetails: (...params) => {
|
|
48
|
+
if (params.length === 1) {
|
|
49
|
+
actor.send({ type: "open.relationshipDetails", params: { edgeId: params[0] } });
|
|
50
|
+
} else {
|
|
51
|
+
actor.send({ type: "open.relationshipDetails", params: { source: params[0], target: params[1] } });
|
|
52
|
+
}
|
|
51
53
|
},
|
|
52
54
|
updateNodeData: (nodeId, data) => {
|
|
53
55
|
actor.send({ type: "update.nodeData", nodeId, data });
|
|
@@ -117,6 +119,12 @@ function useDiagram() {
|
|
|
117
119
|
},
|
|
118
120
|
toggleFeature: (feature, forceValue) => {
|
|
119
121
|
actor.send({ type: "toggle.feature", feature, ...forceValue !== void 0 && { forceValue } });
|
|
122
|
+
},
|
|
123
|
+
highlightNotation: (notation, kind) => {
|
|
124
|
+
actor.send({ type: "notations.highlight", notation, ...kind && { kind } });
|
|
125
|
+
},
|
|
126
|
+
unhighlightNotation: () => {
|
|
127
|
+
actor.send({ type: "notations.unhighlight" });
|
|
120
128
|
}
|
|
121
129
|
}), [actor]);
|
|
122
130
|
}
|
|
@@ -77,9 +77,9 @@ const shapeBadge = css({
|
|
|
77
77
|
["--badge-fz"]: "9.5px",
|
|
78
78
|
["--badge-padding-x"]: "3px",
|
|
79
79
|
["--badge-height"]: "13.5px",
|
|
80
|
-
["--badge-lh"]: "1"
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
["--badge-lh"]: "1",
|
|
81
|
+
["--badge-bg"]: "{colors.likec4.palette.fill}",
|
|
82
|
+
["--badge-color"]: "{colors.likec4.palette.hiContrast}"
|
|
83
83
|
});
|
|
84
84
|
|
|
85
85
|
export { card, container, elementNotation, icon, shapeBadge, tabPanel };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import '@likec4/core';
|
|
3
3
|
import { cx, css } from '@likec4/styles/css';
|
|
4
|
-
import
|
|
4
|
+
import '@likec4/styles/tokens';
|
|
5
5
|
import { Tooltip, ThemeIcon, ActionIcon, Paper, Tabs, TabsList, TabsTab, TabsPanel, ScrollAreaAutosize, Stack, Card, Group, Box, Badge, Text } from '@mantine/core';
|
|
6
6
|
import { useLocalStorage } from '@mantine/hooks';
|
|
7
7
|
import { IconAlertTriangle, IconHelpCircle, IconArrowDownRight } from '@tabler/icons-react';
|
|
@@ -22,7 +22,7 @@ const ElementNotation = ({ value }) => {
|
|
|
22
22
|
shape = "rectangle"
|
|
23
23
|
} = value;
|
|
24
24
|
const [onlyKind, setOnlyKind] = useState(null);
|
|
25
|
-
useDiagram();
|
|
25
|
+
const diagram = useDiagram();
|
|
26
26
|
const w = 300;
|
|
27
27
|
const h = 200;
|
|
28
28
|
return /* @__PURE__ */ jsx(
|
|
@@ -37,11 +37,14 @@ const ElementNotation = ({ value }) => {
|
|
|
37
37
|
likec4Palette: color
|
|
38
38
|
})
|
|
39
39
|
),
|
|
40
|
+
"data-likec4-color": color,
|
|
40
41
|
onMouseEnter: () => {
|
|
41
42
|
setOnlyKind(null);
|
|
43
|
+
diagram.highlightNotation(value);
|
|
42
44
|
},
|
|
43
45
|
onMouseLeave: () => {
|
|
44
46
|
setOnlyKind(null);
|
|
47
|
+
diagram.unhighlightNotation();
|
|
45
48
|
},
|
|
46
49
|
children: /* @__PURE__ */ jsxs(
|
|
47
50
|
Group,
|
|
@@ -75,15 +78,18 @@ const ElementNotation = ({ value }) => {
|
|
|
75
78
|
/* @__PURE__ */ jsx(Group, { gap: 4, flex: "0 0 auto", children: value.kinds.map((kind) => /* @__PURE__ */ jsx(
|
|
76
79
|
Badge,
|
|
77
80
|
{
|
|
78
|
-
className:
|
|
81
|
+
className: cx(
|
|
82
|
+
shapeBadge
|
|
83
|
+
),
|
|
79
84
|
onMouseEnter: () => {
|
|
80
85
|
setOnlyKind(kind);
|
|
86
|
+
diagram.highlightNotation(value, kind);
|
|
81
87
|
},
|
|
82
88
|
onMouseLeave: () => {
|
|
83
89
|
setOnlyKind(null);
|
|
90
|
+
diagram.highlightNotation(value);
|
|
84
91
|
},
|
|
85
92
|
opacity: isNonNullish(onlyKind) && onlyKind !== kind ? 0.25 : 1,
|
|
86
|
-
color: isNonNullish(onlyKind) && onlyKind !== kind ? "gray" : token("colors.likec4.palette.fill"),
|
|
87
93
|
children: kind
|
|
88
94
|
},
|
|
89
95
|
kind
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { __exports as set } from '../../../../../_virtual/set2.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Mnemonist Set
|
|
5
|
+
* ==============
|
|
6
|
+
*
|
|
7
|
+
* Useful function related to sets such as union, intersection and so on...
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
var hasRequiredSet;
|
|
11
|
+
|
|
12
|
+
function requireSet () {
|
|
13
|
+
if (hasRequiredSet) return set;
|
|
14
|
+
hasRequiredSet = 1;
|
|
15
|
+
(function (exports) {
|
|
16
|
+
// TODO: optimize versions for less variadicities
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Variadic function computing the intersection of multiple sets.
|
|
20
|
+
*
|
|
21
|
+
* @param {...Set} sets - Sets to intersect.
|
|
22
|
+
* @return {Set} - The intesection.
|
|
23
|
+
*/
|
|
24
|
+
exports.intersection = function() {
|
|
25
|
+
if (arguments.length < 2)
|
|
26
|
+
throw new Error('mnemonist/Set.intersection: needs at least two arguments.');
|
|
27
|
+
|
|
28
|
+
var I = new Set();
|
|
29
|
+
|
|
30
|
+
// First we need to find the smallest set
|
|
31
|
+
var smallestSize = Infinity,
|
|
32
|
+
smallestSet = null;
|
|
33
|
+
|
|
34
|
+
var s, i, l = arguments.length;
|
|
35
|
+
|
|
36
|
+
for (i = 0; i < l; i++) {
|
|
37
|
+
s = arguments[i];
|
|
38
|
+
|
|
39
|
+
// If one of the set has no items, we can stop right there
|
|
40
|
+
if (s.size === 0)
|
|
41
|
+
return I;
|
|
42
|
+
|
|
43
|
+
if (s.size < smallestSize) {
|
|
44
|
+
smallestSize = s.size;
|
|
45
|
+
smallestSet = s;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Now we need to intersect this set with the others
|
|
50
|
+
var iterator = smallestSet.values(),
|
|
51
|
+
step,
|
|
52
|
+
item,
|
|
53
|
+
add,
|
|
54
|
+
set;
|
|
55
|
+
|
|
56
|
+
// TODO: we can optimize by iterating each next time over the current intersection
|
|
57
|
+
// but this probably means more RAM to consume since we'll create n-1 sets rather than
|
|
58
|
+
// only the one.
|
|
59
|
+
while ((step = iterator.next(), !step.done)) {
|
|
60
|
+
item = step.value;
|
|
61
|
+
add = true;
|
|
62
|
+
|
|
63
|
+
for (i = 0; i < l; i++) {
|
|
64
|
+
set = arguments[i];
|
|
65
|
+
|
|
66
|
+
if (set === smallestSet)
|
|
67
|
+
continue;
|
|
68
|
+
|
|
69
|
+
if (!set.has(item)) {
|
|
70
|
+
add = false;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (add)
|
|
76
|
+
I.add(item);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return I;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Variadic function computing the union of multiple sets.
|
|
84
|
+
*
|
|
85
|
+
* @param {...Set} sets - Sets to unite.
|
|
86
|
+
* @return {Set} - The union.
|
|
87
|
+
*/
|
|
88
|
+
exports.union = function() {
|
|
89
|
+
if (arguments.length < 2)
|
|
90
|
+
throw new Error('mnemonist/Set.union: needs at least two arguments.');
|
|
91
|
+
|
|
92
|
+
var U = new Set();
|
|
93
|
+
|
|
94
|
+
var i, l = arguments.length;
|
|
95
|
+
|
|
96
|
+
var iterator,
|
|
97
|
+
step;
|
|
98
|
+
|
|
99
|
+
for (i = 0; i < l; i++) {
|
|
100
|
+
iterator = arguments[i].values();
|
|
101
|
+
|
|
102
|
+
while ((step = iterator.next(), !step.done))
|
|
103
|
+
U.add(step.value);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return U;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Function computing the difference between two sets.
|
|
111
|
+
*
|
|
112
|
+
* @param {Set} A - First set.
|
|
113
|
+
* @param {Set} B - Second set.
|
|
114
|
+
* @return {Set} - The difference.
|
|
115
|
+
*/
|
|
116
|
+
exports.difference = function(A, B) {
|
|
117
|
+
|
|
118
|
+
// If first set is empty
|
|
119
|
+
if (!A.size)
|
|
120
|
+
return new Set();
|
|
121
|
+
|
|
122
|
+
if (!B.size)
|
|
123
|
+
return new Set(A);
|
|
124
|
+
|
|
125
|
+
var D = new Set();
|
|
126
|
+
|
|
127
|
+
var iterator = A.values(),
|
|
128
|
+
step;
|
|
129
|
+
|
|
130
|
+
while ((step = iterator.next(), !step.done)) {
|
|
131
|
+
if (!B.has(step.value))
|
|
132
|
+
D.add(step.value);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return D;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Function computing the symmetric difference between two sets.
|
|
140
|
+
*
|
|
141
|
+
* @param {Set} A - First set.
|
|
142
|
+
* @param {Set} B - Second set.
|
|
143
|
+
* @return {Set} - The symmetric difference.
|
|
144
|
+
*/
|
|
145
|
+
exports.symmetricDifference = function(A, B) {
|
|
146
|
+
var S = new Set();
|
|
147
|
+
|
|
148
|
+
var iterator = A.values(),
|
|
149
|
+
step;
|
|
150
|
+
|
|
151
|
+
while ((step = iterator.next(), !step.done)) {
|
|
152
|
+
if (!B.has(step.value))
|
|
153
|
+
S.add(step.value);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
iterator = B.values();
|
|
157
|
+
|
|
158
|
+
while ((step = iterator.next(), !step.done)) {
|
|
159
|
+
if (!A.has(step.value))
|
|
160
|
+
S.add(step.value);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return S;
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Function returning whether A is a subset of B.
|
|
168
|
+
*
|
|
169
|
+
* @param {Set} A - First set.
|
|
170
|
+
* @param {Set} B - Second set.
|
|
171
|
+
* @return {boolean}
|
|
172
|
+
*/
|
|
173
|
+
exports.isSubset = function(A, B) {
|
|
174
|
+
var iterator = A.values(),
|
|
175
|
+
step;
|
|
176
|
+
|
|
177
|
+
// Shortcuts
|
|
178
|
+
if (A === B)
|
|
179
|
+
return true;
|
|
180
|
+
|
|
181
|
+
if (A.size > B.size)
|
|
182
|
+
return false;
|
|
183
|
+
|
|
184
|
+
while ((step = iterator.next(), !step.done)) {
|
|
185
|
+
if (!B.has(step.value))
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return true;
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Function returning whether A is a superset of B.
|
|
194
|
+
*
|
|
195
|
+
* @param {Set} A - First set.
|
|
196
|
+
* @param {Set} B - Second set.
|
|
197
|
+
* @return {boolean}
|
|
198
|
+
*/
|
|
199
|
+
exports.isSuperset = function(A, B) {
|
|
200
|
+
return exports.isSubset(B, A);
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Function adding the items of set B to the set A.
|
|
205
|
+
*
|
|
206
|
+
* @param {Set} A - First set.
|
|
207
|
+
* @param {Set} B - Second set.
|
|
208
|
+
*/
|
|
209
|
+
exports.add = function(A, B) {
|
|
210
|
+
var iterator = B.values(),
|
|
211
|
+
step;
|
|
212
|
+
|
|
213
|
+
while ((step = iterator.next(), !step.done))
|
|
214
|
+
A.add(step.value);
|
|
215
|
+
|
|
216
|
+
return;
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Function subtracting the items of set B from the set A.
|
|
221
|
+
*
|
|
222
|
+
* @param {Set} A - First set.
|
|
223
|
+
* @param {Set} B - Second set.
|
|
224
|
+
*/
|
|
225
|
+
exports.subtract = function(A, B) {
|
|
226
|
+
var iterator = B.values(),
|
|
227
|
+
step;
|
|
228
|
+
|
|
229
|
+
while ((step = iterator.next(), !step.done))
|
|
230
|
+
A.delete(step.value);
|
|
231
|
+
|
|
232
|
+
return;
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Function intersecting the items of A & B.
|
|
237
|
+
*
|
|
238
|
+
* @param {Set} A - First set.
|
|
239
|
+
* @param {Set} B - Second set.
|
|
240
|
+
*/
|
|
241
|
+
exports.intersect = function(A, B) {
|
|
242
|
+
var iterator = A.values(),
|
|
243
|
+
step;
|
|
244
|
+
|
|
245
|
+
while ((step = iterator.next(), !step.done)) {
|
|
246
|
+
if (!B.has(step.value))
|
|
247
|
+
A.delete(step.value);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
return;
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Function disjuncting the items of A & B.
|
|
255
|
+
*
|
|
256
|
+
* @param {Set} A - First set.
|
|
257
|
+
* @param {Set} B - Second set.
|
|
258
|
+
*/
|
|
259
|
+
exports.disjunct = function(A, B) {
|
|
260
|
+
var iterator = A.values(),
|
|
261
|
+
step;
|
|
262
|
+
|
|
263
|
+
var toRemove = [];
|
|
264
|
+
|
|
265
|
+
while ((step = iterator.next(), !step.done)) {
|
|
266
|
+
if (B.has(step.value))
|
|
267
|
+
toRemove.push(step.value);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
iterator = B.values();
|
|
271
|
+
|
|
272
|
+
while ((step = iterator.next(), !step.done)) {
|
|
273
|
+
if (!A.has(step.value))
|
|
274
|
+
A.add(step.value);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
for (var i = 0, l = toRemove.length; i < l; i++)
|
|
278
|
+
A.delete(toRemove[i]);
|
|
279
|
+
|
|
280
|
+
return;
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Function returning the size of the intersection of A & B.
|
|
285
|
+
*
|
|
286
|
+
* @param {Set} A - First set.
|
|
287
|
+
* @param {Set} B - Second set.
|
|
288
|
+
* @return {number}
|
|
289
|
+
*/
|
|
290
|
+
exports.intersectionSize = function(A, B) {
|
|
291
|
+
var tmp;
|
|
292
|
+
|
|
293
|
+
// We need to know the smallest set
|
|
294
|
+
if (A.size > B.size) {
|
|
295
|
+
tmp = A;
|
|
296
|
+
A = B;
|
|
297
|
+
B = tmp;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
if (A.size === 0)
|
|
301
|
+
return 0;
|
|
302
|
+
|
|
303
|
+
if (A === B)
|
|
304
|
+
return A.size;
|
|
305
|
+
|
|
306
|
+
var iterator = A.values(),
|
|
307
|
+
step;
|
|
308
|
+
|
|
309
|
+
var I = 0;
|
|
310
|
+
|
|
311
|
+
while ((step = iterator.next(), !step.done)) {
|
|
312
|
+
if (B.has(step.value))
|
|
313
|
+
I++;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
return I;
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Function returning the size of the union of A & B.
|
|
321
|
+
*
|
|
322
|
+
* @param {Set} A - First set.
|
|
323
|
+
* @param {Set} B - Second set.
|
|
324
|
+
* @return {number}
|
|
325
|
+
*/
|
|
326
|
+
exports.unionSize = function(A, B) {
|
|
327
|
+
var I = exports.intersectionSize(A, B);
|
|
328
|
+
|
|
329
|
+
return A.size + B.size - I;
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Function returning the Jaccard similarity between A & B.
|
|
334
|
+
*
|
|
335
|
+
* @param {Set} A - First set.
|
|
336
|
+
* @param {Set} B - Second set.
|
|
337
|
+
* @return {number}
|
|
338
|
+
*/
|
|
339
|
+
exports.jaccard = function(A, B) {
|
|
340
|
+
var I = exports.intersectionSize(A, B);
|
|
341
|
+
|
|
342
|
+
if (I === 0)
|
|
343
|
+
return 0;
|
|
344
|
+
|
|
345
|
+
var U = A.size + B.size - I;
|
|
346
|
+
|
|
347
|
+
return I / U;
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Function returning the overlap coefficient between A & B.
|
|
352
|
+
*
|
|
353
|
+
* @param {Set} A - First set.
|
|
354
|
+
* @param {Set} B - Second set.
|
|
355
|
+
* @return {number}
|
|
356
|
+
*/
|
|
357
|
+
exports.overlap = function(A, B) {
|
|
358
|
+
var I = exports.intersectionSize(A, B);
|
|
359
|
+
|
|
360
|
+
if (I === 0)
|
|
361
|
+
return 0;
|
|
362
|
+
|
|
363
|
+
return I / Math.min(A.size, B.size);
|
|
364
|
+
};
|
|
365
|
+
} (set));
|
|
366
|
+
return set;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
export { requireSet as __require };
|
|
@@ -86,12 +86,13 @@ const Overlays = memo(({ overlaysActorRef }) => {
|
|
|
86
86
|
const close = (actorRef) => {
|
|
87
87
|
overlaysActorRef.send({ type: "close", actorId: actorRef.id });
|
|
88
88
|
};
|
|
89
|
-
const overlaysReact = overlays.map((overlay) => {
|
|
89
|
+
const overlaysReact = overlays.map((overlay, index) => {
|
|
90
90
|
switch (overlay.type) {
|
|
91
91
|
case "relationshipsBrowser":
|
|
92
92
|
return /* @__PURE__ */ jsx(
|
|
93
93
|
Overlay,
|
|
94
94
|
{
|
|
95
|
+
overlayLevel: Math.min(index, 3),
|
|
95
96
|
onClose: () => close(overlay.actorRef),
|
|
96
97
|
children: /* @__PURE__ */ jsx(RelationshipsBrowser, { actorRef: overlay.actorRef })
|
|
97
98
|
},
|
|
@@ -101,6 +102,7 @@ const Overlays = memo(({ overlaysActorRef }) => {
|
|
|
101
102
|
return /* @__PURE__ */ jsx(
|
|
102
103
|
Overlay,
|
|
103
104
|
{
|
|
105
|
+
overlayLevel: Math.min(index, 3),
|
|
104
106
|
onClose: () => close(overlay.actorRef),
|
|
105
107
|
children: /* @__PURE__ */ jsx(RelationshipDetails, { actorRef: overlay.actorRef })
|
|
106
108
|
},
|