@cccsaurora/clue-ui 1.0.4 → 1.1.0-dev.100

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 (201) hide show
  1. package/ActionForm-ByeOzpc4.js +555 -0
  2. package/AnnotationDetails-DknbKDyl.js +175 -0
  3. package/AnnotationPreview-CQwKs8se.js +188 -0
  4. package/ClueEnrichContext-6NJfXpUB.js +536 -0
  5. package/FlexOne-BSYAhhtG.js +9 -0
  6. package/_Map-kgDsDYxq.js +64 -0
  7. package/_MapCache-DabaaWfq.js +161 -0
  8. package/_Uint8Array-BlVVH1tp.js +129 -0
  9. package/_baseAssignValue-CNbcU6Nb.js +25 -0
  10. package/_baseClone-D3a8Pa4T.js +284 -0
  11. package/_baseExtremum-B1o1zHjR.js +33 -0
  12. package/_baseFlatten-D4huXoEI.js +92 -0
  13. package/_baseGet-BSK_nnoz.js +109 -0
  14. package/_baseIsEqual-B5xLoweL.js +238 -0
  15. package/_baseIteratee-p6Nj07-n.js +126 -0
  16. package/_baseSlice-GAv_YFTT.js +20 -0
  17. package/_baseSum-D0WC1dN0.js +13 -0
  18. package/_baseUniq-CpupKWcL.js +89 -0
  19. package/_commonjsHelpers-DWwsNxpa.js +8 -0
  20. package/_createAggregator-BpVy5xMi.js +63 -0
  21. package/_getPrototype-D1LAdQKO.js +5 -0
  22. package/_getTag-D3ToyefI.js +126 -0
  23. package/api/lookup/index.d.ts +1 -1
  24. package/api/lookup/types.d.ts +2 -2
  25. package/api/lookup/types_detection.d.ts +2 -2
  26. package/cloneDeep-CjP5k9zW.js +8 -0
  27. package/components/AnnotationBody.js +49 -34
  28. package/components/AnnotationDetailPopover.js +36 -30
  29. package/components/AnnotationDetails.js +6 -6
  30. package/components/AnnotationEntry.js +50 -47
  31. package/components/AnnotationPreview.js +5 -5
  32. package/components/ClassificationChip.d.ts +2 -1
  33. package/components/ClassificationChip.js +44 -23
  34. package/components/CountBadge.js +31 -26
  35. package/components/EnrichedCard.js +110 -92
  36. package/components/EnrichedChip.js +130 -111
  37. package/components/EnrichedTypography.d.ts +1 -1
  38. package/components/EnrichedTypography.js +133 -112
  39. package/components/ErrorBoundary.js +28 -24
  40. package/components/RetryFailedEnrichments.js +10 -9
  41. package/components/SourcePicker.js +57 -49
  42. package/components/actions/ActionForm.js +4 -4
  43. package/components/actions/ExecutePopover.js +64 -50
  44. package/components/actions/ResultModal.js +12 -41
  45. package/components/actions/form/schemaAdapter.js +40 -20
  46. package/components/display/graph/ExpandMoreButton.js +10 -10
  47. package/components/display/graph/elements/NodeCard.js +114 -76
  48. package/components/display/graph/elements/NodeTag.js +15 -13
  49. package/components/display/graph/index.js +267 -210
  50. package/components/display/graph/visualizations/Leaf.js +88 -69
  51. package/components/display/graph/visualizations/cloud/index.js +98 -81
  52. package/components/display/graph/visualizations/icons/BaseIcon.js +26 -21
  53. package/components/display/graph/visualizations/icons/BugIcon.js +12 -12
  54. package/components/display/graph/visualizations/icons/HostIcon.js +12 -12
  55. package/components/display/graph/visualizations/icons/NetworkIcon.js +12 -12
  56. package/components/display/graph/visualizations/icons/ProcessIcon.js +12 -12
  57. package/components/display/graph/visualizations/icons/TargetIcon.js +13 -13
  58. package/components/display/graph/visualizations/icons/index.js +14 -13
  59. package/components/display/graph/visualizations/panels/NodePanel.js +10 -8
  60. package/components/display/graph/visualizations/tree/BundleLine.js +108 -81
  61. package/components/display/graph/visualizations/tree/Triangle.js +13 -13
  62. package/components/display/graph/visualizations/tree/index.js +407 -305
  63. package/components/display/icons/Iconified.js +27 -12
  64. package/components/display/json/index.js +4 -4
  65. package/components/display/markdown/index.js +8696 -5668
  66. package/components/enrichment/EnrichPopover.js +55 -47
  67. package/components/fetchers/Fetcher.js +123 -95
  68. package/components/fetchers/PreviewModal.js +20 -17
  69. package/components/fetchers/StatusChip.js +21 -18
  70. package/components/group/Entry.js +13 -11
  71. package/components/group/Group.js +13 -10
  72. package/components/group/GroupControl.js +78 -66
  73. package/components/stats/QueryStatus.js +44 -31
  74. package/countBy-C69WslUA.js +14 -0
  75. package/data/event.js +6 -4
  76. package/database/index.js +2 -2
  77. package/debounce-bV0h5FC5.js +92 -0
  78. package/en/translation.json +39 -59
  79. package/fr/translation.json +37 -56
  80. package/get-D3C3lEU3.js +8 -0
  81. package/groupBy-DC2oOuBN.js +14 -0
  82. package/hooks/ClueActionContext.d.ts +26 -0
  83. package/hooks/ClueActionContext.js +8 -7
  84. package/hooks/ClueComponentContext.js +29 -23
  85. package/hooks/ClueConfigProvider.js +14 -12
  86. package/hooks/ClueDatabaseContext.js +19 -13
  87. package/hooks/ClueEnrichContext.js +8 -8
  88. package/hooks/ClueEnrichProps.d.ts +3 -1
  89. package/hooks/ClueFetcherContext.js +74 -46
  90. package/hooks/ClueGroupContext.js +17 -14
  91. package/hooks/CluePopupContext.js +5 -5
  92. package/hooks/ClueProvider.js +12 -10
  93. package/hooks/selectors.d.ts +4 -5
  94. package/hooks/selectors.js +21 -11
  95. package/hooks/useActionResult.d.ts +14 -0
  96. package/hooks/useActionResult.js +5 -0
  97. package/hooks/useAnnotations.js +45 -29
  98. package/hooks/useClue.js +6 -4
  99. package/hooks/useClueActions.d.ts +1 -1
  100. package/hooks/useClueActions.js +3 -3
  101. package/hooks/useClueConfig.d.ts +2 -1
  102. package/hooks/useClueConfig.js +6 -6
  103. package/hooks/useClueTypeConfig.js +3 -3
  104. package/hooks/useComparator.js +722 -435
  105. package/hooks/useErrors.js +22 -18
  106. package/hooks/useMyHighlights.js +66 -36
  107. package/hooks/useMyLocalStorage.d.ts +4 -3
  108. package/hooks/useMyLocalStorage.js +66 -46
  109. package/iconify-CXMreGTg.js +1782 -0
  110. package/icons/Action.js +66 -49
  111. package/icons/Assessment.js +84 -68
  112. package/icons/Context.js +78 -61
  113. package/icons/Opinion.js +77 -65
  114. package/icons/iconMap.js +2 -2
  115. package/identity-CPGTqrE4.js +6 -0
  116. package/index-BDVjGvMI.js +696 -0
  117. package/index-BbPn6-Mw.js +15750 -0
  118. package/index-Bi21Wb23.js +465 -0
  119. package/index-C3lkTD69.js +1172 -0
  120. package/index-CC12Ux-9.js +17654 -0
  121. package/isEmpty-BQkZubqU.js +29 -0
  122. package/isNil-CIubwp4T.js +6 -0
  123. package/isObject-FTY-5JQX.js +7 -0
  124. package/isObjectLike-OAgjjZye.js +48 -0
  125. package/isSymbol-Xd2FsJyp.js +8 -0
  126. package/last-CUCl67Im.js +7 -0
  127. package/main.js +62 -62
  128. package/package.json +3 -3
  129. package/sortBy-B-UKp4GT.js +100 -0
  130. package/sumBy-MYkDPHZL.js +8 -0
  131. package/text/Frequency.js +42 -23
  132. package/toFinite-Bc55msYj.js +16 -0
  133. package/toNumber-DPxy1FBy.js +39 -0
  134. package/types/RunningActionData.d.ts +4 -3
  135. package/types/action.d.ts +10 -1
  136. package/useClueTypeConfig-XvGvIw2S.js +3201 -0
  137. package/utils/chain.js +91 -64
  138. package/utils/classificationParser.js +519 -256
  139. package/utils/constants.js +35 -10
  140. package/utils/graph.js +72 -45
  141. package/utils/hashUtil.js +7 -7
  142. package/utils/line.js +131 -81
  143. package/utils/loggerUtil.d.ts +1 -1
  144. package/utils/loggerUtil.js +6 -4
  145. package/utils/sessionStorage.js +41 -29
  146. package/utils/time.d.ts +3 -0
  147. package/utils/time.js +536 -0
  148. package/utils/utils.js +10 -9
  149. package/utils/window.js +21 -10
  150. package/utils-7OtvGnmf.js +200 -0
  151. package/ActionForm-Sw7D-KOE.js +0 -340
  152. package/AnnotationDetails-BoX61_IF.js +0 -160
  153. package/AnnotationPreview-dYinoSA9.js +0 -140
  154. package/ClueEnrichContext-CvCIPOMC.js +0 -412
  155. package/FlexOne-BXWFOd1T.js +0 -6
  156. package/_Map-DXNg_Z-q.js +0 -54
  157. package/_MapCache-Cu25RRDU.js +0 -129
  158. package/_Uint8Array-DlJCtTvG.js +0 -102
  159. package/_baseAssignValue-CUmzp727.js +0 -20
  160. package/_baseClone-BlMmRXeX.js +0 -208
  161. package/_baseExtremum-P_0akmCi.js +0 -27
  162. package/_baseFlatten-CN7vDNEQ.js +0 -72
  163. package/_baseGet-Dgf6_xCm.js +0 -80
  164. package/_baseIsEqual-Cpjtfb3Q.js +0 -173
  165. package/_baseIteratee-CP1bocOX.js +0 -95
  166. package/_baseSlice-M5RKzt1A.js +0 -10
  167. package/_baseSum-wEbgNeUs.js +0 -10
  168. package/_baseUniq-tMFmk80M.js +0 -61
  169. package/_commonjsHelpers-C6fGbg64.js +0 -6
  170. package/_createAggregator-B4Cav8ZM.js +0 -53
  171. package/_getPrototype-CHAFQYL_.js +0 -5
  172. package/_getTag-BV_UoLYG.js +0 -90
  173. package/cloneDeep-BPVpFBzJ.js +0 -8
  174. package/components/display/markdown/DynamicTabs.d.ts +0 -8
  175. package/components/display/markdown/DynamicTabs.js +0 -21
  176. package/components/display/markdown/markdownPlugins/tabs.d.ts +0 -3
  177. package/components/display/markdown/markdownPlugins/tabs.js +0 -4
  178. package/countBy-DOutsa_w.js +0 -8
  179. package/debounce-DryYcbJ4.js +0 -56
  180. package/get-Bow1vKwx.js +0 -8
  181. package/groupBy-BheQYl6f.js +0 -8
  182. package/iconify-BBckr5AQ.js +0 -1263
  183. package/identity-ByMq8VxU.js +0 -6
  184. package/index-CnaCBNrd.js +0 -358
  185. package/index-E7g8cRyW.js +0 -568
  186. package/index-V7wwd05F.js +0 -975
  187. package/index-p5_wX7q1.js +0 -11729
  188. package/index-pQg5VUAZ.js +0 -12734
  189. package/isEmpty-g47Qir2A.js +0 -21
  190. package/isNil-CjWwlQS3.js +0 -6
  191. package/isObject-B53jY8Qg.js +0 -7
  192. package/isObjectLike-BatpeCIi.js +0 -29
  193. package/isSymbol-C3_SC0Qp.js +0 -8
  194. package/last-7CdUxN0r.js +0 -7
  195. package/sortBy-ITdmD17L.js +0 -79
  196. package/sumBy-DxJUU2E8.js +0 -8
  197. package/tabs-CgADNA57.js +0 -195
  198. package/toFinite-BMy6GObD.js +0 -14
  199. package/toNumber-YVhnnJv4.js +0 -31
  200. package/useClueTypeConfig-CneP98N_.js +0 -2260
  201. package/utils-CD0rFIFU.js +0 -2704
