@cccsaurora/clue-ui 1.2.4 → 1.2.5-dev.298

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 (188) hide show
  1. package/ActionForm-D6gYuFRR.js +5970 -0
  2. package/AnnotationDetails-Zx4pjBiN.js +175 -0
  3. package/AnnotationPreview-Dmz7taAU.js +188 -0
  4. package/ClueEnrichContext-CJEJxrgs.js +541 -0
  5. package/FlexOne-BSYAhhtG.js +9 -0
  6. package/_MapCache-WmuDdwuH.js +222 -0
  7. package/_Uint8Array-B7JqpgFX.js +128 -0
  8. package/_baseAssignValue-CGTuELqU.js +25 -0
  9. package/_baseClone-CkNrTyhm.js +283 -0
  10. package/_baseExtremum-kob8QXyt.js +18 -0
  11. package/_baseFlatten-jIR_sN_-.js +92 -0
  12. package/_baseGet-Bx3A4Qfp.js +108 -0
  13. package/_baseIsEqual-C5OTWzTk.js +208 -0
  14. package/_baseIteratee-avi7MX2o.js +126 -0
  15. package/_baseSlice-GAv_YFTT.js +20 -0
  16. package/_baseSum-D0WC1dN0.js +13 -0
  17. package/_baseUniq-BI9GIHMF.js +115 -0
  18. package/_commonjsHelpers-DWwsNxpa.js +8 -0
  19. package/_createAggregator-QD8MzKwe.js +63 -0
  20. package/_getPrototype-CU0j_POw.js +5 -0
  21. package/_getTag-Ckxxfr88.js +126 -0
  22. package/_isIterateeCall-Ds3sw2SF.js +17 -0
  23. package/_setToArray-CaPKQhcz.js +33 -0
  24. package/cloneDeep-DJrLSw8W.js +8 -0
  25. package/components/AnnotationBody.js +49 -35
  26. package/components/AnnotationDetailPopover.js +36 -30
  27. package/components/AnnotationDetails.js +7 -7
  28. package/components/AnnotationEntry.js +35 -35
  29. package/components/AnnotationPreview.js +5 -5
  30. package/components/ClassificationChip.js +44 -23
  31. package/components/CountBadge.js +31 -26
  32. package/components/EnrichedCard.js +110 -97
  33. package/components/EnrichedChip.js +130 -105
  34. package/components/EnrichedTypography.js +133 -107
  35. package/components/ErrorBoundary.js +28 -24
  36. package/components/RetryFailedEnrichments.js +10 -9
  37. package/components/SourcePicker.js +57 -49
  38. package/components/actions/ActionForm.js +4 -4
  39. package/components/actions/ExecutePopover.js +75 -59
  40. package/components/actions/ResultModal.js +4 -4
  41. package/components/actions/form/schemaAdapter.js +39 -23
  42. package/components/actions/formats/FileResult.js +86 -59
  43. package/components/actions/formats/index.js +21 -10
  44. package/components/display/graph/ExpandMoreButton.js +10 -10
  45. package/components/display/graph/elements/NodeCard.js +111 -91
  46. package/components/display/graph/elements/NodeTag.js +15 -13
  47. package/components/display/graph/index.js +261 -202
  48. package/components/display/graph/visualizations/Leaf.js +88 -69
  49. package/components/display/graph/visualizations/cloud/index.js +98 -81
  50. package/components/display/graph/visualizations/icons/BaseIcon.js +26 -21
  51. package/components/display/graph/visualizations/icons/BugIcon.js +12 -12
  52. package/components/display/graph/visualizations/icons/HostIcon.js +12 -12
  53. package/components/display/graph/visualizations/icons/NetworkIcon.js +12 -12
  54. package/components/display/graph/visualizations/icons/ProcessIcon.js +12 -12
  55. package/components/display/graph/visualizations/icons/TargetIcon.js +13 -13
  56. package/components/display/graph/visualizations/icons/index.js +14 -13
  57. package/components/display/graph/visualizations/panels/NodePanel.js +10 -8
  58. package/components/display/graph/visualizations/tree/BundleLine.js +108 -81
  59. package/components/display/graph/visualizations/tree/Triangle.js +13 -13
  60. package/components/display/graph/visualizations/tree/index.js +408 -306
  61. package/components/display/icons/Iconified.js +27 -12
  62. package/components/display/json/index.js +4 -4
  63. package/components/display/markdown/index.js +8678 -5770
  64. package/components/enrichment/EnrichPopover.js +54 -46
  65. package/components/fetchers/Fetcher.js +158 -119
  66. package/components/fetchers/PreviewModal.js +20 -17
  67. package/components/fetchers/StatusChip.js +21 -17
  68. package/components/group/Entry.js +13 -11
  69. package/components/group/Group.js +13 -10
  70. package/components/group/GroupControl.js +76 -65
  71. package/components/stats/QueryStatus.js +43 -33
  72. package/countBy-c6S3dvSW.js +14 -0
  73. package/data/event.js +6 -4
  74. package/database/index.js +2 -2
  75. package/debounce-bV0h5FC5.js +92 -0
  76. package/get-DSsNkRQs.js +8 -0
  77. package/groupBy-xqz-n0Vd.js +14 -0
  78. package/hooks/ClueActionContext.d.ts +10 -2
  79. package/hooks/ClueActionContext.js +6 -6
  80. package/hooks/ClueComponentContext.js +29 -23
  81. package/hooks/ClueConfigProvider.js +14 -12
  82. package/hooks/ClueDatabaseContext.js +19 -13
  83. package/hooks/ClueEnrichContext.js +8 -8
  84. package/hooks/ClueFetcherContext.js +83 -56
  85. package/hooks/ClueGroupContext.js +17 -14
  86. package/hooks/CluePopupContext.js +5 -5
  87. package/hooks/ClueProvider.js +12 -10
  88. package/hooks/selectors.js +7 -7
  89. package/hooks/useActionResult.d.ts +1 -0
  90. package/hooks/useActionResult.js +3 -3
  91. package/hooks/useAnnotations.js +47 -31
  92. package/hooks/useClue.js +6 -4
  93. package/hooks/useClueActions.js +3 -3
  94. package/hooks/useClueConfig.js +6 -4
  95. package/hooks/useClueTypeConfig.js +3 -3
  96. package/hooks/useComparator.js +722 -435
  97. package/hooks/useErrors.js +22 -18
  98. package/hooks/useFetcherResult.d.ts +1 -0
  99. package/hooks/useFetcherResult.js +33 -24
  100. package/hooks/useMyHighlights.js +66 -36
  101. package/hooks/useMyLocalStorage.js +66 -37
  102. package/iconify-CXMreGTg.js +1782 -0
  103. package/icons/Action.js +66 -49
  104. package/icons/Assessment.js +85 -69
  105. package/icons/Context.js +77 -63
  106. package/icons/Opinion.js +76 -60
  107. package/icons/iconMap.js +2 -2
  108. package/identity-CPGTqrE4.js +6 -0
  109. package/index-AMfoEg_6.js +696 -0
  110. package/index-B6C2a_Lg.js +1172 -0
  111. package/index-C12gPw2W.js +17698 -0
  112. package/index-DCKkHTvx.js +15750 -0
  113. package/index-JcKyZeoY.js +465 -0
  114. package/isNil-CIubwp4T.js +6 -0
  115. package/isObject-FTY-5JQX.js +7 -0
  116. package/isObjectLike-OAgjjZye.js +48 -0
  117. package/isSymbol-Xd2FsJyp.js +8 -0
  118. package/last-CUCl67Im.js +7 -0
  119. package/main.js +60 -60
  120. package/maxBy-IKHzFrCS.js +8 -0
  121. package/package.json +1 -1
  122. package/sortBy-DfSj8IoJ.js +96 -0
  123. package/sumBy-D-hb_NY-.js +8 -0
  124. package/text/Frequency.js +42 -23
  125. package/toFinite-Bc55msYj.js +16 -0
  126. package/toNumber-DPxy1FBy.js +39 -0
  127. package/types/RunningActionData.d.ts +1 -0
  128. package/types/WithActionData.d.ts +1 -0
  129. package/useClueTypeConfig-Z1LFp01b.js +3289 -0
  130. package/utils/chain.js +92 -65
  131. package/utils/classificationParser.js +519 -256
  132. package/utils/constants.js +35 -10
  133. package/utils/graph.js +72 -45
  134. package/utils/hashUtil.js +7 -7
  135. package/utils/line.js +131 -81
  136. package/utils/loggerUtil.js +5 -3
  137. package/utils/sessionStorage.js +41 -27
  138. package/utils/time.js +423 -423
  139. package/utils/utils.js +9 -9
  140. package/utils/window.js +21 -10
  141. package/utils-HmNPuoDB.js +199 -0
  142. package/ActionForm-CwsfB99X.js +0 -4458
  143. package/AnnotationDetails-Bw2JdtTL.js +0 -160
  144. package/AnnotationPreview-BO7rVnOP.js +0 -140
  145. package/ClueEnrichContext-KqRuuWNS.js +0 -418
  146. package/FlexOne-BXWFOd1T.js +0 -6
  147. package/_MapCache-BiTi0iqu.js +0 -180
  148. package/_Uint8Array-BQNOM9Rr.js +0 -101
  149. package/_baseAssignValue-CNMLQZco.js +0 -20
  150. package/_baseClone-BnT-6pyM.js +0 -207
  151. package/_baseExtremum-Ca2EHgy2.js +0 -16
  152. package/_baseFlatten-Bfr_Molw.js +0 -72
  153. package/_baseGet-DSZygzyq.js +0 -79
  154. package/_baseIsEqual-VgvaAFZG.js +0 -147
  155. package/_baseIteratee-Dbfsw5z8.js +0 -95
  156. package/_baseSlice-M5RKzt1A.js +0 -10
  157. package/_baseSum-wEbgNeUs.js +0 -10
  158. package/_baseUniq-BJcj69PL.js +0 -79
  159. package/_commonjsHelpers-DaMA6jEr.js +0 -8
  160. package/_createAggregator-k3TuAnxT.js +0 -53
  161. package/_getPrototype-Cr1Mk7BC.js +0 -5
  162. package/_getTag-CK2Sffaq.js +0 -90
  163. package/_isIterateeCall-DkJP7Rbx.js +0 -13
  164. package/_setToArray-C7yMOeww.js +0 -29
  165. package/cloneDeep-CF8TtLHr.js +0 -8
  166. package/countBy-CdYegFSu.js +0 -8
  167. package/debounce-DryYcbJ4.js +0 -56
  168. package/get-CH7kz5Ix.js +0 -8
  169. package/groupBy-br8xmD2R.js +0 -8
  170. package/iconify-BBckr5AQ.js +0 -1263
  171. package/identity-ByMq8VxU.js +0 -6
  172. package/index-BHAe_V9n.js +0 -12768
  173. package/index-BK-zfYhR.js +0 -358
  174. package/index-CA5CUNZO.js +0 -975
  175. package/index-Dj5C04IX.js +0 -568
  176. package/index-p5_wX7q1.js +0 -11729
  177. package/isNil-CjWwlQS3.js +0 -6
  178. package/isObject-B53jY8Qg.js +0 -7
  179. package/isObjectLike-BatpeCIi.js +0 -29
  180. package/isSymbol-C3_SC0Qp.js +0 -8
  181. package/last-7CdUxN0r.js +0 -7
  182. package/maxBy-Bc0dYHcO.js +0 -8
  183. package/sortBy-DY2JBf9n.js +0 -75
  184. package/sumBy-DuMASLPd.js +0 -8
  185. package/toFinite-BMy6GObD.js +0 -14
  186. package/toNumber-YVhnnJv4.js +0 -31
  187. package/useClueTypeConfig-Ct9Ygter.js +0 -2292
  188. package/utils-DmwSUrum.js +0 -129
