@cccsaurora/clue-ui 1.2.1-patch.256 → 1.3.0-dev.255

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 (181) hide show
  1. package/ActionForm-C0aE9HUv.js +5941 -0
  2. package/AnnotationDetails-CEou0vCc.js +175 -0
  3. package/AnnotationPreview-CLMVD6Ec.js +188 -0
  4. package/ClueEnrichContext-BkD9ZwM9.js +541 -0
  5. package/FlexOne-BSYAhhtG.js +9 -0
  6. package/_MapCache-WmuDdwuH.js +222 -0
  7. package/_Uint8Array-DdG4KLKn.js +128 -0
  8. package/_baseAssignValue-CGTuELqU.js +25 -0
  9. package/_baseClone-BpWiBnMp.js +283 -0
  10. package/_baseExtremum-BY663UjY.js +33 -0
  11. package/_baseFlatten-B69cDsaV.js +92 -0
  12. package/_baseGet-Bx3A4Qfp.js +108 -0
  13. package/_baseIsEqual-B4IufFlL.js +208 -0
  14. package/_baseIteratee-7AQvAy1o.js +126 -0
  15. package/_baseSlice-GAv_YFTT.js +20 -0
  16. package/_baseSum-D0WC1dN0.js +13 -0
  17. package/_baseUniq-B8fK6hI-.js +115 -0
  18. package/_commonjsHelpers-DWwsNxpa.js +8 -0
  19. package/_createAggregator-CwGPThny.js +63 -0
  20. package/_getPrototype-CblfEidB.js +5 -0
  21. package/_getTag-jwz4XLoZ.js +126 -0
  22. package/_setToArray-CaPKQhcz.js +33 -0
  23. package/cloneDeep-DmUylbkM.js +8 -0
  24. package/components/AnnotationBody.js +49 -35
  25. package/components/AnnotationDetailPopover.js +36 -30
  26. package/components/AnnotationDetails.js +7 -7
  27. package/components/AnnotationEntry.js +35 -35
  28. package/components/AnnotationPreview.js +5 -5
  29. package/components/ClassificationChip.js +44 -23
  30. package/components/CountBadge.js +31 -26
  31. package/components/EnrichedCard.js +110 -97
  32. package/components/EnrichedChip.js +130 -105
  33. package/components/EnrichedTypography.js +133 -107
  34. package/components/ErrorBoundary.js +28 -24
  35. package/components/RetryFailedEnrichments.js +10 -9
  36. package/components/SourcePicker.js +57 -49
  37. package/components/actions/ActionForm.js +4 -4
  38. package/components/actions/ExecutePopover.js +75 -59
  39. package/components/actions/ResultModal.js +4 -4
  40. package/components/actions/form/schemaAdapter.js +39 -23
  41. package/components/actions/formats/FileResult.js +86 -59
  42. package/components/actions/formats/index.js +21 -10
  43. package/components/display/graph/ExpandMoreButton.js +10 -10
  44. package/components/display/graph/elements/NodeCard.js +111 -91
  45. package/components/display/graph/elements/NodeTag.js +15 -13
  46. package/components/display/graph/index.js +261 -202
  47. package/components/display/graph/visualizations/Leaf.js +88 -69
  48. package/components/display/graph/visualizations/cloud/index.js +98 -81
  49. package/components/display/graph/visualizations/icons/BaseIcon.js +26 -21
  50. package/components/display/graph/visualizations/icons/BugIcon.js +12 -12
  51. package/components/display/graph/visualizations/icons/HostIcon.js +12 -12
  52. package/components/display/graph/visualizations/icons/NetworkIcon.js +12 -12
  53. package/components/display/graph/visualizations/icons/ProcessIcon.js +12 -12
  54. package/components/display/graph/visualizations/icons/TargetIcon.js +13 -13
  55. package/components/display/graph/visualizations/icons/index.js +14 -13
  56. package/components/display/graph/visualizations/panels/NodePanel.js +10 -8
  57. package/components/display/graph/visualizations/tree/BundleLine.js +108 -81
  58. package/components/display/graph/visualizations/tree/Triangle.js +13 -13
  59. package/components/display/graph/visualizations/tree/index.js +407 -306
  60. package/components/display/icons/Iconified.js +27 -12
  61. package/components/display/json/index.js +4 -4
  62. package/components/display/markdown/index.js +8678 -5770
  63. package/components/enrichment/EnrichPopover.js +54 -46
  64. package/components/fetchers/Fetcher.js +155 -117
  65. package/components/fetchers/PreviewModal.js +20 -17
  66. package/components/fetchers/StatusChip.js +21 -17
  67. package/components/group/Entry.js +13 -11
  68. package/components/group/Group.js +13 -10
  69. package/components/group/GroupControl.js +76 -65
  70. package/components/stats/QueryStatus.js +43 -33
  71. package/countBy-DqlU5OwT.js +14 -0
  72. package/data/event.js +6 -4
  73. package/database/index.js +2 -2
  74. package/debounce-bV0h5FC5.js +92 -0
  75. package/get-DSsNkRQs.js +8 -0
  76. package/groupBy-ChDRT7uy.js +14 -0
  77. package/hooks/ClueActionContext.js +6 -6
  78. package/hooks/ClueComponentContext.js +29 -23
  79. package/hooks/ClueConfigProvider.js +14 -12
  80. package/hooks/ClueDatabaseContext.js +19 -13
  81. package/hooks/ClueEnrichContext.js +8 -8
  82. package/hooks/ClueFetcherContext.js +83 -56
  83. package/hooks/ClueGroupContext.js +17 -14
  84. package/hooks/CluePopupContext.js +5 -5
  85. package/hooks/ClueProvider.js +12 -10
  86. package/hooks/selectors.js +7 -7
  87. package/hooks/useActionResult.js +2 -2
  88. package/hooks/useAnnotations.js +47 -31
  89. package/hooks/useClue.js +6 -4
  90. package/hooks/useClueActions.js +3 -3
  91. package/hooks/useClueConfig.js +6 -4
  92. package/hooks/useClueTypeConfig.js +3 -3
  93. package/hooks/useComparator.js +722 -435
  94. package/hooks/useErrors.js +22 -18
  95. package/hooks/useFetcherResult.js +33 -24
  96. package/hooks/useMyHighlights.js +66 -36
  97. package/hooks/useMyLocalStorage.js +66 -37
  98. package/iconify-CXMreGTg.js +1782 -0
  99. package/icons/Action.js +66 -49
  100. package/icons/Assessment.js +84 -69
  101. package/icons/Context.js +77 -63
  102. package/icons/Opinion.js +78 -60
  103. package/icons/iconMap.js +2 -2
  104. package/identity-CPGTqrE4.js +6 -0
  105. package/index-AMfoEg_6.js +696 -0
  106. package/index-B6C2a_Lg.js +1172 -0
  107. package/index-C12gPw2W.js +17698 -0
  108. package/index-DCKkHTvx.js +15750 -0
  109. package/index-UkW8Sur3.js +465 -0
  110. package/isNil-CIubwp4T.js +6 -0
  111. package/isObject-FTY-5JQX.js +7 -0
  112. package/isObjectLike-OAgjjZye.js +48 -0
  113. package/isSymbol-Xd2FsJyp.js +8 -0
  114. package/last-CUCl67Im.js +7 -0
  115. package/main.js +60 -60
  116. package/package.json +1 -1
  117. package/sortBy-C7mGPI_D.js +100 -0
  118. package/sumBy-CGALjmwQ.js +8 -0
  119. package/text/Frequency.js +42 -23
  120. package/toFinite-Bc55msYj.js +16 -0
  121. package/toNumber-DPxy1FBy.js +39 -0
  122. package/useClueTypeConfig-D2tf4-NM.js +3289 -0
  123. package/utils/chain.js +91 -65
  124. package/utils/classificationParser.js +519 -256
  125. package/utils/constants.js +35 -10
  126. package/utils/graph.js +72 -45
  127. package/utils/hashUtil.js +7 -7
  128. package/utils/line.js +131 -81
  129. package/utils/loggerUtil.js +5 -3
  130. package/utils/sessionStorage.js +41 -27
  131. package/utils/time.js +423 -423
  132. package/utils/utils.js +9 -9
  133. package/utils/window.js +21 -10
  134. package/utils-71DpzFrA.js +199 -0
  135. package/ActionForm-DlOXqMUx.js +0 -4460
  136. package/AnnotationDetails-Bk-p0F6h.js +0 -160
  137. package/AnnotationPreview-jzZvkCxJ.js +0 -140
  138. package/ClueEnrichContext-KqRuuWNS.js +0 -418
  139. package/FlexOne-BXWFOd1T.js +0 -6
  140. package/_MapCache-BiTi0iqu.js +0 -180
  141. package/_Uint8Array-BQNOM9Rr.js +0 -101
  142. package/_baseAssignValue-CNMLQZco.js +0 -20
  143. package/_baseClone-BnT-6pyM.js +0 -207
  144. package/_baseExtremum-Ca2EHgy2.js +0 -16
  145. package/_baseFlatten-Bfr_Molw.js +0 -72
  146. package/_baseGet-DSZygzyq.js +0 -79
  147. package/_baseIsEqual-VgvaAFZG.js +0 -147
  148. package/_baseIteratee-Dbfsw5z8.js +0 -95
  149. package/_baseSlice-M5RKzt1A.js +0 -10
  150. package/_baseSum-wEbgNeUs.js +0 -10
  151. package/_baseUniq-BJcj69PL.js +0 -79
  152. package/_commonjsHelpers-DaMA6jEr.js +0 -8
  153. package/_createAggregator-k3TuAnxT.js +0 -53
  154. package/_getPrototype-Cr1Mk7BC.js +0 -5
  155. package/_getTag-CK2Sffaq.js +0 -90
  156. package/_isIterateeCall-DkJP7Rbx.js +0 -13
  157. package/_setToArray-C7yMOeww.js +0 -29
  158. package/cloneDeep-CF8TtLHr.js +0 -8
  159. package/countBy-CdYegFSu.js +0 -8
  160. package/debounce-DryYcbJ4.js +0 -56
  161. package/get-CH7kz5Ix.js +0 -8
  162. package/groupBy-br8xmD2R.js +0 -8
  163. package/iconify-BBckr5AQ.js +0 -1263
  164. package/identity-ByMq8VxU.js +0 -6
  165. package/index-BHAe_V9n.js +0 -12768
  166. package/index-BK-zfYhR.js +0 -358
  167. package/index-CA5CUNZO.js +0 -975
  168. package/index-Dj5C04IX.js +0 -568
  169. package/index-p5_wX7q1.js +0 -11729
  170. package/isNil-CjWwlQS3.js +0 -6
  171. package/isObject-B53jY8Qg.js +0 -7
  172. package/isObjectLike-BatpeCIi.js +0 -29
  173. package/isSymbol-C3_SC0Qp.js +0 -8
  174. package/last-7CdUxN0r.js +0 -7
  175. package/maxBy-Bc0dYHcO.js +0 -8
  176. package/sortBy-DY2JBf9n.js +0 -75
  177. package/sumBy-DuMASLPd.js +0 -8
  178. package/toFinite-BMy6GObD.js +0 -14
  179. package/toNumber-YVhnnJv4.js +0 -31
  180. package/useClueTypeConfig-Ct9Ygter.js +0 -2292
  181. package/utils-DmwSUrum.js +0 -129
