@cccsaurora/clue-ui 1.2.4-patch.275 → 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,79 +1,87 @@
1
- import { jsxs as y, Fragment as C, jsx as e } from "react/jsx-runtime";
2
- import { useTheme as k, Tooltip as S, IconButton as E, CircularProgress as f, Button as z, Popover as I, Paper as j, Stack as c, Box as P, Typography as B, Divider as O } from "@mui/material";
3
- import { d as T, b as p, e as w } from "../../ActionForm-CwsfB99X.js";
4
- import { useState as m, useRef as M, useCallback as D, useEffect as F } from "react";
5
- import g from "../display/icons/Iconified.js";
6
- const H = ({ show: t = !1, size: b = "small", selector: n }) => {
7
- const { t: s } = T((i) => i.i18next), h = k(), a = p((i) => i.availableSources), u = p((i) => i.enrich), [x, o] = m(t), [r, d] = m(!1), l = M(null), v = D(
8
- async (i) => {
9
- d(!0);
1
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
+ import { useTheme, Tooltip, IconButton, CircularProgress, Button, Popover, Paper, Stack, Box, Typography, Divider } from "@mui/material";
3
+ import { d as useClueComponentSelector, b as useClueEnrichSelector, e as capitalize } from "../../ActionForm-D6gYuFRR.js";
4
+ import { useState, useRef, useCallback, useEffect } from "react";
5
+ import Iconified from "../display/icons/Iconified.js";
6
+ const EnrichPopover = ({ show = false, size = "small", selector }) => {
7
+ const { t } = useClueComponentSelector((ctx) => ctx.i18next);
8
+ const theme = useTheme();
9
+ const availableSources = useClueEnrichSelector((ctx) => ctx.availableSources);
10
+ const _enrich = useClueEnrichSelector((ctx) => ctx.enrich);
11
+ const [showEnrichMenu, setShowEnrichMenu] = useState(show);
12
+ const [loading, setLoading] = useState(false);
13
+ const enrichEl = useRef(null);
14
+ const enrich = useCallback(
15
+ async (_source) => {
16
+ setLoading(true);
10
17
  try {
11
- await u(n.type, n.value, {
12
- classification: n.classification,
18
+ await _enrich(selector.type, selector.value, {
19
+ classification: selector.classification,
13
20
  timeout: 30,
14
- force: !0,
15
- noCache: !0,
16
- sources: [i],
17
- append: !0
21
+ force: true,
22
+ noCache: true,
23
+ sources: [_source],
24
+ append: true
18
25
  });
19
26
  } finally {
20
- d(!1);
27
+ setLoading(false);
21
28
  }
22
29
  },
23
- [u, n.classification, n.type, n.value]
30
+ [_enrich, selector.classification, selector.type, selector.value]
24
31
  );
25
- return F(() => {
26
- o(t);
27
- }, [t]), /* @__PURE__ */ y(C, { children: [
28
- b === "small" ? /* @__PURE__ */ e(S, { ref: l, title: s("enrich"), children: /* @__PURE__ */ e("span", { style: { alignSelf: "center" }, children: /* @__PURE__ */ e(
29
- E,
32
+ useEffect(() => {
33
+ setShowEnrichMenu(show);
34
+ }, [show]);
35
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
36
+ size === "small" ? /* @__PURE__ */ jsx(Tooltip, { ref: enrichEl, title: t("enrich"), children: /* @__PURE__ */ jsx("span", { style: { alignSelf: "center" }, children: /* @__PURE__ */ jsx(
37
+ IconButton,
30
38
  {
31
- onClick: () => o(!0),
32
- disabled: Object.keys(a).length < 1 || r,
39
+ onClick: () => setShowEnrichMenu(true),
40
+ disabled: Object.keys(availableSources).length < 1 || loading,
33
41
  color: "info",
34
- children: r ? /* @__PURE__ */ e(f, { color: "info", size: "24px" }) : /* @__PURE__ */ e(g, { icon: "ic:baseline-auto-fix-high" })
42
+ children: loading ? /* @__PURE__ */ jsx(CircularProgress, { color: "info", size: "24px" }) : /* @__PURE__ */ jsx(Iconified, { icon: "ic:baseline-auto-fix-high" })
35
43
  }
36
- ) }) }) : /* @__PURE__ */ e(
37
- z,
44
+ ) }) }) : /* @__PURE__ */ jsx(
45
+ Button,
38
46
  {
39
- ref: l,
47
+ ref: enrichEl,
40
48
  variant: "outlined",
41
49
  color: "info",
42
- disabled: Object.keys(a).length < 1 || r,
43
- startIcon: r ? /* @__PURE__ */ e(f, { color: "info", size: "20px" }) : /* @__PURE__ */ e(g, { icon: "ic:baseline-auto-fix-high" }),
50
+ disabled: Object.keys(availableSources).length < 1 || loading,
51
+ startIcon: loading ? /* @__PURE__ */ jsx(CircularProgress, { color: "info", size: "20px" }) : /* @__PURE__ */ jsx(Iconified, { icon: "ic:baseline-auto-fix-high" }),
44
52
  sx: { alignSelf: "stretch" },
45
- onClick: () => o(!0),
46
- children: s("enrich")
53
+ onClick: () => setShowEnrichMenu(true),
54
+ children: t("enrich")
47
55
  }
48
56
  ),
49
- /* @__PURE__ */ e(
50
- I,
57
+ /* @__PURE__ */ jsx(
58
+ Popover,
51
59
  {
52
60
  sx: { zIndex: 2e3 },
53
- open: x,
54
- disablePortal: !0,
55
- onClose: () => o(!1),
56
- anchorEl: l.current,
61
+ open: showEnrichMenu,
62
+ disablePortal: true,
63
+ onClose: () => setShowEnrichMenu(false),
64
+ anchorEl: enrichEl.current,
57
65
  anchorOrigin: { horizontal: "left", vertical: "bottom" },
58
- children: /* @__PURE__ */ e(j, { onClick: () => o(!1), children: /* @__PURE__ */ e(c, { divider: /* @__PURE__ */ e(O, { flexItem: !0, orientation: "horizontal" }), children: a.map((i) => /* @__PURE__ */ e(
59
- P,
66
+ children: /* @__PURE__ */ jsx(Paper, { onClick: () => setShowEnrichMenu(false), children: /* @__PURE__ */ jsx(Stack, { divider: /* @__PURE__ */ jsx(Divider, { flexItem: true, orientation: "horizontal" }), children: availableSources.map((_source) => /* @__PURE__ */ jsx(
67
+ Box,
60
68
  {
61
69
  sx: {
62
70
  px: 3,
63
71
  py: 1,
64
72
  cursor: "pointer",
65
- transition: h.transitions.create("background-color"),
66
- "&:hover": { backgroundColor: h.palette.background.default }
73
+ transition: theme.transitions.create("background-color"),
74
+ "&:hover": { backgroundColor: theme.palette.background.default }
67
75
  },
68
- onClick: () => v(i),
69
- children: /* @__PURE__ */ e(c, { children: /* @__PURE__ */ e(c, { direction: "row", spacing: 1, alignItems: "center", children: /* @__PURE__ */ e(B, { variant: "body1", children: i.split("-").map(w).join(" ") }) }) })
76
+ onClick: () => enrich(_source),
77
+ children: /* @__PURE__ */ jsx(Stack, { children: /* @__PURE__ */ jsx(Stack, { direction: "row", spacing: 1, alignItems: "center", children: /* @__PURE__ */ jsx(Typography, { variant: "body1", children: _source.split("-").map(capitalize).join(" ") }) }) })
70
78
  },
71
- i
79
+ _source
72
80
  )) }) })
73
81
  }
74
82
  )
75
83
  ] });
76
84
  };
77
85
  export {
78
- H as default
86
+ EnrichPopover as default
79
87
  };
@@ -1,106 +1,144 @@
1
- import { jsx as t, jsxs as l } from "react/jsx-runtime";
2
- import { I as H } from "../../iconify-BBckr5AQ.js";
3
- import { useTheme as V, Skeleton as I, Chip as q, Tooltip as J, Stack as f, Typography as K, LinearProgress as Q, Paper as U, Box as X, IconButton as Y } from "@mui/material";
4
- import { F as L } from "../../FlexOne-BXWFOd1T.js";
5
- import S from "../display/icons/Iconified.js";
6
- import { J as Z } from "../../index-BK-zfYhR.js";
7
- import { ClueComponentContext as $ } from "../../hooks/ClueComponentContext.js";
8
- import { c as s } from "../../ActionForm-CwsfB99X.js";
9
- import p, { useState as b, useRef as k, useMemo as P, useEffect as N, memo as ee } from "react";
10
- import { u as te } from "../../index-Dj5C04IX.js";
11
- import re from "../display/graph/index.js";
12
- import ie from "../display/markdown/index.js";
13
- import ne from "./PreviewModal.js";
14
- import oe from "./StatusChip.js";
15
- const ae = p.memo(
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { I as Icon } from "../../iconify-CXMreGTg.js";
3
+ import { useTheme, Skeleton, Chip, Tooltip, Stack, Typography, LinearProgress, Paper, Box, IconButton } from "@mui/material";
4
+ import { F as FlexOne } from "../../FlexOne-BSYAhhtG.js";
5
+ import Iconified from "../display/icons/Iconified.js";
6
+ import { J as JSONViewer } from "../../index-JcKyZeoY.js";
7
+ import { ClueComponentContext } from "../../hooks/ClueComponentContext.js";
8
+ import { c as useClueFetcherSelector } from "../../ActionForm-D6gYuFRR.js";
9
+ import React__default, { useState, useRef, useMemo, useEffect, memo } from "react";
10
+ import { u as useContextSelector } from "../../index-AMfoEg_6.js";
11
+ import Graph from "../display/graph/index.js";
12
+ import Markdown from "../display/markdown/index.js";
13
+ import PreviewModal from "./PreviewModal.js";
14
+ import StatusChip from "./StatusChip.js";
15
+ const Fetcher = React__default.memo(
16
16
  ({
17
- type: h,
18
- value: x,
19
- classification: g,
20
- fetcherId: a,
17
+ type,
18
+ value,
19
+ classification,
20
+ fetcherId,
21
21
  slotProps: {
22
- paper: n = {},
23
- preview: O = {},
24
- stack: o = {},
25
- image: W = {},
26
- chip: v = {},
27
- skeleton: i = {}
22
+ paper: paperProps = {},
23
+ preview: previewProps = {},
24
+ stack: stackProps = {},
25
+ image: imageProps = {},
26
+ chip: chipProps = {},
27
+ skeleton: skeletonProps = {}
28
28
  } = {}
29
29
  }) => {
30
- var z, M, T, j;
31
- const d = V(), w = s((r) => r.fetchers), F = s((r) => r.fetchSelector), R = s((r) => r.getFetcherStatus), D = s((r) => r.fetchCompleted), { t: m } = te($, (r) => r == null ? void 0 : r.i18next), [e, c] = b(null), [E, A] = b(!0), [G, _] = b(!1), y = k(null), C = P(() => e == null ? void 0 : e.task_id, [e == null ? void 0 : e.task_id]);
32
- if (N(() => {
33
- if ((e == null ? void 0 : e.outcome) !== "pending" || !C) return;
34
- let r = !1;
35
- const B = async () => {
36
- const u = await R(a, C);
37
- if (!u)
38
- c({ outcome: "failure", done: !0, error: "Missing result", link: "" });
39
- else if (u.outcome === "success" || u.outcome === "failure")
40
- c({ ...u, done: !0 });
41
- else {
42
- if (r) return;
43
- c({ ...u }), y.current = setTimeout(B, 2e3);
30
+ var _a, _b, _c, _d;
31
+ const theme = useTheme();
32
+ const fetchers = useClueFetcherSelector((ctx) => ctx.fetchers);
33
+ const fetchSelector = useClueFetcherSelector((ctx) => ctx.fetchSelector);
34
+ const getFetcherStatus = useClueFetcherSelector((ctx) => ctx.getFetcherStatus);
35
+ const fetchCompleted = useClueFetcherSelector((ctx) => ctx.fetchCompleted);
36
+ const { t } = useContextSelector(ClueComponentContext, (ctx) => ctx == null ? void 0 : ctx.i18next);
37
+ const [result, setResult] = useState(null);
38
+ const [loading, setLoading] = useState(true);
39
+ const [showPreview, setShowPreview] = useState(false);
40
+ const timeoutRef = useRef(null);
41
+ const taskId = useMemo(() => result == null ? void 0 : result.task_id, [result == null ? void 0 : result.task_id]);
42
+ useEffect(() => {
43
+ if ((result == null ? void 0 : result.outcome) !== "pending" || !taskId) return;
44
+ let cancelled = false;
45
+ const poll = async () => {
46
+ const res = await getFetcherStatus(fetcherId, taskId);
47
+ if (!res) {
48
+ setResult({ outcome: "failure", done: true, error: "Missing result", link: "" });
49
+ } else if (res.outcome === "success" || res.outcome === "failure") {
50
+ setResult({ ...res, done: true });
51
+ } else {
52
+ if (cancelled) return;
53
+ setResult({ ...res });
54
+ timeoutRef.current = setTimeout(poll, 2e3);
44
55
  }
45
56
  };
46
- return B(), () => {
47
- r = !0, y.current && clearTimeout(y.current);
57
+ poll();
58
+ return () => {
59
+ cancelled = true;
60
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
48
61
  };
49
- }, [a, R, e == null ? void 0 : e.outcome, C]), N(() => {
62
+ }, [fetcherId, getFetcherStatus, result == null ? void 0 : result.outcome, taskId]);
63
+ useEffect(() => {
50
64
  (async () => {
51
65
  try {
52
- A(!0), c(await F(a, { type: h, value: x, classification: g }));
66
+ setLoading(true);
67
+ setResult(await fetchSelector(fetcherId, { type, value, classification }));
53
68
  } catch {
54
- c({ outcome: "failure", done: !0, error: m("error.unexpected") });
69
+ setResult({ outcome: "failure", done: true, error: t("error.unexpected") });
55
70
  } finally {
56
- A(!1);
71
+ setLoading(false);
57
72
  }
58
73
  })();
59
- }, [g, F, a, m, h, x]), D)
60
- if (a)
61
- if (a.includes(".")) {
62
- if (!(a in w))
63
- return console.warn("Fetcher ID does not correspond to a registered fetcher. Component will not render."), null;
64
- } else return console.warn(
74
+ }, [classification, fetchSelector, fetcherId, t, type, value]);
75
+ if (fetchCompleted) {
76
+ if (!fetcherId) {
77
+ console.warn("Missing fetcher Id. Component will not render.");
78
+ return null;
79
+ } else if (!fetcherId.includes(".")) {
80
+ console.warn(
65
81
  "Invalid fetcher id. Must be in the format '<plugin_id>.<fetcher_id>'. Component will not render."
66
- ), null;
67
- else return console.warn("Missing fetcher Id. Component will not render."), null;
68
- else
69
- return null;
70
- return E ? ((z = w[a]) == null ? void 0 : z.format) === "status" ? /* @__PURE__ */ t(
71
- I,
72
- {
73
- variant: "rounded",
74
- height: "32px",
75
- width: "150px",
76
- ...i,
77
- sx: [
78
- { borderRadius: "16px" },
79
- ...Array.isArray(i == null ? void 0 : i.sx) ? i == null ? void 0 : i.sx : [i == null ? void 0 : i.sx]
80
- ]
82
+ );
83
+ return null;
84
+ } else if (!(fetcherId in fetchers)) {
85
+ console.warn("Fetcher ID does not correspond to a registered fetcher. Component will not render.");
86
+ return null;
81
87
  }
82
- ) : /* @__PURE__ */ t(I, { variant: "rounded", height: "325px", width: "300px", ...i }) : e ? e.outcome === "failure" && w[a].format === "status" ? /* @__PURE__ */ t(
83
- q,
84
- {
85
- icon: /* @__PURE__ */ t(J, { title: e.error, children: /* @__PURE__ */ t(H, { icon: "mdi:information-outline", fontSize: "1.25rem" }) }),
86
- label: m("error"),
87
- color: "error",
88
- ...v
88
+ } else {
89
+ return null;
90
+ }
91
+ if (loading) {
92
+ if (((_a = fetchers[fetcherId]) == null ? void 0 : _a.format) === "status") {
93
+ return /* @__PURE__ */ jsx(
94
+ Skeleton,
95
+ {
96
+ variant: "rounded",
97
+ height: "32px",
98
+ width: "150px",
99
+ ...skeletonProps,
100
+ sx: [
101
+ { borderRadius: "16px" },
102
+ ...Array.isArray(skeletonProps == null ? void 0 : skeletonProps.sx) ? skeletonProps == null ? void 0 : skeletonProps.sx : [skeletonProps == null ? void 0 : skeletonProps.sx]
103
+ ]
104
+ }
105
+ );
106
+ } else {
107
+ return /* @__PURE__ */ jsx(Skeleton, { variant: "rounded", height: "325px", width: "300px", ...skeletonProps });
89
108
  }
90
- ) : e.outcome === "pending" ? /* @__PURE__ */ l(f, { flex: 1, sx: { pt: 2, alignItems: "center" }, spacing: 1, children: [
91
- ((M = e.data) == null ? void 0 : M.summary) && /* @__PURE__ */ t(K, { variant: "caption", children: e.data.summary }),
92
- /* @__PURE__ */ t(
93
- Q,
109
+ }
110
+ if (!result) return null;
111
+ if (result.outcome === "failure" && fetchers[fetcherId].format === "status") {
112
+ return /* @__PURE__ */ jsx(
113
+ Chip,
94
114
  {
95
- variant: (T = e.data) != null && T.progress ? "determinate" : "indeterminate",
96
- value: ((j = e.data) == null ? void 0 : j.progress) * 100,
97
- sx: { maxWidth: 500, width: "100%", borderRadius: d.shape.borderRadius }
115
+ icon: /* @__PURE__ */ jsx(Tooltip, { title: result.error, children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:information-outline", fontSize: "1.25rem" }) }),
116
+ label: t("error"),
117
+ color: "error",
118
+ ...chipProps
98
119
  }
99
- )
100
- ] }) : e.format === "status" ? /* @__PURE__ */ t(oe, { data: e.data, ...v }) : /* @__PURE__ */ t(
101
- U,
120
+ );
121
+ }
122
+ if (result.outcome === "pending") {
123
+ return /* @__PURE__ */ jsxs(Stack, { flex: 1, sx: { pt: 2, alignItems: "center" }, spacing: 1, children: [
124
+ ((_b = result.data) == null ? void 0 : _b.summary) && /* @__PURE__ */ jsx(Typography, { variant: "caption", children: result.data.summary }),
125
+ /* @__PURE__ */ jsx(
126
+ LinearProgress,
127
+ {
128
+ variant: ((_c = result.data) == null ? void 0 : _c.progress) ? "determinate" : "indeterminate",
129
+ value: ((_d = result.data) == null ? void 0 : _d.progress) * 100,
130
+ sx: { maxWidth: 500, width: "100%", borderRadius: theme.shape.borderRadius }
131
+ }
132
+ )
133
+ ] });
134
+ }
135
+ if (result.format === "status") {
136
+ return /* @__PURE__ */ jsx(StatusChip, { data: result.data, ...chipProps });
137
+ }
138
+ return /* @__PURE__ */ jsx(
139
+ Paper,
102
140
  {
103
- ...n,
141
+ ...paperProps,
104
142
  sx: [
105
143
  {
106
144
  p: 1,
@@ -109,16 +147,16 @@ const ae = p.memo(
109
147
  width: "100%",
110
148
  minWidth: "300px"
111
149
  },
112
- ...Array.isArray(n == null ? void 0 : n.sx) ? n == null ? void 0 : n.sx : [n == null ? void 0 : n.sx]
150
+ ...Array.isArray(paperProps == null ? void 0 : paperProps.sx) ? paperProps == null ? void 0 : paperProps.sx : [paperProps == null ? void 0 : paperProps.sx]
113
151
  ],
114
- children: /* @__PURE__ */ l(
115
- f,
152
+ children: /* @__PURE__ */ jsxs(
153
+ Stack,
116
154
  {
117
155
  sx: {
118
156
  "& > img": {
119
157
  borderRadius: "3px",
120
158
  cursor: "zoom-in",
121
- transition: d.transitions.create("border-color", { duration: d.transitions.duration.shortest }),
159
+ transition: theme.transitions.create("border-color", { duration: theme.transitions.duration.shortest }),
122
160
  border: "3px solid transparent",
123
161
  "&:hover": {
124
162
  borderColor: "primary.main"
@@ -126,64 +164,65 @@ const ae = p.memo(
126
164
  }
127
165
  },
128
166
  children: [
129
- e.outcome === "failure" && /* @__PURE__ */ t("code", { style: { color: d.palette.error.main }, children: /* @__PURE__ */ t("pre", { style: { marginTop: 0, marginBottom: 0 }, children: e.error }) }),
130
- e.format === "markdown" && /* @__PURE__ */ t(ie, { md: e.data }),
131
- e.format === "image" && /* @__PURE__ */ t("img", { src: e.data.image, alt: e.data.alt, ...W, onClick: () => _(!0) }),
132
- e.format === "json" && /* @__PURE__ */ t(X, { sx: { ".react-json-view": { backgroundColor: "transparent !important" } }, children: /* @__PURE__ */ t(Z, { data: e.data }) }),
133
- e.format === "graph" && /* @__PURE__ */ t(re, { graph: e.data, sx: { minHeight: "600px" } }),
134
- /* @__PURE__ */ t(L, {}),
135
- /* @__PURE__ */ l(
136
- f,
167
+ result.outcome === "failure" && /* @__PURE__ */ jsx("code", { style: { color: theme.palette.error.main }, children: /* @__PURE__ */ jsx("pre", { style: { marginTop: 0, marginBottom: 0 }, children: result.error }) }),
168
+ result.format === "markdown" && /* @__PURE__ */ jsx(Markdown, { md: result.data }),
169
+ result.format === "image" && /* @__PURE__ */ jsx("img", { src: result.data.image, alt: result.data.alt, ...imageProps, onClick: () => setShowPreview(true) }),
170
+ result.format === "json" && /* @__PURE__ */ jsx(Box, { sx: { ".react-json-view": { backgroundColor: "transparent !important" } }, children: /* @__PURE__ */ jsx(JSONViewer, { data: result.data }) }),
171
+ result.format === "graph" && /* @__PURE__ */ jsx(Graph, { graph: result.data, sx: { minHeight: "600px" } }),
172
+ /* @__PURE__ */ jsx(FlexOne, {}),
173
+ /* @__PURE__ */ jsxs(
174
+ Stack,
137
175
  {
138
176
  direction: "row",
139
177
  spacing: 1,
140
- ...o,
178
+ ...stackProps,
141
179
  sx: [
142
180
  {
143
- py: d.spacing(0.5),
181
+ py: theme.spacing(0.5),
144
182
  display: "flex",
145
183
  alignItems: "center"
146
184
  },
147
- ...Array.isArray(o == null ? void 0 : o.sx) ? o == null ? void 0 : o.sx : [o == null ? void 0 : o.sx]
185
+ ...Array.isArray(stackProps == null ? void 0 : stackProps.sx) ? stackProps == null ? void 0 : stackProps.sx : [stackProps == null ? void 0 : stackProps.sx]
148
186
  ],
149
187
  children: [
150
- /* @__PURE__ */ t(S, { icon: "ic:baseline-landscape", color: "primary", fontSize: "small" }),
151
- /* @__PURE__ */ t(
152
- J,
188
+ /* @__PURE__ */ jsx(Iconified, { icon: "ic:baseline-landscape", color: "primary", fontSize: "small" }),
189
+ /* @__PURE__ */ jsx(
190
+ Tooltip,
153
191
  {
154
- title: /* @__PURE__ */ l(f, { spacing: 0.5, children: [
155
- /* @__PURE__ */ l("span", { children: [
156
- m("type"),
192
+ title: /* @__PURE__ */ jsxs(Stack, { spacing: 0.5, children: [
193
+ /* @__PURE__ */ jsxs("span", { children: [
194
+ t("type"),
157
195
  ": ",
158
- h
196
+ type
159
197
  ] }),
160
- /* @__PURE__ */ l("span", { children: [
161
- m("value"),
198
+ /* @__PURE__ */ jsxs("span", { children: [
199
+ t("value"),
162
200
  ": ",
163
- x
201
+ value
164
202
  ] }),
165
- /* @__PURE__ */ l("span", { children: [
166
- m("classification"),
203
+ /* @__PURE__ */ jsxs("span", { children: [
204
+ t("classification"),
167
205
  ": ",
168
- g ?? "N/A"
206
+ classification ?? "N/A"
169
207
  ] })
170
208
  ] }),
171
- children: /* @__PURE__ */ t(S, { icon: "ic:outline-info", fontSize: "small" })
209
+ children: /* @__PURE__ */ jsx(Iconified, { icon: "ic:outline-info", fontSize: "small" })
172
210
  }
173
211
  ),
174
- /* @__PURE__ */ t(L, {}),
175
- e.link && /* @__PURE__ */ t(Y, { size: "small", component: "a", href: e.link, children: /* @__PURE__ */ t(S, { icon: "ic:baseline-open-in-new", fontSize: "small" }) })
212
+ /* @__PURE__ */ jsx(FlexOne, {}),
213
+ result.link && /* @__PURE__ */ jsx(IconButton, { size: "small", component: "a", href: result.link, children: /* @__PURE__ */ jsx(Iconified, { icon: "ic:baseline-open-in-new", fontSize: "small" }) })
176
214
  ]
177
215
  }
178
216
  ),
179
- /* @__PURE__ */ t(ne, { ...O, open: G, result: e, onClose: () => _(!1) })
217
+ /* @__PURE__ */ jsx(PreviewModal, { ...previewProps, open: showPreview, result, onClose: () => setShowPreview(false) })
180
218
  ]
181
219
  }
182
220
  )
183
221
  }
184
- ) : null;
222
+ );
185
223
  }
186
- ), be = ee(ae);
224
+ );
225
+ const Fetcher_default = memo(Fetcher);
187
226
  export {
188
- be as default
227
+ Fetcher_default as default
189
228
  };
@@ -1,19 +1,22 @@
1
- import { jsx as m } from "react/jsx-runtime";
2
- import { Modal as n, Paper as f } from "@mui/material";
3
- import { memo as l } from "react";
4
- const c = ({ result: i, onClose: d, open: x = !1, ...a }) => /* @__PURE__ */ m(
5
- n,
6
- {
7
- open: x,
8
- sx: [
9
- { display: "flex", alignItems: "center", justifyContent: "center" },
10
- ...Array.isArray(a == null ? void 0 : a.sx) ? a == null ? void 0 : a.sx : [a == null ? void 0 : a.sx]
11
- ],
12
- onClose: d,
13
- ...a,
14
- children: /* @__PURE__ */ m(f, { sx: { maxHeight: "90%", maxWidth: "90%", p: 2, overflow: "auto" }, children: (i == null ? void 0 : i.format) === "image" && /* @__PURE__ */ m("img", { src: i.data.image, alt: i.data.alt, style: { maxWidth: "100%" } }) })
15
- }
16
- ), t = l(c);
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { Modal, Paper } from "@mui/material";
3
+ import { memo } from "react";
4
+ const PreviewModal = ({ result, onClose, open = false, ...otherProps }) => {
5
+ return /* @__PURE__ */ jsx(
6
+ Modal,
7
+ {
8
+ open,
9
+ sx: [
10
+ { display: "flex", alignItems: "center", justifyContent: "center" },
11
+ ...Array.isArray(otherProps == null ? void 0 : otherProps.sx) ? otherProps == null ? void 0 : otherProps.sx : [otherProps == null ? void 0 : otherProps.sx]
12
+ ],
13
+ onClose,
14
+ ...otherProps,
15
+ children: /* @__PURE__ */ jsx(Paper, { sx: { maxHeight: "90%", maxWidth: "90%", p: 2, overflow: "auto" }, children: (result == null ? void 0 : result.format) === "image" && /* @__PURE__ */ jsx("img", { src: result.data.image, alt: result.data.alt, style: { maxWidth: "100%" } }) })
16
+ }
17
+ );
18
+ };
19
+ const PreviewModal$1 = memo(PreviewModal);
17
20
  export {
18
- t as default
21
+ PreviewModal$1 as default
19
22
  };
@@ -1,25 +1,29 @@
1
- import { jsx as l } from "react/jsx-runtime";
2
- import { I as r } from "../../iconify-BBckr5AQ.js";
3
- import { useTheme as i, Chip as x } from "@mui/material";
4
- import { ClueComponentContext as g } from "../../hooks/ClueComponentContext.js";
5
- import { u as C } from "../../index-Dj5C04IX.js";
6
- const S = ({ data: e, ...n }) => {
7
- var t;
8
- const m = i(), { i18n: f, t: u } = C(g, (o) => o.i18next);
9
- return e != null && e.empty ? null : /* @__PURE__ */ l(
10
- x,
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { I as Icon } from "../../iconify-CXMreGTg.js";
3
+ import { useTheme, Chip } from "@mui/material";
4
+ import { ClueComponentContext } from "../../hooks/ClueComponentContext.js";
5
+ import { u as useContextSelector } from "../../index-AMfoEg_6.js";
6
+ const StatusChip = ({ data, ...chipProps }) => {
7
+ var _a;
8
+ const theme = useTheme();
9
+ const { i18n, t } = useContextSelector(ClueComponentContext, (ctx) => ctx.i18next);
10
+ if (data == null ? void 0 : data.empty) {
11
+ return null;
12
+ }
13
+ return /* @__PURE__ */ jsx(
14
+ Chip,
11
15
  {
12
- icon: e.icon && /* @__PURE__ */ l(r, { icon: e.icon, fontSize: "1.25rem" }),
13
- deleteIcon: /* @__PURE__ */ l("a", { href: e.link, rel: "noreferrer", target: "_blank", style: { display: "flex", alignItems: "center" }, children: /* @__PURE__ */ l(r, { icon: "mdi:open-in-new", color: m.palette.text.primary, fontSize: "1.25rem" }) }),
14
- ...n,
15
- label: ((t = e.labels.find((o) => o.language === f.language) ?? e.labels[0]) == null ? void 0 : t.label) ?? u("unknown"),
16
+ icon: data.icon && /* @__PURE__ */ jsx(Icon, { icon: data.icon, fontSize: "1.25rem" }),
17
+ deleteIcon: /* @__PURE__ */ jsx("a", { href: data.link, rel: "noreferrer", target: "_blank", style: { display: "flex", alignItems: "center" }, children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:open-in-new", color: theme.palette.text.primary, fontSize: "1.25rem" }) }),
18
+ ...chipProps,
19
+ label: ((_a = data.labels.find((label) => label.language === i18n.language) ?? data.labels[0]) == null ? void 0 : _a.label) ?? t("unknown"),
16
20
  sx: [
17
- ...Array.isArray(n == null ? void 0 : n.sx) ? n == null ? void 0 : n.sx : [n == null ? void 0 : n.sx],
18
- e.color && { backgroundColor: e.color }
21
+ ...Array.isArray(chipProps == null ? void 0 : chipProps.sx) ? chipProps == null ? void 0 : chipProps.sx : [chipProps == null ? void 0 : chipProps.sx],
22
+ data.color && { backgroundColor: data.color }
19
23
  ]
20
24
  }
21
25
  );
22
26
  };
23
27
  export {
24
- S as default
28
+ StatusChip as default
25
29
  };
@@ -1,13 +1,15 @@
1
- import { ClueGroupContext as s } from "../../hooks/ClueGroupContext.js";
2
- import { i as u } from "../../utils-DmwSUrum.js";
3
- import { memo as a, useEffect as i } from "react";
4
- import { u as l } from "../../index-Dj5C04IX.js";
5
- const n = ({ children: f, entry: t, selected: e = !1 }) => {
6
- const r = l(s, (o) => o == null ? void 0 : o.setValues);
7
- return i(() => {
8
- r == null || r((o) => [...o.filter((m) => !u(m, t)), ...e ? [t] : []]);
9
- }, [t, e, r]), f;
10
- }, q = a(n);
1
+ import { ClueGroupContext } from "../../hooks/ClueGroupContext.js";
2
+ import { i as isEqual } from "../../utils-HmNPuoDB.js";
3
+ import { memo, useEffect } from "react";
4
+ import { u as useContextSelector } from "../../index-AMfoEg_6.js";
5
+ const Entry = ({ children, entry, selected = false }) => {
6
+ const setValues = useContextSelector(ClueGroupContext, (ctx) => ctx == null ? void 0 : ctx.setValues);
7
+ useEffect(() => {
8
+ setValues == null ? void 0 : setValues((_values) => [..._values.filter((value) => !isEqual(value, entry)), ...selected ? [entry] : []]);
9
+ }, [entry, selected, setValues]);
10
+ return children;
11
+ };
12
+ const Entry_default = memo(Entry);
11
13
  export {
12
- q as default
14
+ Entry_default as default
13
15
  };