@@ -1,196 +1,255 @@
1
- import { jsx as i, jsxs as l, Fragment as ke } from "react/jsx-runtime";
2
- import { useMemo as m, useRef as te, useState as u, useEffect as z, useCallback as f, createElement as Ce } from "react";
3
- import { useTheme as we, lighten as oe, darken as ne, Stack as x, Card as T, Typography as he, Autocomplete as ze, TextField as Se, FormControl as Ee, InputLabel as Ie, Select as Oe, MenuItem as Ne, alpha as ie, IconButton as Me, Collapse as Pe } from "@mui/material";
4
- import { p as Fe } from "../../../index-BK-zfYhR.js";
5
- import { z as Re, i as P, s as p, t as Te, p as re } from "../../../index-p5_wX7q1.js";
6
- import { ClueComponentContext as ge } from "../../../hooks/ClueComponentContext.js";
7
- import Le from "../../../hooks/useComparator.js";
8
- import { useMyLocalStorageItem as g } from "../../../hooks/useMyLocalStorage.js";
9
- import { StorageKey as L } from "../../../utils/constants.js";
10
- import { g as Ae } from "../../../get-CH7kz5Ix.js";
11
- import { u as Be } from "../../../index-Dj5C04IX.js";
12
- import { cssImportant as k } from "../../../utils/graph.js";
13
- import ae from "../icons/Iconified.js";
14
- import $e from "./ExpandMoreButton.js";
15
- import je from "./visualizations/cloud/index.js";
16
- import He from "./visualizations/panels/NodePanel.js";
17
- import _e from "./visualizations/tree/index.js";
18
- const rt = ({ graph: t, sx: se = {} }) => {
19
- var Z, U, Y, q, J;
20
- const { t: C } = Be(ge, (e) => e.i18next), o = we(), S = m(() => o.palette.mode === "dark", [o]), { runComparator: A } = Le(), a = te(), le = te(), [F] = g(L.SHOW_MOUSE_POS, !1), [w] = g(L.SHOW_COORDINATES, !1), [E] = g(L.PANEL_LOCATION, "vertical"), [ce, de] = u(["0", "0"]), [me, ue] = u(["0", "0"]), [I, B] = u(!1), $ = m(() => ((t == null ? void 0 : t.data) ?? []).flat(2).map((e) => e.id), [t == null ? void 0 : t.data]), v = m(() => Re().scaleExtent([0.1, 6]), []), [s, O] = u(P), [N, pe] = u(""), [h, j] = u([]), [M, H] = u(
21
- ((U = (Z = t == null ? void 0 : t.metadata.display) == null ? void 0 : Z.visualization) == null ? void 0 : U.type) ?? "tree"
22
- ), [fe, R] = u(!1);
23
- z(() => {
24
- B(h.length > 0);
25
- }, [h]);
26
- const b = m(
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
+ import { useMemo, useRef, useState, useEffect, useCallback, createElement } from "react";
3
+ import { useTheme, lighten, darken, Stack, Card, Typography, Autocomplete, TextField, FormControl, InputLabel, Select, MenuItem, alpha, IconButton, Collapse } from "@mui/material";
4
+ import { p as parseEvent } from "../../../index-JcKyZeoY.js";
5
+ import { z as zoom, i as identity, s as select, t as transform, p as pointer } from "../../../index-DCKkHTvx.js";
6
+ import { ClueComponentContext } from "../../../hooks/ClueComponentContext.js";
7
+ import useComparator from "../../../hooks/useComparator.js";
8
+ import { useMyLocalStorageItem } from "../../../hooks/useMyLocalStorage.js";
9
+ import { StorageKey } from "../../../utils/constants.js";
10
+ import { g as get } from "../../../get-DSsNkRQs.js";
11
+ import { u as useContextSelector } from "../../../index-AMfoEg_6.js";
12
+ import { cssImportant } from "../../../utils/graph.js";
13
+ import Iconified from "../icons/Iconified.js";
14
+ import ExpandMoreButton from "./ExpandMoreButton.js";
15
+ import Cloud from "./visualizations/cloud/index.js";
16
+ import NodePanel from "./visualizations/panels/NodePanel.js";
17
+ import Tree from "./visualizations/tree/index.js";
18
+ const Graph = ({ graph, sx = {} }) => {
19
+ var _a, _b, _c, _d, _e;
20
+ const { t } = useContextSelector(ClueComponentContext, (ctx) => ctx.i18next);
21
+ const theme = useTheme();
22
+ const isDark = useMemo(() => theme.palette.mode === "dark", [theme]);
23
+ const { runComparator } = useComparator();
24
+ const svgRef = useRef();
25
+ const pointRef = useRef();
26
+ const [showMousePos] = useMyLocalStorageItem(StorageKey.SHOW_MOUSE_POS, false);
27
+ const [showCoordinates] = useMyLocalStorageItem(StorageKey.SHOW_COORDINATES, false);
28
+ const [panelLocation] = useMyLocalStorageItem(StorageKey.PANEL_LOCATION, "vertical");
29
+ const [relativeMousePos, setRelativeMousePos] = useState(["0", "0"]);
30
+ const [absoluteMousePos, setAbsoluteMousePos] = useState(["0", "0"]);
31
+ const [showPanel, setShowPanel] = useState(false);
32
+ const nodeIds = useMemo(() => ((graph == null ? void 0 : graph.data) ?? []).flat(2).map((node) => node.id), [graph == null ? void 0 : graph.data]);
33
+ const zoom$1 = useMemo(() => zoom().scaleExtent([0.1, 6]), []);
34
+ const [currentZoom, setCurrentZoom] = useState(identity);
35
+ const [nodeId, setNodeId] = useState("");
36
+ const [selectedNodeIds, setSelectedNodeIds] = useState([]);
37
+ const [viz, setViz] = useState(
38
+ ((_b = (_a = graph == null ? void 0 : graph.metadata.display) == null ? void 0 : _a.visualization) == null ? void 0 : _b.type) ?? "tree"
39
+ );
40
+ const [hasError, setHasError] = useState(false);
41
+ useEffect(() => {
42
+ setShowPanel(selectedNodeIds.length > 0);
43
+ }, [selectedNodeIds]);
44
+ const labelKeys = useMemo(
27
45
  () => {
28
- var e, n;
29
- return (n = (e = t == null ? void 0 : t.metadata.display) == null ? void 0 : e.displayField) == null ? void 0 : n.filter((r) => (r.zoom ?? Number.MAX_SAFE_INTEGER) > s.k);
46
+ var _a2, _b2;
47
+ return (_b2 = (_a2 = graph == null ? void 0 : graph.metadata.display) == null ? void 0 : _a2.displayField) == null ? void 0 : _b2.filter((entry) => (entry.zoom ?? Number.MAX_SAFE_INTEGER) > currentZoom.k);
30
48
  },
31
- [(Y = t == null ? void 0 : t.metadata.display) == null ? void 0 : Y.displayField, s.k]
32
- ), xe = f((e) => {
33
- pe(e);
34
- }, []), _ = f((e) => {
35
- const n = e === "view" ? e : `node-${e ?? "will\\%never\\$ever\\*exist"}`;
36
- return p(`#${n}`);
37
- }, []), G = f(() => {
38
- if (!N) {
39
- R(!0);
49
+ [(_c = graph == null ? void 0 : graph.metadata.display) == null ? void 0 : _c.displayField, currentZoom.k]
50
+ );
51
+ const onNodeChange = useCallback((node) => {
52
+ setNodeId(node);
53
+ }, []);
54
+ const checkForNode = useCallback((_nodeId) => {
55
+ const selector = _nodeId === "view" ? _nodeId : `node-${_nodeId ?? "will\\%never\\$ever\\*exist"}`;
56
+ return select(`#${selector}`);
57
+ }, []);
58
+ const selectNode = useCallback(() => {
59
+ if (!nodeId) {
60
+ setHasError(true);
40
61
  return;
41
62
  }
42
- const e = _(N.replace(/[^A-Za-z0-9]*/g, ""));
43
- if (e.empty()) {
44
- R(!0);
63
+ const nodeToGet = checkForNode(nodeId.replace(/[^A-Za-z0-9]*/g, ""));
64
+ if (nodeToGet.empty()) {
65
+ setHasError(true);
45
66
  return;
46
67
  }
47
- R(!1), j([N]);
48
- const n = a.current.getBoundingClientRect(), r = p(a.current), d = e.node().getBBox();
49
- r.transition().duration(500).call(
50
- v.transform,
51
- P.translate(n.width / 2, n.height / 2).scale(4).translate(-d.x, -d.y)
68
+ setHasError(false);
69
+ setSelectedNodeIds([nodeId]);
70
+ const clientRect = svgRef.current.getBoundingClientRect();
71
+ const svg = select(svgRef.current);
72
+ const box = nodeToGet.node().getBBox();
73
+ svg.transition().duration(500).call(
74
+ zoom$1.transform,
75
+ identity.translate(clientRect.width / 2, clientRect.height / 2).scale(4).translate(-box.x, -box.y)
52
76
  );
53
- }, [_, N, v.transform]), ve = f(
54
- (e) => {
55
- const n = Fe(e);
56
- n.isCtrl && n.isEnter && G();
77
+ }, [checkForNode, nodeId, zoom$1.transform]);
78
+ const onKeyPress = useCallback(
79
+ (event) => {
80
+ const parsedEvent = parseEvent(event);
81
+ if (parsedEvent.isCtrl && parsedEvent.isEnter) {
82
+ selectNode();
83
+ }
57
84
  },
58
- [G]
59
- ), be = f((e) => ((t == null ? void 0 : t.data) ?? []).flat().find((n) => n.id === e), [t == null ? void 0 : t.data]), W = f(
60
- (e = !1) => {
61
- if (!t)
85
+ [selectNode]
86
+ );
87
+ const findNode = useCallback((id) => ((graph == null ? void 0 : graph.data) ?? []).flat().find((n) => n.id === id), [graph == null ? void 0 : graph.data]);
88
+ const resetZoom = useCallback(
89
+ (instant = false) => {
90
+ if (!graph) {
62
91
  return;
63
- const n = p(a.current).select("#view").node().getBBox(), r = a.current.getBoundingClientRect(), d = Math.min(r.width / (n.width + 25), (r.height - 96) / n.height);
64
- let y = p(a.current);
65
- e || (y = y.transition().duration(500)), y.call(
66
- v.transform,
67
- P.translate(r.width / 2, (r.height + 96) / 2).scale(d).translate(-n.width / 2, -n.height / 2 - 10)
92
+ }
93
+ const box = select(svgRef.current).select("#view").node().getBBox();
94
+ const clientRect = svgRef.current.getBoundingClientRect();
95
+ const zoomLevel = Math.min(clientRect.width / (box.width + 25), (clientRect.height - 96) / box.height);
96
+ let selection = select(svgRef.current);
97
+ if (!instant) {
98
+ selection = selection.transition().duration(500);
99
+ }
100
+ selection.call(
101
+ zoom$1.transform,
102
+ identity.translate(clientRect.width / 2, (clientRect.height + 96) / 2).scale(zoomLevel).translate(-box.width / 2, -box.height / 2 - 10)
68
103
  );
69
104
  },
70
- [v.transform, t]
71
- ), D = f((e) => j(e), []);
72
- z(() => {
73
- t && (le.current = a.current.createSVGPoint(), p(a.current).call(
74
- v.on("zoom", (e) => {
75
- O == null || O(e.transform), p(a.current).select("#view").attr("transform", e.transform);
105
+ [zoom$1.transform, graph]
106
+ );
107
+ const onNodeSelectionChanged = useCallback((_nodeIds) => setSelectedNodeIds(_nodeIds), []);
108
+ useEffect(() => {
109
+ if (!graph) {
110
+ return;
111
+ }
112
+ pointRef.current = svgRef.current.createSVGPoint();
113
+ select(svgRef.current).call(
114
+ zoom$1.on("zoom", (event) => {
115
+ setCurrentZoom == null ? void 0 : setCurrentZoom(event.transform);
116
+ select(svgRef.current).select("#view").attr("transform", event.transform);
76
117
  })
77
- ));
78
- }, [O, v, M, t]), z(() => {
79
- F && p(a.current).on("mousemove", (e) => {
80
- const n = Te(p(a.current).select("#view").node());
81
- ue(n.invert(re(e)).map((r) => r.toFixed(0))), de(re(e).map((r) => r.toFixed(0)));
82
- });
83
- }, [F, t]), z(() => {
84
- W();
85
- }, [M, t == null ? void 0 : t.data]), z(() => {
86
- var e, n, r, d;
87
- (n = (e = t == null ? void 0 : t.metadata.display) == null ? void 0 : e.visualization) != null && n.type && H((d = (r = t == null ? void 0 : t.metadata.display) == null ? void 0 : r.visualization) == null ? void 0 : d.type);
88
- }, [(J = (q = t == null ? void 0 : t.metadata.display) == null ? void 0 : q.visualization) == null ? void 0 : J.type]);
89
- const V = m(
118
+ );
119
+ }, [setCurrentZoom, zoom$1, viz, graph]);
120
+ useEffect(() => {
121
+ if (showMousePos) {
122
+ select(svgRef.current).on("mousemove", (event) => {
123
+ const _zoom = transform(select(svgRef.current).select("#view").node());
124
+ setAbsoluteMousePos(_zoom.invert(pointer(event)).map((n) => n.toFixed(0)));
125
+ setRelativeMousePos(pointer(event).map((n) => n.toFixed(0)));
126
+ });
127
+ }
128
+ }, [showMousePos, graph]);
129
+ useEffect(() => {
130
+ resetZoom();
131
+ }, [viz, graph == null ? void 0 : graph.data]);
132
+ useEffect(() => {
133
+ var _a2, _b2, _c2, _d2;
134
+ if ((_b2 = (_a2 = graph == null ? void 0 : graph.metadata.display) == null ? void 0 : _a2.visualization) == null ? void 0 : _b2.type) {
135
+ setViz((_d2 = (_c2 = graph == null ? void 0 : graph.metadata.display) == null ? void 0 : _c2.visualization) == null ? void 0 : _d2.type);
136
+ }
137
+ }, [(_e = (_d = graph == null ? void 0 : graph.metadata.display) == null ? void 0 : _d.visualization) == null ? void 0 : _e.type]);
138
+ const treeOptions = useMemo(
90
139
  () => ({
91
- textColor: o.palette.text.primary,
92
- backgroundColor: o.palette.background.paper,
140
+ textColor: theme.palette.text.primary,
141
+ backgroundColor: theme.palette.background.paper,
93
142
  nodeColor: {
94
- border: (S ? oe : ne)(o.palette.background.paper, 0.3),
143
+ border: (isDark ? lighten : darken)(theme.palette.background.paper, 0.3),
95
144
  center: "white"
96
145
  }
97
146
  }),
98
- [S, o.palette.background.paper, o.palette.text.primary]
99
- ), K = m(
147
+ [isDark, theme.palette.background.paper, theme.palette.text.primary]
148
+ );
149
+ const cloudOptions = useMemo(
100
150
  () => ({
101
- textColor: o.palette.text.primary,
102
- backgroundColor: o.palette.background.paper,
151
+ textColor: theme.palette.text.primary,
152
+ backgroundColor: theme.palette.background.paper,
103
153
  nodeColor: {
104
- border: (S ? oe : ne)(o.palette.background.paper, 0.3),
154
+ border: (isDark ? lighten : darken)(theme.palette.background.paper, 0.3),
105
155
  center: "white"
106
156
  }
107
157
  }),
108
- [S, o.palette.background.paper, o.palette.text.primary]
109
- ), X = m(
158
+ [isDark, theme.palette.background.paper, theme.palette.text.primary]
159
+ );
160
+ const visualizations = useMemo(
110
161
  () => ({
111
- tree: () => /* @__PURE__ */ i(
112
- _e,
162
+ tree: () => /* @__PURE__ */ jsx(
163
+ Tree,
113
164
  {
114
- svgRef: a,
115
- graph: t,
116
- labelKeys: b,
117
- onNodeSelectionChanged: D,
118
- zoom: s,
119
- options: V
165
+ svgRef,
166
+ graph,
167
+ labelKeys,
168
+ onNodeSelectionChanged,
169
+ zoom: currentZoom,
170
+ options: treeOptions
120
171
  }
121
172
  ),
122
- cloud: () => /* @__PURE__ */ i(je, { svgRef: a, graph: t, options: K })
173
+ cloud: () => /* @__PURE__ */ jsx(Cloud, { svgRef, graph, options: cloudOptions })
123
174
  }),
124
- [K, s, t, b, D, V]
125
- ), ye = m(() => $.flatMap((e) => {
126
- var y, Q;
127
- const n = (((y = t == null ? void 0 : t.data) == null ? void 0 : y.flat()) ?? []).find((c) => c.id === e);
128
- return n ? (((Q = b == null ? void 0 : b.filter((c) => A(c, n)).pop()) == null ? void 0 : Q.label) ?? "id").split(",").map((c) => {
129
- var ee;
130
- return (ee = Ae(n, c)) == null ? void 0 : ee.toString();
131
- }).filter((c) => !!c).map((c) => ({ id: e, value: c.trim() })) : { id: e, value: e };
132
- }), [t == null ? void 0 : t.data, b, $, A]);
133
- return /* @__PURE__ */ l(
134
- x,
175
+ [cloudOptions, currentZoom, graph, labelKeys, onNodeSelectionChanged, treeOptions]
176
+ );
177
+ const suggestions = useMemo(() => {
178
+ return nodeIds.flatMap((id) => {
179
+ var _a2, _b2;
180
+ const node = (((_a2 = graph == null ? void 0 : graph.data) == null ? void 0 : _a2.flat()) ?? []).find((_node) => _node.id === id);
181
+ if (!node) {
182
+ return { id, value: id };
183
+ }
184
+ const key = ((_b2 = labelKeys == null ? void 0 : labelKeys.filter((comparator) => runComparator(comparator, node)).pop()) == null ? void 0 : _b2.label) ?? "id";
185
+ const value = key.split(",").map((_key) => {
186
+ var _a3;
187
+ return (_a3 = get(node, _key)) == null ? void 0 : _a3.toString();
188
+ }).filter((val) => !!val).map((_value) => ({ id, value: _value.trim() }));
189
+ return value;
190
+ });
191
+ }, [graph == null ? void 0 : graph.data, labelKeys, nodeIds, runComparator]);
192
+ return /* @__PURE__ */ jsxs(
193
+ Stack,
135
194
  {
136
- direction: E === "vertical" ? "row" : "column",
195
+ direction: panelLocation === "vertical" ? "row" : "column",
137
196
  spacing: 1,
138
197
  overflow: "hidden",
139
198
  height: "100%",
140
199
  width: "100%",
141
- sx: se,
200
+ sx,
142
201
  children: [
143
- /* @__PURE__ */ i(x, { direction: "column", spacing: 1, sx: { position: "relative", flex: 1 }, children: /* @__PURE__ */ l(
144
- T,
202
+ /* @__PURE__ */ jsx(Stack, { direction: "column", spacing: 1, sx: { position: "relative", flex: 1 }, children: /* @__PURE__ */ jsxs(
203
+ Card,
145
204
  {
146
205
  variant: "outlined",
147
206
  sx: {
148
207
  flex: 1,
149
208
  position: "relative",
150
- maxHeight: `calc(100vh - 64px - ${o.spacing(1)})`,
209
+ maxHeight: `calc(100vh - 64px - ${theme.spacing(1)})`,
151
210
  "& #viz": {
152
- maxHeight: `calc(100vh - 64px - ${o.spacing(1)})`,
211
+ maxHeight: `calc(100vh - 64px - ${theme.spacing(1)})`,
153
212
  width: "100%",
154
213
  height: "100%",
155
- backgroundColor: o.palette.background.paper
214
+ backgroundColor: theme.palette.background.paper
156
215
  },
157
216
  "& .path": {
158
- transition: o.transitions.create(["opacity"], {
159
- duration: o.transitions.duration.short
217
+ transition: theme.transitions.create(["opacity"], {
218
+ duration: theme.transitions.duration.short
160
219
  })
161
220
  },
162
221
  "& .node": {
163
222
  cursor: "pointer",
164
223
  "& > path, & > text, & > polygon, & circle": {
165
- transition: o.transitions.create(["stroke", "fill", "fill-opacity", "stroke-opacity"], {
166
- duration: o.transitions.duration.short
224
+ transition: theme.transitions.create(["stroke", "fill", "fill-opacity", "stroke-opacity"], {
225
+ duration: theme.transitions.duration.short
167
226
  })
168
227
  },
169
228
  "&.hover > .center": {
170
- stroke: k(o.palette.primary.main)
229
+ stroke: cssImportant(theme.palette.primary.main)
171
230
  },
172
231
  "&.hover > .border": {
173
- stroke: k(o.palette.primary.dark)
232
+ stroke: cssImportant(theme.palette.primary.dark)
174
233
  },
175
234
  "&.selected > .center": {
176
- stroke: k(o.palette.success.main)
235
+ stroke: cssImportant(theme.palette.success.main)
177
236
  },
178
237
  "&.selected > .border": {
179
- stroke: k(o.palette.success.dark)
238
+ stroke: cssImportant(theme.palette.success.dark)
180
239
  },
181
240
  "&.selected.hover > .center": {
182
- stroke: k(o.palette.primary.main)
241
+ stroke: cssImportant(theme.palette.primary.main)
183
242
  },
184
243
  "&.selected.hover > .border": {
185
- stroke: k(o.palette.primary.dark)
244
+ stroke: cssImportant(theme.palette.primary.dark)
186
245
  }
187
246
  }
188
247
  },
189
248
  children: [
190
- t ? X[M]() : /* @__PURE__ */ l(ke, { children: [
191
- /* @__PURE__ */ i("svg", { id: "viz", ref: a, children: /* @__PURE__ */ i("g", { id: "view" }) }),
192
- /* @__PURE__ */ i(
193
- he,
249
+ graph ? visualizations[viz]() : /* @__PURE__ */ jsxs(Fragment, { children: [
250
+ /* @__PURE__ */ jsx("svg", { id: "viz", ref: svgRef, children: /* @__PURE__ */ jsx("g", { id: "view" }) }),
251
+ /* @__PURE__ */ jsx(
252
+ Typography,
194
253
  {
195
254
  variant: "h1",
196
255
  color: "text.secondary",
@@ -201,23 +260,23 @@ const rt = ({ graph: t, sx: se = {} }) => {
201
260
  opacity: 0.3,
202
261
  transform: "translateX(-50%) translateY(-50%)"
203
262
  },
204
- children: C("graph.no.dataset")
263
+ children: t("graph.no.dataset")
205
264
  }
206
265
  )
207
266
  ] }),
208
- /* @__PURE__ */ i(
209
- x,
267
+ /* @__PURE__ */ jsx(
268
+ Stack,
210
269
  {
211
270
  direction: "column",
212
271
  spacing: 1,
213
272
  sx: {
214
273
  position: "absolute",
215
- top: o.spacing(1),
216
- left: o.spacing(1),
217
- right: o.spacing(1)
274
+ top: theme.spacing(1),
275
+ left: theme.spacing(1),
276
+ right: theme.spacing(1)
218
277
  },
219
- children: /* @__PURE__ */ l(
220
- x,
278
+ children: /* @__PURE__ */ jsxs(
279
+ Stack,
221
280
  {
222
281
  direction: "row",
223
282
  spacing: 1,
@@ -225,55 +284,55 @@ const rt = ({ graph: t, sx: se = {} }) => {
225
284
  "& > div:first-of-type": {
226
285
  flex: 1,
227
286
  maxWidth: "775px",
228
- backgroundColor: ie(o.palette.background.paper, 0.8)
287
+ backgroundColor: alpha(theme.palette.background.paper, 0.8)
229
288
  }
230
289
  },
231
290
  children: [
232
- /* @__PURE__ */ i(
233
- ze,
291
+ /* @__PURE__ */ jsx(
292
+ Autocomplete,
234
293
  {
235
- disablePortal: !0,
236
- onChange: (e, n) => xe(n.id),
237
- onKeyDown: ve,
238
- options: ye,
294
+ disablePortal: true,
295
+ onChange: (__, value) => onNodeChange(value.id),
296
+ onKeyDown: onKeyPress,
297
+ options: suggestions,
239
298
  sx: { width: "400px" },
240
- getOptionLabel: (e) => e.value,
241
- filterOptions: (e, n) => e.filter((r) => r.value.toLowerCase().includes(n.inputValue)),
242
- renderOption: (e, n) => /* @__PURE__ */ Ce("li", { ...e, key: n.id + n.value }, n.value),
243
- renderInput: (e) => /* @__PURE__ */ i(Se, { ...e, error: fe, label: C("graph.node.input.label") })
299
+ getOptionLabel: (option) => option.value,
300
+ filterOptions: (options, state) => options.filter((opt) => opt.value.toLowerCase().includes(state.inputValue)),
301
+ renderOption: (props, option) => /* @__PURE__ */ createElement("li", { ...props, key: option.id + option.value }, option.value),
302
+ renderInput: (params) => /* @__PURE__ */ jsx(TextField, { ...params, error: hasError, label: t("graph.node.input.label") })
244
303
  }
245
304
  ),
246
- /* @__PURE__ */ l(Ee, { sx: { minWidth: "150px", backgroundColor: ie(o.palette.background.paper, 0.8) }, children: [
247
- /* @__PURE__ */ i(Ie, { id: "viz-label", children: C("graph.visualization") }),
248
- /* @__PURE__ */ i(
249
- Oe,
305
+ /* @__PURE__ */ jsxs(FormControl, { sx: { minWidth: "150px", backgroundColor: alpha(theme.palette.background.paper, 0.8) }, children: [
306
+ /* @__PURE__ */ jsx(InputLabel, { id: "viz-label", children: t("graph.visualization") }),
307
+ /* @__PURE__ */ jsx(
308
+ Select,
250
309
  {
251
- label: C("graph.visualization"),
310
+ label: t("graph.visualization"),
252
311
  labelId: "viz-label",
253
- value: M,
254
- onChange: (e) => H(e.target.value),
312
+ value: viz,
313
+ onChange: (event) => setViz(event.target.value),
255
314
  sx: { textTransform: "capitalize" },
256
- children: Object.keys(X).map((e) => /* @__PURE__ */ i(Ne, { value: e, sx: { textTransform: "capitalize" }, children: e }, e))
315
+ children: Object.keys(visualizations).map((_viz) => /* @__PURE__ */ jsx(MenuItem, { value: _viz, sx: { textTransform: "capitalize" }, children: _viz }, _viz))
257
316
  }
258
317
  )
259
318
  ] }),
260
- /* @__PURE__ */ i(
261
- $e,
319
+ /* @__PURE__ */ jsx(
320
+ ExpandMoreButton,
262
321
  {
263
- disabled: h.length < 1,
264
- expand: I,
265
- onClick: () => B(!I),
266
- "aria-expanded": I,
267
- "aria-label": C("graph.show.more"),
322
+ disabled: selectedNodeIds.length < 1,
323
+ expand: showPanel,
324
+ onClick: () => setShowPanel(!showPanel),
325
+ "aria-expanded": showPanel,
326
+ "aria-label": t("graph.show.more"),
268
327
  size: "small",
269
328
  sx: {
270
329
  marginLeft: "auto !important",
271
330
  alignSelf: "center"
272
331
  },
273
- children: /* @__PURE__ */ i(
274
- ae,
332
+ children: /* @__PURE__ */ jsx(
333
+ Iconified,
275
334
  {
276
- icon: E === "vertical" ? "ic:baseline-chevron-left" : "ic:baseline-expand-more",
335
+ icon: panelLocation === "vertical" ? "ic:baseline-chevron-left" : "ic:baseline-expand-more",
277
336
  fontSize: "medium"
278
337
  }
279
338
  )
@@ -284,64 +343,64 @@ const rt = ({ graph: t, sx: se = {} }) => {
284
343
  )
285
344
  }
286
345
  ),
287
- /* @__PURE__ */ i(
288
- T,
346
+ /* @__PURE__ */ jsx(
347
+ Card,
289
348
  {
290
- variant: w ? "elevation" : "outlined",
291
- elevation: w ? 4 : 0,
349
+ variant: showCoordinates ? "elevation" : "outlined",
350
+ elevation: showCoordinates ? 4 : 0,
292
351
  sx: {
293
352
  position: "absolute",
294
- bottom: o.spacing(0.5),
295
- right: o.spacing(0.5),
353
+ bottom: theme.spacing(0.5),
354
+ right: theme.spacing(0.5),
296
355
  px: 1,
297
356
  py: 0.5,
298
357
  border: "none !important"
299
358
  },
300
- children: /* @__PURE__ */ l(x, { direction: "row", spacing: 0.5, alignItems: "center", children: [
301
- w && /* @__PURE__ */ l("span", { children: [
302
- s.x.toFixed(0),
359
+ children: /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 0.5, alignItems: "center", children: [
360
+ showCoordinates && /* @__PURE__ */ jsxs("span", { children: [
361
+ currentZoom.x.toFixed(0),
303
362
  ", ",
304
- s.y.toFixed(0),
363
+ currentZoom.y.toFixed(0),
305
364
  " (",
306
- s.k.toFixed(2),
365
+ currentZoom.k.toFixed(2),
307
366
  "x",
308
367
  ")"
309
368
  ] }),
310
- /* @__PURE__ */ i(
311
- Me,
369
+ /* @__PURE__ */ jsx(
370
+ IconButton,
312
371
  {
313
- size: w ? "small" : "medium",
314
- onClick: () => W(),
315
- disabled: s.k === P.k && s.x === 0 && s.y === 0,
316
- children: /* @__PURE__ */ i(ae, { icon: "ic:baseline-refresh", fontSize: w ? "small" : "medium" })
372
+ size: showCoordinates ? "small" : "medium",
373
+ onClick: () => resetZoom(),
374
+ disabled: currentZoom.k === identity.k && currentZoom.x === 0 && currentZoom.y === 0,
375
+ children: /* @__PURE__ */ jsx(Iconified, { icon: "ic:baseline-refresh", fontSize: showCoordinates ? "small" : "medium" })
317
376
  }
318
377
  )
319
378
  ] })
320
379
  }
321
380
  ),
322
- F && /* @__PURE__ */ i(
323
- T,
381
+ showMousePos && /* @__PURE__ */ jsx(
382
+ Card,
324
383
  {
325
384
  variant: "elevation",
326
385
  elevation: 4,
327
386
  sx: {
328
387
  position: "absolute",
329
- bottom: o.spacing(0.5),
330
- left: o.spacing(0.5),
388
+ bottom: theme.spacing(0.5),
389
+ left: theme.spacing(0.5),
331
390
  px: 1,
332
391
  py: 0.5
333
392
  },
334
- children: /* @__PURE__ */ i("code", { children: /* @__PURE__ */ l(x, { direction: "row", spacing: 1, children: [
335
- /* @__PURE__ */ l("span", { children: [
393
+ children: /* @__PURE__ */ jsx("code", { children: /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, children: [
394
+ /* @__PURE__ */ jsxs("span", { children: [
336
395
  "(",
337
396
  "abs: ",
338
- me.join(", "),
397
+ absoluteMousePos.join(", "),
339
398
  ")"
340
399
  ] }),
341
- /* @__PURE__ */ l("span", { children: [
400
+ /* @__PURE__ */ jsxs("span", { children: [
342
401
  "(",
343
402
  "rel: ",
344
- ce.join(", "),
403
+ relativeMousePos.join(", "),
345
404
  ")"
346
405
  ] })
347
406
  ] }) })
@@ -350,21 +409,21 @@ const rt = ({ graph: t, sx: se = {} }) => {
350
409
  ]
351
410
  }
352
411
  ) }),
353
- /* @__PURE__ */ i(
354
- Pe,
412
+ /* @__PURE__ */ jsx(
413
+ Collapse,
355
414
  {
356
- in: I && h.length > 0,
357
- orientation: E === "vertical" ? "horizontal" : "vertical",
358
- appear: !0,
359
- unmountOnExit: !0,
360
- children: /* @__PURE__ */ i(
361
- x,
415
+ in: showPanel && selectedNodeIds.length > 0,
416
+ orientation: panelLocation === "vertical" ? "horizontal" : "vertical",
417
+ appear: true,
418
+ unmountOnExit: true,
419
+ children: /* @__PURE__ */ jsx(
420
+ Stack,
362
421
  {
363
422
  direction: "column",
364
423
  spacing: 1,
365
- sx: E === "vertical" ? { width: "450px", height: "100%" } : { width: "100%", height: "300px" },
424
+ sx: panelLocation === "vertical" ? { width: "450px", height: "100%" } : { width: "100%", height: "300px" },
366
425
  pb: 1,
367
- children: /* @__PURE__ */ i(He, { selectedNodeIds: h, findNode: be })
426
+ children: /* @__PURE__ */ jsx(NodePanel, { selectedNodeIds, findNode })
368
427
  }
369
428
  )
370
429
  }
@@ -374,5 +433,5 @@ const rt = ({ graph: t, sx: se = {} }) => {
374
433
  );
375
434
  };
376
435
  export {
377
- rt as default
436
+ Graph as default
378
437
  };