package/icons/Action.js CHANGED
@@ -1,73 +1,90 @@
1
- import { jsx as e, jsxs as z } from "react/jsx-runtime";
2
- import { I } from "../iconify-BBckr5AQ.js";
3
- import { useTheme as j, Stack as i, Divider as l, Typography as C } from "@mui/material";
4
- import R from "../components/CountBadge.js";
5
- import { C as v } from "../AnnotationPreview-dYinoSA9.js";
6
- import { u as B } from "../ActionForm-Sw7D-KOE.js";
7
- import { g as D } from "../groupBy-BheQYl6f.js";
8
- import { memo as L, useRef as A, useMemo as s, useEffect as O } from "react";
9
- import { u as M } from "../index-E7g8cRyW.js";
10
- const k = ({ result: o }) => /* @__PURE__ */ z(i, { p: 1, children: [
11
- /* @__PURE__ */ e(C, { variant: "body1", children: o.action.name }),
12
- /* @__PURE__ */ e(C, { variant: "caption", color: "text.secondary", children: o.summary })
13
- ] }), b = ({ value: o, counters: f = !0, disableTooltip: c = !1, ...d }) => {
14
- const p = j(), h = M(v, (t) => t.showInfo), a = M(v, (t) => t.closeInfo), y = A(), g = A(), { getActionResults: x } = B(), n = s(
15
- () => x(o.type, o.value, o.classification),
16
- [x, o.classification, o.type, o.value]
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { I as Icon } from "../iconify-CXMreGTg.js";
3
+ import { useTheme, Stack, Divider, Typography } from "@mui/material";
4
+ import CountBadge from "../components/CountBadge.js";
5
+ import { C as CluePopupContext } from "../AnnotationPreview-CQwKs8se.js";
6
+ import { u as useClueActions } from "../ActionForm-ByeOzpc4.js";
7
+ import { g as groupBy } from "../groupBy-DC2oOuBN.js";
8
+ import { memo, useRef, useMemo, useEffect } from "react";
9
+ import { u as useContextSelector } from "../index-BDVjGvMI.js";
10
+ const ResultDetails = ({ result }) => {
11
+ return /* @__PURE__ */ jsxs(Stack, { p: 1, children: [
12
+ /* @__PURE__ */ jsx(Typography, { variant: "body1", children: result.action.name }),
13
+ /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "text.secondary", children: result.summary })
14
+ ] });
15
+ };
16
+ const ActionIcon = ({ value, counters = true, disableTooltip = false, ...otherProps }) => {
17
+ const theme = useTheme();
18
+ const showInfo = useContextSelector(CluePopupContext, (state) => state.showInfo);
19
+ const closeInfo = useContextSelector(CluePopupContext, (state) => state.closeInfo);
20
+ const successAnchorRef = useRef();
21
+ const failureAnchorRef = useRef();
22
+ const { getActionResults } = useClueActions();
23
+ const actionResults = useMemo(
24
+ () => getActionResults(value.type, value.value, value.classification),
25
+ [getActionResults, value.classification, value.type, value.value]
17
26
  );
18
- O(() => {
19
- c && a("context", o);
20
- }, [c]);
21
- const [m, u] = s(() => {
22
- const t = D(n, (r) => r.outcome);
23
- return [t.success ?? [], t.failure ?? []];
24
- }, [n]), S = s(() => {
25
- const t = m.map((r) => /* @__PURE__ */ e(k, { result: r }, r.actionId));
26
- return /* @__PURE__ */ e(i, { spacing: 1, divider: /* @__PURE__ */ e(l, { flexItem: !0, orientation: "horizontal" }), children: t });
27
- }, [m]), w = s(() => {
28
- const t = u.map((r) => /* @__PURE__ */ e(k, { result: r }, r.summary));
29
- return /* @__PURE__ */ e(i, { spacing: 1, divider: /* @__PURE__ */ e(l, { flexItem: !0, orientation: "horizontal" }), children: t });
30
- }, [u]);
31
- return (n == null ? void 0 : n.length) < 1 ? null : /* @__PURE__ */ z(i, { direction: "row", spacing: 1, children: [
32
- /* @__PURE__ */ e(l, { flexItem: !0, orientation: "vertical" }),
33
- m.length > 0 && /* @__PURE__ */ e(
27
+ useEffect(() => {
28
+ if (disableTooltip) {
29
+ closeInfo("context", value);
30
+ }
31
+ }, [disableTooltip]);
32
+ const [successes, failures] = useMemo(() => {
33
+ const outcomes = groupBy(actionResults, (result) => result.outcome);
34
+ return [outcomes.success ?? [], outcomes.failure ?? []];
35
+ }, [actionResults]);
36
+ const successContent = useMemo(() => {
37
+ const entries = successes.map((result) => /* @__PURE__ */ jsx(ResultDetails, { result }, result.actionId));
38
+ return /* @__PURE__ */ jsx(Stack, { spacing: 1, divider: /* @__PURE__ */ jsx(Divider, { flexItem: true, orientation: "horizontal" }), children: entries });
39
+ }, [successes]);
40
+ const failureContent = useMemo(() => {
41
+ const entries = failures.map((result) => /* @__PURE__ */ jsx(ResultDetails, { result }, result.summary));
42
+ return /* @__PURE__ */ jsx(Stack, { spacing: 1, divider: /* @__PURE__ */ jsx(Divider, { flexItem: true, orientation: "horizontal" }), children: entries });
43
+ }, [failures]);
44
+ if ((actionResults == null ? void 0 : actionResults.length) < 1) {
45
+ return null;
46
+ }
47
+ return /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, children: [
48
+ /* @__PURE__ */ jsx(Divider, { flexItem: true, orientation: "vertical" }),
49
+ successes.length > 0 && /* @__PURE__ */ jsx(
34
50
  "span",
35
51
  {
36
- ref: y,
52
+ ref: successAnchorRef,
37
53
  style: { display: "flex" },
38
- onMouseOver: c ? void 0 : () => h("actionResults", y.current, o, { content: S }),
39
- onMouseLeave: c ? void 0 : () => a("actionResults", o),
40
- children: /* @__PURE__ */ e(R, { disabled: !f, count: n.filter((t) => t.outcome === "success").length, children: /* @__PURE__ */ e(
41
- I,
54
+ onMouseOver: disableTooltip ? void 0 : () => showInfo("actionResults", successAnchorRef.current, value, { content: successContent }),
55
+ onMouseLeave: disableTooltip ? void 0 : () => closeInfo("actionResults", value),
56
+ children: /* @__PURE__ */ jsx(CountBadge, { disabled: !counters, count: actionResults.filter((result) => result.outcome === "success").length, children: /* @__PURE__ */ jsx(
57
+ Icon,
42
58
  {
43
59
  icon: "material-symbols:bookmark-check-rounded",
44
- color: p.palette.success.main,
60
+ color: theme.palette.success.main,
45
61
  fontSize: "1.5em",
46
- ...d
62
+ ...otherProps
47
63
  }
48
64
  ) })
49
65
  }
50
66
  ),
51
- u.length > 0 && /* @__PURE__ */ e(
67
+ failures.length > 0 && /* @__PURE__ */ jsx(
52
68
  "span",
53
69
  {
54
- ref: g,
70
+ ref: failureAnchorRef,
55
71
  style: { display: "flex" },
56
- onMouseOver: c ? void 0 : () => h("actionResults", g.current, o, { content: w }),
57
- onMouseLeave: c ? void 0 : () => a("actionResults", o),
58
- children: /* @__PURE__ */ e(R, { disabled: !f, count: n.filter((t) => t.outcome === "failure").length, children: /* @__PURE__ */ e(
59
- I,
72
+ onMouseOver: disableTooltip ? void 0 : () => showInfo("actionResults", failureAnchorRef.current, value, { content: failureContent }),
73
+ onMouseLeave: disableTooltip ? void 0 : () => closeInfo("actionResults", value),
74
+ children: /* @__PURE__ */ jsx(CountBadge, { disabled: !counters, count: actionResults.filter((result) => result.outcome === "failure").length, children: /* @__PURE__ */ jsx(
75
+ Icon,
60
76
  {
61
77
  icon: "material-symbols:cancel-presentation-rounded",
62
- color: p.palette.error.main,
78
+ color: theme.palette.error.main,
63
79
  fontSize: "1.5em",
64
- ...d
80
+ ...otherProps
65
81
  }
66
82
  ) })
67
83
  }
68
84
  )
69
85
  ] });
70
- }, P = L(b);
86
+ };
87
+ const ActionIcon$1 = memo(ActionIcon);
71
88
  export {
72
- P as default
89
+ ActionIcon$1 as default
73
90
  };
@@ -1,107 +1,123 @@
1
- import { jsxs as b, jsx as s, Fragment as k } from "react/jsx-runtime";
2
- import { I as l } from "../iconify-BBckr5AQ.js";
3
- import { useTheme as j, Stack as y, Chip as I, Divider as q, Grid as C, Tooltip as A } from "@mui/material";
4
- import z from "../components/CountBadge.js";
5
- import { C as w } from "../AnnotationPreview-dYinoSA9.js";
6
- import { g as O } from "../groupBy-BheQYl6f.js";
7
- import { l as P } from "../last-7CdUxN0r.js";
8
- import { m as L, s as R } from "../sortBy-ITdmD17L.js";
9
- import { s as W } from "../sumBy-DxJUU2E8.js";
10
- import { memo as D, useRef as E, useState as F, useMemo as d, useEffect as G } from "react";
11
- import { u as S } from "../index-E7g8cRyW.js";
12
- const H = ({ annotations: u, value: i, counters: f = !0, disableTooltip: r = !1, ubiquitous: h = !1, ...v }) => {
13
- const o = j(), g = S(w, (e) => e.showInfo), x = S(w, (e) => e.closeInfo), c = E(), [$, B] = F(!1), t = d(
14
- () => u.filter((e) => (e == null ? void 0 : e.type) === "assessment" && (e == null ? void 0 : e.ubiquitous) === h),
15
- [u, h]
16
- ), m = d(
17
- () => Object.entries(O(t, "value")).map(([e, p]) => [
18
- e,
19
- W(p, "quantity")
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import { I as Icon } from "../iconify-CXMreGTg.js";
3
+ import { useTheme, Stack, Chip, Divider, Grid, Tooltip } from "@mui/material";
4
+ import CountBadge from "../components/CountBadge.js";
5
+ import { C as CluePopupContext } from "../AnnotationPreview-CQwKs8se.js";
6
+ import { g as groupBy } from "../groupBy-DC2oOuBN.js";
7
+ import { l as last } from "../last-CUCl67Im.js";
8
+ import { m as maxBy, s as sortBy } from "../sortBy-B-UKp4GT.js";
9
+ import { s as sumBy } from "../sumBy-MYkDPHZL.js";
10
+ import { memo, useRef, useState, useMemo, useEffect } from "react";
11
+ import { u as useContextSelector } from "../index-BDVjGvMI.js";
12
+ const AssessmentIcon = ({ annotations, value, counters = true, disableTooltip = false, ubiquitous = false, ...otherProps }) => {
13
+ const theme = useTheme();
14
+ const showInfo = useContextSelector(CluePopupContext, (state) => state.showInfo);
15
+ const closeInfo = useContextSelector(CluePopupContext, (state) => state.closeInfo);
16
+ const anchorRef = useRef();
17
+ const [showTooltip, setShowTooltip] = useState(false);
18
+ const assessmentAnnotations = useMemo(
19
+ () => annotations.filter((annotation) => (annotation == null ? void 0 : annotation.type) === "assessment" && (annotation == null ? void 0 : annotation.ubiquitous) === ubiquitous),
20
+ [annotations, ubiquitous]
21
+ );
22
+ const sortedAssessments = useMemo(
23
+ () => Object.entries(groupBy(assessmentAnnotations, "value")).map(([_value, _annotations]) => [
24
+ _value,
25
+ sumBy(_annotations, "quantity")
20
26
  ]),
21
- [t]
22
- ), n = d(() => L(m, P), [m]);
23
- if (G(() => {
24
- r && B(!1);
25
- }, [r]), (t == null ? void 0 : t.length) < 1)
27
+ [assessmentAnnotations]
28
+ );
29
+ const popularAssessment = useMemo(() => maxBy(sortedAssessments, last), [sortedAssessments]);
30
+ useEffect(() => {
31
+ if (disableTooltip) {
32
+ setShowTooltip(false);
33
+ }
34
+ }, [disableTooltip]);
35
+ if ((assessmentAnnotations == null ? void 0 : assessmentAnnotations.length) < 1) {
26
36
  return null;
27
- const M = {
37
+ }
38
+ const tooltipProps = {
28
39
  tooltip: {
29
40
  sx: {
30
41
  maxWidth: "500px",
31
- backgroundColor: o.palette.background.paper,
32
- border: `thin solid ${o.palette.divider}`,
42
+ backgroundColor: theme.palette.background.paper,
43
+ border: `thin solid ${theme.palette.divider}`,
33
44
  p: 1,
34
- boxShadow: o.shadows[2]
45
+ boxShadow: theme.shadows[2]
35
46
  }
36
47
  }
37
- }, a = /* @__PURE__ */ b(y, { spacing: 1, onClick: (e) => e.stopPropagation(), children: [
38
- t.length > 1 && /* @__PURE__ */ b(k, { children: [
39
- /* @__PURE__ */ s(y, { direction: "row", children: m.map(([e, p]) => /* @__PURE__ */ s(
40
- I,
48
+ };
49
+ const tooltipContent = /* @__PURE__ */ jsxs(Stack, { spacing: 1, onClick: (e) => e.stopPropagation(), children: [
50
+ assessmentAnnotations.length > 1 && /* @__PURE__ */ jsxs(Fragment, { children: [
51
+ /* @__PURE__ */ jsx(Stack, { direction: "row", children: sortedAssessments.map(([type, count]) => /* @__PURE__ */ jsx(
52
+ Chip,
41
53
  {
42
54
  size: "small",
43
55
  variant: "outlined",
44
- label: `${e}: ${p}`,
45
- icon: /* @__PURE__ */ s(
46
- l,
56
+ label: `${type}: ${count}`,
57
+ icon: /* @__PURE__ */ jsx(
58
+ Icon,
47
59
  {
48
- icon: ["trivial", "recon", "attempt", "compromise", "mitigated"].includes(e) ? "healthicons:hazardous" : "fluent-mdl2:ribbon-solid"
60
+ icon: ["trivial", "recon", "attempt", "compromise", "mitigated"].includes(type) ? "healthicons:hazardous" : "fluent-mdl2:ribbon-solid"
49
61
  }
50
62
  ),
51
- color: ["trivial", "recon", "attempt", "compromise", "mitigated"].includes(e) ? "error" : "success"
63
+ color: ["trivial", "recon", "attempt", "compromise", "mitigated"].includes(type) ? "error" : "success"
52
64
  },
53
- e
65
+ type
54
66
  )) }),
55
- /* @__PURE__ */ s(q, { orientation: "horizontal", flexItem: !0 })
67
+ /* @__PURE__ */ jsx(Divider, { orientation: "horizontal", flexItem: true })
56
68
  ] }),
57
- /* @__PURE__ */ s(
58
- C,
69
+ /* @__PURE__ */ jsx(
70
+ Grid,
59
71
  {
60
72
  sx: {
61
- mt: t.length < 2 && `${o.spacing(-0.5)} !important`,
62
- ml: `${o.spacing(-0.5)} !important`
73
+ mt: assessmentAnnotations.length < 2 && `${theme.spacing(-0.5)} !important`,
74
+ ml: `${theme.spacing(-0.5)} !important`
63
75
  },
64
- container: !0,
76
+ container: true,
65
77
  spacing: 0.5,
66
78
  maxWidth: "500px",
67
- children: R(t, "value").map((e) => /* @__PURE__ */ s(C, { item: !0, children: /* @__PURE__ */ s(
68
- I,
79
+ children: sortBy(assessmentAnnotations, "value").map((annotation) => /* @__PURE__ */ jsx(Grid, { item: true, children: /* @__PURE__ */ jsx(
80
+ Chip,
69
81
  {
70
82
  size: "small",
71
83
  variant: "outlined",
72
- label: e.analytic + (e.quantity > 1 ? ` (x${e.quantity})` : ""),
73
- icon: /* @__PURE__ */ s(
74
- l,
84
+ label: annotation.analytic + (annotation.quantity > 1 ? ` (x${annotation.quantity})` : ""),
85
+ icon: /* @__PURE__ */ jsx(
86
+ Icon,
75
87
  {
76
- icon: ["trivial", "recon", "attempt", "compromise", "mitigated"].includes(e.value) ? "healthicons:hazardous" : "fluent-mdl2:ribbon-solid"
88
+ icon: ["trivial", "recon", "attempt", "compromise", "mitigated"].includes(annotation.value) ? "healthicons:hazardous" : "fluent-mdl2:ribbon-solid"
77
89
  }
78
90
  ),
79
- color: ["trivial", "recon", "attempt", "compromise", "mitigated"].includes(e.value) ? "error" : "success"
91
+ color: ["trivial", "recon", "attempt", "compromise", "mitigated"].includes(annotation.value) ? "error" : "success"
80
92
  }
81
- ) }, e.analytic + e.value))
93
+ ) }, annotation.analytic + annotation.value))
82
94
  }
83
95
  )
84
96
  ] });
85
- return ["trivial", "recon", "attempt", "compromise", "mitigated"].includes(n[0]) ? /* @__PURE__ */ s(
86
- "span",
87
- {
88
- ref: c,
89
- style: { display: "flex" },
90
- onMouseOver: r ? void 0 : () => g("assessment", c.current, i, { content: a }),
91
- onMouseLeave: r ? void 0 : () => x("assessment", i),
92
- children: /* @__PURE__ */ s(z, { disabled: !f, color: "error", count: n[1], children: /* @__PURE__ */ s(l, { fontSize: "1.5em", ...v, icon: "healthicons:hazardous", color: o.palette.error.main }) })
93
- }
94
- ) : /* @__PURE__ */ s(
97
+ if (["trivial", "recon", "attempt", "compromise", "mitigated"].includes(popularAssessment[0])) {
98
+ return /* @__PURE__ */ jsx(
99
+ "span",
100
+ {
101
+ ref: anchorRef,
102
+ style: { display: "flex" },
103
+ onMouseOver: disableTooltip ? void 0 : () => showInfo("assessment", anchorRef.current, value, { content: tooltipContent }),
104
+ onMouseLeave: disableTooltip ? void 0 : () => closeInfo("assessment", value),
105
+ children: /* @__PURE__ */ jsx(CountBadge, { disabled: !counters, color: "error", count: popularAssessment[1], children: /* @__PURE__ */ jsx(Icon, { fontSize: "1.5em", ...otherProps, icon: "healthicons:hazardous", color: theme.palette.error.main }) })
106
+ }
107
+ );
108
+ }
109
+ return /* @__PURE__ */ jsx(
95
110
  "span",
96
111
  {
97
- ref: c,
112
+ ref: anchorRef,
98
113
  style: { display: "flex" },
99
- onMouseOver: r ? void 0 : () => g("assessment", c.current, i, { content: a }),
100
- onMouseLeave: r ? void 0 : () => x("assessment", i),
101
- children: /* @__PURE__ */ s(A, { disableInteractive: !0, componentsProps: M, open: $, title: a, children: /* @__PURE__ */ s(z, { disabled: !f, count: n[1], children: /* @__PURE__ */ s(l, { fontSize: "1.5em", ...v, icon: "fluent-mdl2:ribbon-solid", color: o.palette.success.main }) }) })
114
+ onMouseOver: disableTooltip ? void 0 : () => showInfo("assessment", anchorRef.current, value, { content: tooltipContent }),
115
+ onMouseLeave: disableTooltip ? void 0 : () => closeInfo("assessment", value),
116
+ children: /* @__PURE__ */ jsx(Tooltip, { disableInteractive: true, componentsProps: tooltipProps, open: showTooltip, title: tooltipContent, children: /* @__PURE__ */ jsx(CountBadge, { disabled: !counters, count: popularAssessment[1], children: /* @__PURE__ */ jsx(Icon, { fontSize: "1.5em", ...otherProps, icon: "fluent-mdl2:ribbon-solid", color: theme.palette.success.main }) }) })
102
117
  }
103
118
  );
104
- }, ee = D(H);
119
+ };
120
+ const AssessmentIcon$1 = memo(AssessmentIcon);
105
121
  export {
106
- ee as default
122
+ AssessmentIcon$1 as default
107
123
  };
package/icons/Context.js CHANGED
@@ -1,69 +1,86 @@
1
- import { jsx as o } from "react/jsx-runtime";
2
- import { I as w } from "../iconify-BBckr5AQ.js";
3
- import { Stack as u, Divider as z } from "@mui/material";
4
- import v from "../components/AnnotationEntry.js";
5
- import E from "../components/CountBadge.js";
6
- import M from "../components/display/icons/Iconified.js";
7
- import { C as x } from "../AnnotationPreview-dYinoSA9.js";
8
- import { g as O } from "../groupBy-BheQYl6f.js";
9
- import { memo as j, useRef as k, useMemo as h, useEffect as B } from "react";
10
- import { u as g } from "../index-E7g8cRyW.js";
11
- const R = ({
12
- annotations: l,
13
- value: c,
14
- counters: I = !0,
15
- disableTooltip: n = !1,
16
- showExtraIcon: y = !1,
17
- ubiquitous: m = !1,
18
- ...r
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { I as Icon } from "../iconify-CXMreGTg.js";
3
+ import { Stack, Divider } from "@mui/material";
4
+ import AnnotationEntry from "../components/AnnotationEntry.js";
5
+ import CountBadge from "../components/CountBadge.js";
6
+ import Iconified from "../components/display/icons/Iconified.js";
7
+ import { C as CluePopupContext } from "../AnnotationPreview-CQwKs8se.js";
8
+ import { g as groupBy } from "../groupBy-DC2oOuBN.js";
9
+ import { memo, useRef, useMemo, useEffect } from "react";
10
+ import { u as useContextSelector } from "../index-BDVjGvMI.js";
11
+ const ContextIcon = ({
12
+ annotations,
13
+ value,
14
+ counters = true,
15
+ disableTooltip = false,
16
+ showExtraIcon = false,
17
+ ubiquitous = false,
18
+ ...otherProps
19
19
  }) => {
20
- const C = g(x, (e) => e.showInfo), p = g(x, (e) => e.closeInfo), a = k(), t = h(
21
- () => l.filter((e) => e.type === "context" && e.ubiquitous === m),
22
- [l, m]
23
- ), s = h(() => t.filter((e) => e.icon), [t]);
24
- if (B(() => {
25
- n && p("context", c);
26
- }, [n]), (t == null ? void 0 : t.length) < 1)
20
+ const showInfo = useContextSelector(CluePopupContext, (state) => state.showInfo);
21
+ const closeInfo = useContextSelector(CluePopupContext, (state) => state.closeInfo);
22
+ const anchorRef = useRef();
23
+ const contextAnnotations = useMemo(
24
+ () => annotations.filter((annotation) => annotation.type === "context" && annotation.ubiquitous === ubiquitous),
25
+ [annotations, ubiquitous]
26
+ );
27
+ const additionalIcons = useMemo(
28
+ () => contextAnnotations.filter((annotation) => annotation.icon || annotation.analytic_icon),
29
+ [contextAnnotations]
30
+ );
31
+ useEffect(() => {
32
+ if (disableTooltip) {
33
+ closeInfo("context", value);
34
+ }
35
+ }, [disableTooltip]);
36
+ if ((contextAnnotations == null ? void 0 : contextAnnotations.length) < 1) {
27
37
  return null;
28
- const f = [];
29
- s.length && Object.entries(O(s, "icon")).forEach(
30
- ([e, S]) => f.push(
31
- /* @__PURE__ */ o(
32
- "span",
33
- {
34
- ref: a,
35
- style: { display: "flex" },
36
- onMouseOver: n ? void 0 : () => C("context", a.current, c, {
37
- content: /* @__PURE__ */ o(
38
- u,
38
+ }
39
+ const icons = [];
40
+ if (additionalIcons.length) {
41
+ Object.entries(groupBy(additionalIcons, (annotation) => annotation.icon || annotation.analytic_icon)).forEach(
42
+ ([icon, _annotations]) => icons.push(
43
+ /* @__PURE__ */ jsx(
44
+ "span",
45
+ {
46
+ ref: anchorRef,
47
+ style: { display: "flex" },
48
+ onMouseOver: disableTooltip ? void 0 : () => showInfo("context", anchorRef.current, value, {
49
+ content: /* @__PURE__ */ jsx(
50
+ Stack,
51
+ {
52
+ onClick: (e) => e.stopPropagation(),
53
+ spacing: 1,
54
+ divider: /* @__PURE__ */ jsx(Divider, { flexItem: true, orientation: "horizontal" }),
55
+ children: _annotations.map((annotation) => /* @__PURE__ */ jsx(AnnotationEntry, { annotation }, JSON.stringify(annotation)))
56
+ }
57
+ )
58
+ }),
59
+ onMouseLeave: disableTooltip ? void 0 : () => closeInfo("context", value),
60
+ children: /* @__PURE__ */ jsx(
61
+ Icon,
39
62
  {
40
- onClick: (i) => i.stopPropagation(),
41
- spacing: 1,
42
- divider: /* @__PURE__ */ o(z, { flexItem: !0, orientation: "horizontal" }),
43
- children: S.map((i) => /* @__PURE__ */ o(v, { annotation: i }, JSON.stringify(i)))
63
+ icon,
64
+ fontSize: otherProps.fontSize ?? "1.25em",
65
+ style: { filter: "drop-shadow(0px 0px 1px rgb(0 0 0 / 0.4))", ...otherProps.style ?? {} },
66
+ ...otherProps
44
67
  }
45
68
  )
46
- }),
47
- onMouseLeave: n ? void 0 : () => p("context", c),
48
- children: /* @__PURE__ */ o(
49
- w,
50
- {
51
- icon: e,
52
- fontSize: r.fontSize ?? "1.25em",
53
- style: { filter: "drop-shadow(0px 0px 1px rgb(0 0 0 / 0.4))", ...r.style ?? {} },
54
- ...r
55
- }
56
- )
57
- },
58
- e
69
+ },
70
+ icon
71
+ )
59
72
  )
60
- )
61
- );
62
- const d = t.length - s.length;
63
- return d > 0 && y && f.push(
64
- /* @__PURE__ */ o(E, { disabled: !I, count: d, children: /* @__PURE__ */ o(M, { icon: "ic:baseline-newspaper", style: { zIndex: 2, ...r.style ?? {} } }) }, "extra")
65
- ), /* @__PURE__ */ o(u, { direction: "row", spacing: 1, children: f });
66
- }, H = j(R);
73
+ );
74
+ }
75
+ const additionalSize = contextAnnotations.length - additionalIcons.length;
76
+ if (additionalSize > 0 && showExtraIcon) {
77
+ icons.push(
78
+ /* @__PURE__ */ jsx(CountBadge, { disabled: !counters, count: additionalSize, children: /* @__PURE__ */ jsx(Iconified, { icon: "ic:baseline-newspaper", style: { zIndex: 2, ...otherProps.style ?? {} } }) }, "extra")
79
+ );
80
+ }
81
+ return /* @__PURE__ */ jsx(Stack, { direction: "row", spacing: 1, children: icons });
82
+ };
83
+ const ContextIcon$1 = memo(ContextIcon);
67
84
  export {
68
- H as default
85
+ ContextIcon$1 as default
69
86
  };