@@ -0,0 +1,175 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { I as Icon } from "./iconify-CXMreGTg.js";
3
+ import { useTheme, Stack, Typography, Tooltip, Box, IconButton, CircularProgress, Chip, Accordion, AccordionSummary, AccordionDetails, Divider } from "@mui/material";
4
+ import Iconified from "./components/display/icons/Iconified.js";
5
+ import { SNACKBAR_EVENT_ID } from "./data/event.js";
6
+ import { ClueComponentContext } from "./hooks/ClueComponentContext.js";
7
+ import { b as useClueEnrichSelector } from "./ActionForm-C0aE9HUv.js";
8
+ import useAnnotations from "./hooks/useAnnotations.js";
9
+ import useErrors from "./hooks/useErrors.js";
10
+ import { ICON_MAP } from "./icons/iconMap.js";
11
+ import { safeDispatchEvent } from "./utils/window.js";
12
+ import { g as groupBy } from "./groupBy-ChDRT7uy.js";
13
+ import { u as uniq } from "./useClueTypeConfig-D2tf4-NM.js";
14
+ import { memo, useState, useMemo, useCallback, useEffect } from "react";
15
+ import { u as useContextSelector } from "./index-AMfoEg_6.js";
16
+ import ExecutePopover from "./components/actions/ExecutePopover.js";
17
+ import AnnotationEntry from "./components/AnnotationEntry.js";
18
+ import ClassificationChip from "./components/ClassificationChip.js";
19
+ import EnrichPopover from "./components/enrichment/EnrichPopover.js";
20
+ function isNull(value) {
21
+ return value === null;
22
+ }
23
+ const AnnotationDetails = ({ enrichRequest, setReady, updatePosition }) => {
24
+ const theme = useTheme();
25
+ const { t } = useContextSelector(ClueComponentContext, (ctx) => ctx.i18next);
26
+ const [filter, setFilter] = useState("all");
27
+ const enrich = useClueEnrichSelector((state) => state.enrich);
28
+ const [annotations, loading] = useAnnotations(
29
+ enrichRequest == null ? void 0 : enrichRequest.type,
30
+ enrichRequest == null ? void 0 : enrichRequest.value,
31
+ enrichRequest == null ? void 0 : enrichRequest.classification,
32
+ { skipEnrichment: true }
33
+ );
34
+ const errors = useErrors(enrichRequest == null ? void 0 : enrichRequest.value);
35
+ const options = useMemo(
36
+ () => ["all", ...uniq((annotations ?? []).map((annotation) => annotation.type))],
37
+ [annotations]
38
+ );
39
+ const annotationsByType = useMemo(() => groupBy(annotations ?? [], "type"), [annotations]);
40
+ const forceEnrich = useCallback(async () => {
41
+ await enrich(enrichRequest.type, enrichRequest.value, {
42
+ classification: enrichRequest.classification,
43
+ timeout: 15,
44
+ force: true
45
+ });
46
+ }, [enrichRequest, enrich]);
47
+ useEffect(() => {
48
+ if (!setReady) {
49
+ return;
50
+ }
51
+ setReady(enrichRequest && !isNull(annotations));
52
+ updatePosition == null ? void 0 : updatePosition();
53
+ }, [annotations, enrichRequest, setReady, updatePosition]);
54
+ return enrichRequest && !isNull(annotations) && /* @__PURE__ */ jsxs(Stack, { direction: "column", sx: { p: 1, width: "100%" }, spacing: 1, children: [
55
+ /* @__PURE__ */ jsxs(Stack, { spacing: 1, children: [
56
+ /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, children: [
57
+ /* @__PURE__ */ jsxs(Stack, { children: [
58
+ /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, children: [
59
+ /* @__PURE__ */ jsx(Typography, { variant: "body1", fontWeight: "bold", children: "Clue" }),
60
+ enrichRequest.classification && /* @__PURE__ */ jsx(ClassificationChip, { size: "small", classification: enrichRequest.classification })
61
+ ] }),
62
+ /* @__PURE__ */ jsxs(Typography, { variant: "caption", color: "text.secondary", children: [
63
+ enrichRequest.type.toLocaleUpperCase(),
64
+ " ",
65
+ t("enrichment")
66
+ ] })
67
+ ] }),
68
+ /* @__PURE__ */ jsx("div", { style: { flex: 1 } }),
69
+ /* @__PURE__ */ jsx(Tooltip, { title: t("refresh"), children: /* @__PURE__ */ jsx(Box, { sx: { alignSelf: "center", m: -1 }, children: /* @__PURE__ */ jsx(IconButton, { onClick: () => forceEnrich(), disabled: loading, children: loading ? /* @__PURE__ */ jsx(CircularProgress, { variant: "indeterminate", size: 20 }) : /* @__PURE__ */ jsx(Iconified, { icon: "ic:baseline-replay", fontSize: "small" }) }) }) }),
70
+ /* @__PURE__ */ jsx(Tooltip, { title: t("clipboard"), children: /* @__PURE__ */ jsx(
71
+ IconButton,
72
+ {
73
+ sx: { alignSelf: "center", m: -1 },
74
+ onClick: () => {
75
+ navigator.clipboard.writeText(enrichRequest.value);
76
+ safeDispatchEvent(
77
+ new CustomEvent(SNACKBAR_EVENT_ID, {
78
+ detail: {
79
+ message: `${enrichRequest.value} ${t("clipboard.success")}`,
80
+ level: "success"
81
+ }
82
+ })
83
+ );
84
+ },
85
+ children: /* @__PURE__ */ jsx(Iconified, { icon: "ic:outline-assignment", fontSize: "small" })
86
+ }
87
+ ) }),
88
+ /* @__PURE__ */ jsx(EnrichPopover, { selector: enrichRequest }),
89
+ /* @__PURE__ */ jsx(ExecutePopover, { selectors: [enrichRequest] })
90
+ ] }),
91
+ /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 0.5, children: [
92
+ options.map((opt, id) => /* @__PURE__ */ jsx(
93
+ Chip,
94
+ {
95
+ size: "small",
96
+ variant: opt === filter ? "filled" : "outlined",
97
+ icon: ICON_MAP[opt] && /* @__PURE__ */ jsx(Icon, { icon: ICON_MAP[opt] }),
98
+ label: /* @__PURE__ */ jsxs(Typography, { variant: "caption", textTransform: "capitalize", children: [
99
+ opt,
100
+ ":",
101
+ " ",
102
+ opt === "all" ? annotations.length : annotations.filter((annotation) => annotation.type === opt).length
103
+ ] }),
104
+ onClick: () => setFilter(opt)
105
+ },
106
+ id
107
+ )),
108
+ (errors == null ? void 0 : errors.length) > 0 && /* @__PURE__ */ jsx(
109
+ Tooltip,
110
+ {
111
+ title: /* @__PURE__ */ jsx("div", { onClick: (e) => e.stopPropagation(), children: errors.map((err, err_id) => /* @__PURE__ */ jsxs("div", { children: [
112
+ /* @__PURE__ */ jsx("span", { style: { textTransform: "capitalize" }, children: err.source.replace(/-/g, " ") }),
113
+ ":",
114
+ " ",
115
+ err.message
116
+ ] }, err_id)) }),
117
+ children: /* @__PURE__ */ jsx(
118
+ Chip,
119
+ {
120
+ size: "small",
121
+ variant: "outlined",
122
+ icon: /* @__PURE__ */ jsx(Icon, { icon: "material-symbols:timer-outline", color: theme.palette.error.main }),
123
+ label: /* @__PURE__ */ jsxs(Typography, { variant: "caption", textTransform: "capitalize", children: [
124
+ t("annotation.failed"),
125
+ ": ",
126
+ errors.length
127
+ ] }),
128
+ onClick: forceEnrich
129
+ }
130
+ )
131
+ }
132
+ )
133
+ ] })
134
+ ] }),
135
+ /* @__PURE__ */ jsx(Box, {}),
136
+ Object.keys(annotationsByType).filter((type) => !filter || filter === "all" || type === filter).map((type, id) => /* @__PURE__ */ jsxs(
137
+ Accordion,
138
+ {
139
+ defaultExpanded: true,
140
+ sx: {
141
+ marginTop: `${theme.spacing(1)} !important`,
142
+ marginBottom: "0 !important",
143
+ "&:before": { height: 0 }
144
+ },
145
+ children: [
146
+ filter === "all" && /* @__PURE__ */ jsx(
147
+ AccordionSummary,
148
+ {
149
+ expandIcon: /* @__PURE__ */ jsx(Iconified, { icon: "ic:baseline-arrow-drop-down" }),
150
+ sx: {
151
+ minHeight: "initial !important",
152
+ mt: 0.5,
153
+ mb: 0,
154
+ px: 1,
155
+ "& .MuiAccordionSummary-content": { my: 0.5, mx: 0 },
156
+ "& .MuiAccordionSummary-content.Mui-expanded": { my: 0.5, mx: 0 }
157
+ },
158
+ children: /* @__PURE__ */ jsx(Typography, { variant: "body1", textTransform: "capitalize", children: type }, type)
159
+ }
160
+ ),
161
+ /* @__PURE__ */ jsxs(AccordionDetails, { sx: { px: 1 }, children: [
162
+ filter === "all" && /* @__PURE__ */ jsx(Divider, { orientation: "horizontal", sx: { mb: 1 } }),
163
+ /* @__PURE__ */ jsx(Stack, { spacing: 1, divider: /* @__PURE__ */ jsx(Divider, { orientation: "horizontal", flexItem: true }), children: annotationsByType[type].map((annotation, ann_id) => /* @__PURE__ */ jsx(AnnotationEntry, { annotation }, ann_id)) })
164
+ ] })
165
+ ]
166
+ },
167
+ id
168
+ ))
169
+ ] });
170
+ };
171
+ const AnnotationDetails$1 = memo(AnnotationDetails);
172
+ export {
173
+ AnnotationDetails$1 as A,
174
+ isNull as i
175
+ };
@@ -0,0 +1,188 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { I as Icon } from "./iconify-CXMreGTg.js";
3
+ import { useTheme, Popper, Fade, Paper, Stack, Typography, Divider } from "@mui/material";
4
+ import AnnotationDetailPopover from "./components/AnnotationDetailPopover.js";
5
+ import useAnnotations from "./hooks/useAnnotations.js";
6
+ import { t as twitterShort } from "./utils-71DpzFrA.js";
7
+ import { useState, useRef, useCallback, useEffect, useMemo } from "react";
8
+ import { c as createContext, u as useContextSelector } from "./index-AMfoEg_6.js";
9
+ import { SHOW_EVENT_ID, HIDE_EVENT_ID } from "./data/event.js";
10
+ import { safeDispatchEvent, safeAddEventListener } from "./utils/window.js";
11
+ import { i as isNull } from "./AnnotationDetails-CEou0vCc.js";
12
+ const CluePopupContext = createContext(null);
13
+ const CluePopupProvider = ({ children }) => {
14
+ const [popupType, setPopupType] = useState(null);
15
+ const [detailsAnchorEl, setDetailsAnchorEl] = useState(null);
16
+ const [detailsData, setDetailsData] = useState(null);
17
+ const [detailsContent, setDetailsContent] = useState(null);
18
+ const [popoverProps, setPopoverProps] = useState({});
19
+ const externalOnClose = useRef(null);
20
+ const showInfo = useCallback((type, anchorEl, value, options) => {
21
+ safeDispatchEvent(
22
+ new CustomEvent(SHOW_EVENT_ID, {
23
+ detail: {
24
+ type,
25
+ anchorEl,
26
+ value,
27
+ options
28
+ }
29
+ })
30
+ );
31
+ }, []);
32
+ const closeInfo = useCallback(
33
+ (type, value) => {
34
+ safeDispatchEvent(
35
+ new CustomEvent(HIDE_EVENT_ID, {
36
+ detail: {
37
+ type,
38
+ value
39
+ }
40
+ })
41
+ );
42
+ },
43
+ // eslint-disable-next-line react-hooks/exhaustive-deps
44
+ []
45
+ );
46
+ const handleShowPopup = useCallback((event) => {
47
+ const { detail } = event;
48
+ setPopupType(detail.type);
49
+ setDetailsData(detail.value);
50
+ if (detail.options) {
51
+ if (detail.options.content) {
52
+ setDetailsContent(detail.options.content);
53
+ }
54
+ if (detail.options.onClose) {
55
+ externalOnClose.current = detail.options.onClose;
56
+ }
57
+ if (detail.options.popoverProps) {
58
+ setPopoverProps(detail.options.popoverProps);
59
+ }
60
+ }
61
+ setDetailsAnchorEl(detail.anchorEl);
62
+ }, []);
63
+ const handleHidePopup = useCallback(
64
+ (event) => {
65
+ const { detail } = event;
66
+ if (detailsData && (detail.type !== popupType || detailsData.type !== detail.value.type || detailsData.value !== detail.value.value)) {
67
+ return;
68
+ }
69
+ setPopupType(null);
70
+ setDetailsAnchorEl(null);
71
+ setDetailsData(null);
72
+ setDetailsContent(null);
73
+ setPopoverProps({});
74
+ externalOnClose.current = null;
75
+ },
76
+ [detailsData, popupType]
77
+ );
78
+ useEffect(() => {
79
+ const cleanupShow = safeAddEventListener(SHOW_EVENT_ID, handleShowPopup);
80
+ const cleanupHide = safeAddEventListener(HIDE_EVENT_ID, handleHidePopup);
81
+ return () => {
82
+ cleanupShow();
83
+ cleanupHide();
84
+ };
85
+ }, [handleShowPopup, handleHidePopup]);
86
+ const context = useMemo(
87
+ () => ({
88
+ showInfo,
89
+ closeInfo,
90
+ __detailsContent: detailsContent
91
+ }),
92
+ [closeInfo, detailsContent, showInfo]
93
+ );
94
+ return /* @__PURE__ */ jsxs(CluePopupContext.Provider, { value: context, children: [
95
+ children,
96
+ /* @__PURE__ */ jsx(
97
+ AnnotationDetailPopover,
98
+ {
99
+ ...popoverProps,
100
+ anchorEl: detailsAnchorEl,
101
+ open: !!detailsAnchorEl && popupType === "details",
102
+ enrichRequest: detailsData,
103
+ onClose: () => {
104
+ if (externalOnClose.current) {
105
+ externalOnClose.current();
106
+ } else {
107
+ closeInfo("details", detailsData);
108
+ }
109
+ }
110
+ }
111
+ ),
112
+ /* @__PURE__ */ jsx(
113
+ AnnotationPreview,
114
+ {
115
+ ...popoverProps,
116
+ anchorEl: detailsAnchorEl,
117
+ open: !!detailsAnchorEl && !isNull(popupType) && popupType !== "details",
118
+ annotationType: popupType,
119
+ enrichRequest: detailsData
120
+ }
121
+ )
122
+ ] });
123
+ };
124
+ const AnnotationPreview = ({ annotationType, anchorEl, enrichRequest, open, ...otherProps }) => {
125
+ const theme = useTheme();
126
+ const _detailsContent = useContextSelector(CluePopupContext, (state) => state.__detailsContent);
127
+ const [annotations] = useAnnotations(enrichRequest == null ? void 0 : enrichRequest.type, enrichRequest == null ? void 0 : enrichRequest.value, enrichRequest == null ? void 0 : enrichRequest.classification);
128
+ const filteredAnnotations = useMemo(
129
+ () => annotationType === "actionResults" ? [] : annotations.filter((annotation) => annotation.type === annotationType),
130
+ [annotationType, annotations]
131
+ );
132
+ const getZIndex = useCallback((_anchorEl) => {
133
+ try {
134
+ const zIndex = parseInt(window.getComputedStyle(_anchorEl, null).getPropertyValue("z-index"));
135
+ if (isNaN(zIndex)) {
136
+ return getZIndex(_anchorEl.parentElement);
137
+ }
138
+ return (zIndex + 2).toString();
139
+ } catch {
140
+ return "2";
141
+ }
142
+ }, []);
143
+ if (!filteredAnnotations.length && !_detailsContent) {
144
+ return null;
145
+ }
146
+ return /* @__PURE__ */ jsx(
147
+ Popper,
148
+ {
149
+ ...otherProps,
150
+ open,
151
+ anchorEl,
152
+ placement: "bottom-start",
153
+ sx: [{ zIndex: getZIndex(anchorEl) }, ...Array.isArray(otherProps.sx) ? otherProps.sx : [otherProps.sx]],
154
+ children: /* @__PURE__ */ jsx(Fade, { in: !!anchorEl, children: /* @__PURE__ */ jsx(Paper, { sx: { overflowY: "auto", maxWidth: "500px", boxShadow: theme.shadows[2] }, children: /* @__PURE__ */ jsx(Stack, { direction: "column", sx: { p: 1 }, spacing: 1, divider: /* @__PURE__ */ jsx(Divider, { orientation: "horizontal" }), children: _detailsContent ?? filteredAnnotations.map((annotation) => /* @__PURE__ */ jsxs(
155
+ Stack,
156
+ {
157
+ direction: "column",
158
+ spacing: 1,
159
+ children: [
160
+ /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, alignItems: "center", children: [
161
+ annotation.analytic_icon && /* @__PURE__ */ jsx(
162
+ Icon,
163
+ {
164
+ icon: annotation.analytic_icon,
165
+ style: { filter: "drop-shadow(0px 0px 1px rgb(0 0 0 / 0.4))" }
166
+ }
167
+ ),
168
+ /* @__PURE__ */ jsx(Typography, { variant: "body1", sx: { textTransform: "capitalize" }, children: annotation.analytic ?? annotation.author }),
169
+ /* @__PURE__ */ jsxs(Typography, { variant: "caption", color: "text.secondary", children: [
170
+ "(",
171
+ twitterShort(annotation.timestamp),
172
+ ")"
173
+ ] })
174
+ ] }),
175
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: annotation.summary }),
176
+ /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "text.secondary", children: annotation.value })
177
+ ]
178
+ },
179
+ annotation.analytic + annotation.author + annotation.value + annotation.link + annotation.summary + annotation.timestamp
180
+ )) }) }) })
181
+ }
182
+ );
183
+ };
184
+ export {
185
+ AnnotationPreview as A,
186
+ CluePopupContext as C,
187
+ CluePopupProvider as a
188
+ };