@cccsaurora/clue-ui 0.15.0 → 1.0.0-dev.49

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 (257) hide show
  1. package/ActionForm-c5hLIfQ-.js +436 -0
  2. package/AnnotationPreview-BvNpZOP0.js +188 -0
  3. package/ClueEnrichContext-m-4vn9rz.js +518 -0
  4. package/FlexOne-BSYAhhtG.js +9 -0
  5. package/_Map-kgDsDYxq.js +64 -0
  6. package/_MapCache-DabaaWfq.js +161 -0
  7. package/_Uint8Array-BlVVH1tp.js +129 -0
  8. package/_baseAssignValue-CNbcU6Nb.js +25 -0
  9. package/_baseClone-D3a8Pa4T.js +284 -0
  10. package/_baseExtremum-B1o1zHjR.js +33 -0
  11. package/_baseFlatten-D4huXoEI.js +92 -0
  12. package/_baseGet-BSK_nnoz.js +109 -0
  13. package/_baseIsEqual-B5xLoweL.js +238 -0
  14. package/_baseIteratee-p6Nj07-n.js +126 -0
  15. package/_baseSlice-GAv_YFTT.js +20 -0
  16. package/_baseSum-D0WC1dN0.js +13 -0
  17. package/_baseUniq-CpupKWcL.js +89 -0
  18. package/_commonjsHelpers-CUmg6egw.js +6 -0
  19. package/_createAggregator-BpVy5xMi.js +63 -0
  20. package/_getPrototype-D1LAdQKO.js +5 -0
  21. package/_getTag-D3ToyefI.js +126 -0
  22. package/api/lookup/enrich.d.ts +10 -0
  23. package/api/lookup/index.d.ts +5 -0
  24. package/api/lookup/types.d.ts +5 -0
  25. package/api/lookup/types_detection.d.ts +5 -0
  26. package/cloneDeep-CjP5k9zW.js +8 -0
  27. package/components/AnnotationBody.d.ts +6 -0
  28. package/components/AnnotationBody.js +56 -0
  29. package/components/AnnotationDetailPopover.d.ts +14 -0
  30. package/components/AnnotationDetailPopover.js +61 -0
  31. package/components/AnnotationDetails.d.ts +8 -0
  32. package/components/AnnotationDetails.js +172 -0
  33. package/components/AnnotationEntry.d.ts +6 -0
  34. package/components/AnnotationEntry.js +59 -0
  35. package/components/AnnotationPreview.d.ts +14 -0
  36. package/components/AnnotationPreview.js +11 -0
  37. package/components/ClassificationChip.d.ts +11 -0
  38. package/components/ClassificationChip.js +52 -0
  39. package/components/CountBadge.d.ts +8 -0
  40. package/components/CountBadge.js +34 -0
  41. package/components/EnrichedCard.d.ts +14 -0
  42. package/components/EnrichedCard.js +162 -0
  43. package/components/EnrichedChip.d.ts +9 -0
  44. package/components/EnrichedChip.js +176 -0
  45. package/components/EnrichedTypography.d.ts +16 -0
  46. package/components/EnrichedTypography.js +178 -0
  47. package/components/ErrorBoundary.d.ts +15 -0
  48. package/components/ErrorBoundary.js +36 -0
  49. package/components/RetryFailedEnrichments.d.ts +2 -0
  50. package/components/RetryFailedEnrichments.js +13 -0
  51. package/components/SourcePicker.d.ts +2 -0
  52. package/components/SourcePicker.js +98 -0
  53. package/components/actions/ActionForm.d.ts +6 -0
  54. package/components/actions/ActionForm.js +16 -0
  55. package/components/actions/ExecutePopover.d.ts +10 -0
  56. package/components/actions/ExecutePopover.js +93 -0
  57. package/components/actions/ResultModal.d.ts +9 -0
  58. package/components/actions/ResultModal.js +46 -0
  59. package/components/actions/form/schemaAdapter.d.ts +3 -0
  60. package/components/actions/form/schemaAdapter.js +47 -0
  61. package/components/display/graph/ExpandMoreButton.d.ts +7 -0
  62. package/components/display/graph/ExpandMoreButton.js +18 -0
  63. package/components/display/graph/elements/NodeCard.d.ts +10 -0
  64. package/components/display/graph/elements/NodeCard.js +146 -0
  65. package/components/display/graph/elements/NodeTag.d.ts +9 -0
  66. package/components/display/graph/elements/NodeTag.js +17 -0
  67. package/components/display/graph/index.d.ts +9 -0
  68. package/components/display/graph/index.js +438 -0
  69. package/components/display/graph/visualizations/Leaf.d.ts +25 -0
  70. package/components/display/graph/visualizations/Leaf.js +125 -0
  71. package/components/display/graph/visualizations/cloud/index.d.ts +24 -0
  72. package/components/display/graph/visualizations/cloud/index.js +141 -0
  73. package/components/display/graph/visualizations/icons/BaseIcon.d.ts +12 -0
  74. package/components/display/graph/visualizations/icons/BaseIcon.js +37 -0
  75. package/components/display/graph/visualizations/icons/BugIcon.d.ts +5 -0
  76. package/components/display/graph/visualizations/icons/BugIcon.js +18 -0
  77. package/components/display/graph/visualizations/icons/HostIcon.d.ts +5 -0
  78. package/components/display/graph/visualizations/icons/HostIcon.js +24 -0
  79. package/components/display/graph/visualizations/icons/NetworkIcon.d.ts +5 -0
  80. package/components/display/graph/visualizations/icons/NetworkIcon.js +24 -0
  81. package/components/display/graph/visualizations/icons/ProcessIcon.d.ts +5 -0
  82. package/components/display/graph/visualizations/icons/ProcessIcon.js +18 -0
  83. package/components/display/graph/visualizations/icons/TargetIcon.d.ts +5 -0
  84. package/components/display/graph/visualizations/icons/TargetIcon.js +19 -0
  85. package/components/display/graph/visualizations/icons/index.d.ts +2 -0
  86. package/components/display/graph/visualizations/icons/index.js +16 -0
  87. package/components/display/graph/visualizations/panels/NodePanel.d.ts +8 -0
  88. package/components/display/graph/visualizations/panels/NodePanel.js +12 -0
  89. package/components/display/graph/visualizations/tree/BundleLine.d.ts +29 -0
  90. package/components/display/graph/visualizations/tree/BundleLine.js +121 -0
  91. package/components/display/graph/visualizations/tree/Triangle.d.ts +9 -0
  92. package/components/display/graph/visualizations/tree/Triangle.js +26 -0
  93. package/components/display/graph/visualizations/tree/index.d.ts +36 -0
  94. package/components/display/graph/visualizations/tree/index.js +485 -0
  95. package/components/display/graph/visualizations/tree/types.d.ts +11 -0
  96. package/components/display/graph/visualizations/tree/types.js +1 -0
  97. package/components/display/icons/Iconified.d.ts +9 -0
  98. package/components/display/icons/Iconified.js +29 -0
  99. package/components/display/json/index.d.ts +14 -0
  100. package/components/display/json/index.js +12 -0
  101. package/components/display/markdown/DynamicTabs.d.ts +8 -0
  102. package/components/display/markdown/DynamicTabs.js +26 -0
  103. package/components/display/markdown/index.d.ts +9 -0
  104. package/components/display/markdown/index.js +13389 -0
  105. package/components/display/markdown/markdownPlugins/tabs.d.ts +3 -0
  106. package/components/display/markdown/markdownPlugins/tabs.js +4 -0
  107. package/components/enrichment/EnrichPopover.d.ts +10 -0
  108. package/components/enrichment/EnrichPopover.js +88 -0
  109. package/components/fetchers/Fetcher.d.ts +17 -0
  110. package/components/fetchers/Fetcher.js +188 -0
  111. package/components/fetchers/PreviewModal.d.ts +8 -0
  112. package/components/fetchers/PreviewModal.js +22 -0
  113. package/components/fetchers/StatusChip.d.ts +8 -0
  114. package/components/fetchers/StatusChip.js +30 -0
  115. package/components/group/Entry.d.ts +8 -0
  116. package/components/group/Entry.js +15 -0
  117. package/components/group/Group.d.ts +12 -0
  118. package/components/group/Group.js +15 -0
  119. package/components/group/GroupControl.d.ts +4 -0
  120. package/components/group/GroupControl.js +103 -0
  121. package/components/stats/QueryStatus.d.ts +4 -0
  122. package/components/stats/QueryStatus.js +61 -0
  123. package/countBy-C69WslUA.js +14 -0
  124. package/data/event.d.ts +12 -0
  125. package/data/event.js +8 -0
  126. package/database/index.d.ts +4 -0
  127. package/database/index.js +4 -0
  128. package/database/selector.schema.json.d.ts +119 -0
  129. package/database/status.schema.json.d.ts +38 -0
  130. package/database/types.d.ts +64 -0
  131. package/debounce-bV0h5FC5.js +92 -0
  132. package/en/translation.json +135 -0
  133. package/fr/translation.json +134 -0
  134. package/get-D3C3lEU3.js +8 -0
  135. package/groupBy-DC2oOuBN.js +14 -0
  136. package/hooks/ClueActionContext.d.ts +86 -0
  137. package/hooks/ClueActionContext.js +18 -0
  138. package/hooks/ClueComponentContext.d.ts +10 -0
  139. package/hooks/ClueComponentContext.js +40 -0
  140. package/hooks/ClueConfigProvider.d.ts +12 -0
  141. package/hooks/ClueConfigProvider.js +23 -0
  142. package/hooks/ClueDatabaseContext.d.ts +10 -0
  143. package/hooks/ClueDatabaseContext.js +23 -0
  144. package/hooks/ClueEnrichContext.d.ts +6 -0
  145. package/hooks/ClueEnrichContext.js +15 -0
  146. package/hooks/ClueEnrichContextType.d.ts +113 -0
  147. package/hooks/ClueEnrichProps.d.ts +81 -0
  148. package/hooks/ClueFetcherContext.d.ts +35 -0
  149. package/hooks/ClueFetcherContext.js +88 -0
  150. package/hooks/ClueGroupContext.d.ts +14 -0
  151. package/hooks/ClueGroupContext.js +23 -0
  152. package/hooks/CluePopupContext.d.ts +24 -0
  153. package/hooks/CluePopupContext.js +12 -0
  154. package/hooks/ClueProvider.d.ts +9 -0
  155. package/hooks/ClueProvider.js +14 -0
  156. package/hooks/selectors.d.ts +10 -0
  157. package/hooks/selectors.js +24 -0
  158. package/hooks/useAnnotations.d.ts +24 -0
  159. package/hooks/useAnnotations.js +69 -0
  160. package/hooks/useClue.d.ts +4 -0
  161. package/hooks/useClue.js +8 -0
  162. package/hooks/useClueActions.d.ts +4 -0
  163. package/hooks/useClueActions.js +5 -0
  164. package/hooks/useClueConfig.d.ts +1 -0
  165. package/hooks/useClueConfig.js +8 -0
  166. package/hooks/useClueTypeConfig.d.ts +17 -0
  167. package/hooks/useClueTypeConfig.js +7 -0
  168. package/hooks/useComparator.d.ts +16 -0
  169. package/hooks/useComparator.js +1060 -0
  170. package/hooks/useErrors.d.ts +17 -0
  171. package/hooks/useErrors.js +35 -0
  172. package/hooks/useMyHighlights.d.ts +11 -0
  173. package/hooks/useMyHighlights.js +74 -0
  174. package/hooks/useMyLocalStorage.d.ts +16 -0
  175. package/hooks/useMyLocalStorage.js +80 -0
  176. package/iconify-CXMreGTg.js +1782 -0
  177. package/icons/Action.d.ts +9 -0
  178. package/icons/Action.js +90 -0
  179. package/icons/Assessment.d.ts +11 -0
  180. package/icons/Assessment.js +123 -0
  181. package/icons/Context.d.ts +12 -0
  182. package/icons/Context.js +83 -0
  183. package/icons/Opinion.d.ts +11 -0
  184. package/icons/Opinion.js +125 -0
  185. package/icons/iconMap.d.ts +7 -0
  186. package/icons/iconMap.js +10 -0
  187. package/identity-CPGTqrE4.js +6 -0
  188. package/index-BDVjGvMI.js +696 -0
  189. package/index-BDrtH5ec.js +465 -0
  190. package/index-BbPn6-Mw.js +15750 -0
  191. package/index-C9lySIVX.js +1172 -0
  192. package/index-Dn2NHyXg.js +17654 -0
  193. package/index.css +21 -0
  194. package/isEmpty-BQkZubqU.js +29 -0
  195. package/isNil-CIubwp4T.js +6 -0
  196. package/isObject-FTY-5JQX.js +7 -0
  197. package/isObjectLike-OAgjjZye.js +48 -0
  198. package/isSymbol-Xd2FsJyp.js +8 -0
  199. package/isUndefined-CE8h73dH.js +10 -0
  200. package/last-CUCl67Im.js +7 -0
  201. package/main.d.ts +42 -0
  202. package/main.js +70 -0
  203. package/package.json +39 -143
  204. package/public/manifest.json +16 -0
  205. package/public/robots.txt +3 -0
  206. package/public/svg/dark/clue-h.svg +52 -0
  207. package/public/svg/dark/clue-icon1-simple.svg +33 -0
  208. package/public/svg/dark/clue-icon1.svg +44 -0
  209. package/public/svg/dark/clue-icon2-simple.svg +26 -0
  210. package/public/svg/dark/clue-icon2.svg +37 -0
  211. package/public/svg/dark/clue-name.svg +14 -0
  212. package/public/svg/dark/clue-v.svg +52 -0
  213. package/public/svg/light/clue-h.svg +60 -0
  214. package/public/svg/light/clue-icon1-simple.svg +37 -0
  215. package/public/svg/light/clue-icon1.svg +48 -0
  216. package/public/svg/light/clue-icon2-simple.svg +30 -0
  217. package/public/svg/light/clue-icon2.svg +41 -0
  218. package/public/svg/light/clue-name.svg +14 -0
  219. package/public/svg/light/clue-v.svg +60 -0
  220. package/sortBy-B-UKp4GT.js +100 -0
  221. package/sumBy-MYkDPHZL.js +8 -0
  222. package/tabs-xGuUGsJd.js +254 -0
  223. package/text/Frequency.d.ts +9 -0
  224. package/text/Frequency.js +49 -0
  225. package/toFinite-Bc55msYj.js +16 -0
  226. package/toNumber-DPxy1FBy.js +39 -0
  227. package/types/EnrichmentProps.d.ts +73 -0
  228. package/types/RunningActionData.d.ts +15 -0
  229. package/types/WithActionData.d.ts +9 -0
  230. package/types/action.d.ts +25 -0
  231. package/types/config.d.ts +16 -0
  232. package/types/fetcher.d.ts +60 -0
  233. package/types/graph.d.ts +101 -0
  234. package/types/lookup.d.ts +62 -0
  235. package/types/network.d.ts +9 -0
  236. package/useClueTypeConfig-D4zcy8Gr.js +3184 -0
  237. package/utils/chain.d.ts +14 -0
  238. package/utils/chain.js +106 -0
  239. package/utils/classificationParser.d.ts +195 -0
  240. package/utils/classificationParser.js +553 -0
  241. package/utils/constants.d.ts +27 -0
  242. package/utils/constants.js +37 -0
  243. package/utils/graph.d.ts +13 -0
  244. package/utils/graph.js +79 -0
  245. package/utils/hashUtil.d.ts +6 -0
  246. package/utils/hashUtil.js +11 -0
  247. package/utils/line.d.ts +28 -0
  248. package/utils/line.js +136 -0
  249. package/utils/loggerUtil.d.ts +6 -0
  250. package/utils/loggerUtil.js +8 -0
  251. package/utils/sessionStorage.d.ts +9 -0
  252. package/utils/sessionStorage.js +51 -0
  253. package/utils/utils.d.ts +13 -0
  254. package/utils/utils.js +11 -0
  255. package/utils/window.d.ts +3 -0
  256. package/utils/window.js +24 -0
  257. package/utils-CxIhC2xH.js +4182 -0
@@ -0,0 +1,3 @@
1
+ import type * as mdast from 'mdast';
2
+ import type * as unified from 'unified';
3
+ export declare const codeTabs: unified.Plugin<[], mdast.Root>;
@@ -0,0 +1,4 @@
1
+ import { c } from "../../../../tabs-xGuUGsJd.js";
2
+ export {
3
+ c as codeTabs
4
+ };
@@ -0,0 +1,10 @@
1
+ import { Selector } from "../../types/lookup";
2
+ import { FC } from 'react';
3
+
4
+ declare const EnrichPopover: FC<{
5
+ size?: 'small' | 'medium';
6
+ show?: boolean;
7
+ multiples?: boolean;
8
+ selector: Selector;
9
+ }>;
10
+ export default EnrichPopover;
@@ -0,0 +1,88 @@
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 { useClueComponentSelector, useClueEnrichSelector } from "../../hooks/selectors.js";
4
+ import { useState, useRef, useCallback, useEffect } from "react";
5
+ import Iconified from "../display/icons/Iconified.js";
6
+ import { c as capitalize } from "../../ActionForm-c5hLIfQ-.js";
7
+ const EnrichPopover = ({ show = false, size = "small", selector }) => {
8
+ const { t } = useClueComponentSelector((ctx) => ctx.i18next);
9
+ const theme = useTheme();
10
+ const availableSources = useClueEnrichSelector((ctx) => ctx.availableSources);
11
+ const _enrich = useClueEnrichSelector((ctx) => ctx.enrich);
12
+ const [showEnrichMenu, setShowEnrichMenu] = useState(show);
13
+ const [loading, setLoading] = useState(false);
14
+ const enrichEl = useRef(null);
15
+ const enrich = useCallback(
16
+ async (_source) => {
17
+ setLoading(true);
18
+ try {
19
+ await _enrich(selector.type, selector.value, {
20
+ classification: selector.classification,
21
+ timeout: 30,
22
+ force: true,
23
+ noCache: true,
24
+ sources: [_source],
25
+ append: true
26
+ });
27
+ } finally {
28
+ setLoading(false);
29
+ }
30
+ },
31
+ [_enrich, selector.classification, selector.type, selector.value]
32
+ );
33
+ useEffect(() => {
34
+ setShowEnrichMenu(show);
35
+ }, [show]);
36
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
37
+ size === "small" ? /* @__PURE__ */ jsx(Tooltip, { ref: enrichEl, title: t("enrich"), children: /* @__PURE__ */ jsx("span", { style: { alignSelf: "center" }, children: /* @__PURE__ */ jsx(
38
+ IconButton,
39
+ {
40
+ onClick: () => setShowEnrichMenu(true),
41
+ disabled: Object.keys(availableSources).length < 1 || loading,
42
+ color: "info",
43
+ children: loading ? /* @__PURE__ */ jsx(CircularProgress, { color: "info", size: "24px" }) : /* @__PURE__ */ jsx(Iconified, { icon: "ic:baseline-auto-fix-high" })
44
+ }
45
+ ) }) }) : /* @__PURE__ */ jsx(
46
+ Button,
47
+ {
48
+ ref: enrichEl,
49
+ variant: "outlined",
50
+ color: "info",
51
+ disabled: Object.keys(availableSources).length < 1 || loading,
52
+ startIcon: loading ? /* @__PURE__ */ jsx(CircularProgress, { color: "info", size: "20px" }) : /* @__PURE__ */ jsx(Iconified, { icon: "ic:baseline-auto-fix-high" }),
53
+ sx: { alignSelf: "stretch" },
54
+ onClick: () => setShowEnrichMenu(true),
55
+ children: t("enrich")
56
+ }
57
+ ),
58
+ /* @__PURE__ */ jsx(
59
+ Popover,
60
+ {
61
+ sx: { zIndex: 2e3 },
62
+ open: showEnrichMenu,
63
+ disablePortal: true,
64
+ onClose: () => setShowEnrichMenu(false),
65
+ anchorEl: enrichEl.current,
66
+ anchorOrigin: { horizontal: "left", vertical: "bottom" },
67
+ 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(
68
+ Box,
69
+ {
70
+ sx: {
71
+ px: 3,
72
+ py: 1,
73
+ cursor: "pointer",
74
+ transition: theme.transitions.create("background-color"),
75
+ "&:hover": { backgroundColor: theme.palette.background.default }
76
+ },
77
+ onClick: () => enrich(_source),
78
+ 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(" ") }) }) })
79
+ },
80
+ _source
81
+ )) }) })
82
+ }
83
+ )
84
+ ] });
85
+ };
86
+ export {
87
+ EnrichPopover as default
88
+ };
@@ -0,0 +1,17 @@
1
+ import { ChipProps, ModalProps, PaperProps, SkeletonProps, StackProps } from '@mui/material';
2
+ import { Selector } from "../../types/lookup";
3
+ import { default as React } from 'react';
4
+
5
+ export interface FetcherProps extends Selector {
6
+ fetcherId: string;
7
+ slotProps?: {
8
+ paper?: PaperProps;
9
+ preview?: ModalProps;
10
+ stack?: StackProps;
11
+ image?: React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>;
12
+ chip?: ChipProps;
13
+ skeleton?: SkeletonProps;
14
+ };
15
+ }
16
+ declare const _default: React.NamedExoticComponent<FetcherProps>;
17
+ export default _default;
@@ -0,0 +1,188 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { I as Icon } from "../../iconify-CXMreGTg.js";
3
+ import { useTheme, Skeleton, Chip, Tooltip, Paper, Stack, 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-BDrtH5ec.js";
7
+ import { ClueComponentContext } from "../../hooks/ClueComponentContext.js";
8
+ import { useClueFetcherSelector } from "../../hooks/selectors.js";
9
+ import React__default, { useState, useEffect, memo } from "react";
10
+ import { u as useContextSelector } from "../../index-BDVjGvMI.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
+ ({
17
+ type,
18
+ value,
19
+ classification,
20
+ fetcherId,
21
+ slotProps: {
22
+ paper: paperProps = {},
23
+ preview: previewProps = {},
24
+ stack: stackProps = {},
25
+ image: imageProps = {},
26
+ chip: chipProps = {},
27
+ skeleton: skeletonProps = {}
28
+ } = {}
29
+ }) => {
30
+ var _a;
31
+ const theme = useTheme();
32
+ const fetchers = useClueFetcherSelector((ctx) => ctx.fetchers);
33
+ const fetchSelector = useClueFetcherSelector((ctx) => ctx.fetchSelector);
34
+ const fetchCompleted = useClueFetcherSelector((ctx) => ctx.fetchCompleted);
35
+ const { t } = useContextSelector(ClueComponentContext, (ctx) => ctx == null ? void 0 : ctx.i18next);
36
+ const [result, setResult] = useState(null);
37
+ const [loading, setLoading] = useState(true);
38
+ const [showPreview, setShowPreview] = useState(false);
39
+ useEffect(() => {
40
+ (async () => {
41
+ try {
42
+ setLoading(true);
43
+ setResult(await fetchSelector(fetcherId, { type, value, classification }));
44
+ } finally {
45
+ setLoading(false);
46
+ }
47
+ })();
48
+ }, [classification, fetchSelector, fetcherId, type, value]);
49
+ if (fetchCompleted) {
50
+ if (!fetcherId) {
51
+ console.warn("Missing fetcher Id. Component will not render.");
52
+ return null;
53
+ } else if (!fetcherId.includes(".")) {
54
+ console.warn(
55
+ "Invalid fetcher id. Must be in the format '<plugin_id>.<fetcher_id>'. Component will not render."
56
+ );
57
+ return null;
58
+ } else if (!(fetcherId in fetchers)) {
59
+ console.warn("Fetcher ID does not correspond to a registered fetcher. Component will not render.");
60
+ return null;
61
+ }
62
+ } else {
63
+ return null;
64
+ }
65
+ if (loading) {
66
+ if (((_a = fetchers[fetcherId]) == null ? void 0 : _a.format) === "status") {
67
+ return /* @__PURE__ */ jsx(
68
+ Skeleton,
69
+ {
70
+ variant: "rounded",
71
+ height: "32px",
72
+ width: "150px",
73
+ ...skeletonProps,
74
+ sx: [
75
+ { borderRadius: "16px" },
76
+ ...Array.isArray(skeletonProps == null ? void 0 : skeletonProps.sx) ? skeletonProps == null ? void 0 : skeletonProps.sx : [skeletonProps == null ? void 0 : skeletonProps.sx]
77
+ ]
78
+ }
79
+ );
80
+ } else {
81
+ return /* @__PURE__ */ jsx(Skeleton, { variant: "rounded", height: "325px", width: "300px", ...skeletonProps });
82
+ }
83
+ }
84
+ if ((result == null ? void 0 : result.outcome) === "failure" && fetchers[fetcherId].format === "status") {
85
+ return /* @__PURE__ */ jsx(
86
+ Chip,
87
+ {
88
+ icon: /* @__PURE__ */ jsx(Tooltip, { title: result.error, children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:information-outline", fontSize: "1.25rem" }) }),
89
+ label: t("error"),
90
+ color: "error",
91
+ ...chipProps
92
+ }
93
+ );
94
+ }
95
+ if ((result == null ? void 0 : result.format) === "status") {
96
+ return /* @__PURE__ */ jsx(StatusChip, { data: result.data, ...chipProps });
97
+ }
98
+ return /* @__PURE__ */ jsx(
99
+ Paper,
100
+ {
101
+ ...paperProps,
102
+ sx: [
103
+ {
104
+ p: 1,
105
+ overflow: "hidden",
106
+ flex: 1,
107
+ width: "100%",
108
+ minWidth: "300px"
109
+ },
110
+ ...Array.isArray(paperProps == null ? void 0 : paperProps.sx) ? paperProps == null ? void 0 : paperProps.sx : [paperProps == null ? void 0 : paperProps.sx]
111
+ ],
112
+ children: /* @__PURE__ */ jsxs(
113
+ Stack,
114
+ {
115
+ sx: {
116
+ "& > img": {
117
+ borderRadius: "3px",
118
+ cursor: "zoom-in",
119
+ transition: theme.transitions.create("border-color", { duration: theme.transitions.duration.shortest }),
120
+ border: "3px solid transparent",
121
+ "&:hover": {
122
+ borderColor: "primary.main"
123
+ }
124
+ }
125
+ },
126
+ children: [
127
+ (result == null ? void 0 : result.outcome) === "failure" && /* @__PURE__ */ jsx("code", { style: { color: theme.palette.error.main }, children: /* @__PURE__ */ jsx("pre", { style: { marginTop: 0, marginBottom: 0 }, children: result.error }) }),
128
+ (result == null ? void 0 : result.format) === "markdown" && /* @__PURE__ */ jsx(Markdown, { md: result.data }),
129
+ (result == null ? void 0 : result.format) === "image" && /* @__PURE__ */ jsx("img", { src: result.data.image, alt: result.data.alt, ...imageProps, onClick: () => setShowPreview(true) }),
130
+ (result == null ? void 0 : result.format) === "json" && /* @__PURE__ */ jsx(Box, { sx: { ".react-json-view": { backgroundColor: "transparent !important" } }, children: /* @__PURE__ */ jsx(JSONViewer, { data: result.data }) }),
131
+ (result == null ? void 0 : result.format) === "graph" && /* @__PURE__ */ jsx(Graph, { graph: result.data, sx: { minHeight: "600px" } }),
132
+ /* @__PURE__ */ jsx(FlexOne, {}),
133
+ /* @__PURE__ */ jsxs(
134
+ Stack,
135
+ {
136
+ direction: "row",
137
+ spacing: 1,
138
+ ...stackProps,
139
+ sx: [
140
+ {
141
+ py: theme.spacing(0.5),
142
+ display: "flex",
143
+ alignItems: "center"
144
+ },
145
+ ...Array.isArray(stackProps == null ? void 0 : stackProps.sx) ? stackProps == null ? void 0 : stackProps.sx : [stackProps == null ? void 0 : stackProps.sx]
146
+ ],
147
+ children: [
148
+ /* @__PURE__ */ jsx(Iconified, { icon: "ic:baseline-landscape", color: "primary", fontSize: "small" }),
149
+ /* @__PURE__ */ jsx(
150
+ Tooltip,
151
+ {
152
+ title: /* @__PURE__ */ jsxs(Stack, { spacing: 0.5, children: [
153
+ /* @__PURE__ */ jsxs("span", { children: [
154
+ t("type"),
155
+ ": ",
156
+ type
157
+ ] }),
158
+ /* @__PURE__ */ jsxs("span", { children: [
159
+ t("value"),
160
+ ": ",
161
+ value
162
+ ] }),
163
+ /* @__PURE__ */ jsxs("span", { children: [
164
+ t("classification"),
165
+ ": ",
166
+ classification ?? "N/A"
167
+ ] })
168
+ ] }),
169
+ children: /* @__PURE__ */ jsx(Iconified, { icon: "ic:outline-info", fontSize: "small" })
170
+ }
171
+ ),
172
+ /* @__PURE__ */ jsx(FlexOne, {}),
173
+ (result == null ? void 0 : result.link) && /* @__PURE__ */ jsx(IconButton, { size: "small", component: "a", href: result.link, children: /* @__PURE__ */ jsx(Iconified, { icon: "ic:baseline-open-in-new", fontSize: "small" }) })
174
+ ]
175
+ }
176
+ ),
177
+ /* @__PURE__ */ jsx(PreviewModal, { ...previewProps, open: showPreview, result, onClose: () => setShowPreview(false) })
178
+ ]
179
+ }
180
+ )
181
+ }
182
+ );
183
+ }
184
+ );
185
+ const Fetcher$1 = memo(Fetcher);
186
+ export {
187
+ Fetcher$1 as default
188
+ };
@@ -0,0 +1,8 @@
1
+ import { ModalProps } from '@mui/material';
2
+ import { FetcherResult } from "../../types/fetcher";
3
+
4
+ declare const _default: import('react').NamedExoticComponent<{
5
+ result: FetcherResult;
6
+ onClose?: () => void;
7
+ } & Omit<ModalProps, "children">>;
8
+ export default _default;
@@ -0,0 +1,22 @@
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);
20
+ export {
21
+ PreviewModal$1 as default
22
+ };
@@ -0,0 +1,8 @@
1
+ import { ChipProps } from '@mui/material';
2
+ import { FetcherStatusResult } from "../../types/fetcher";
3
+ import { FC } from 'react';
4
+
5
+ declare const StatusChip: FC<ChipProps & {
6
+ data: FetcherStatusResult['data'];
7
+ }>;
8
+ export default StatusChip;
@@ -0,0 +1,30 @@
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-BDVjGvMI.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,
15
+ {
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
+ onDelete: data.link ? () => console.log("Navigating to %s", data.link) : null,
20
+ label: ((_a = data.labels.find((label) => label.language === i18n.language) ?? data.labels[0]) == null ? void 0 : _a.label) ?? t("unknown"),
21
+ sx: [
22
+ ...Array.isArray(chipProps == null ? void 0 : chipProps.sx) ? chipProps == null ? void 0 : chipProps.sx : [chipProps == null ? void 0 : chipProps.sx],
23
+ data.color && { backgroundColor: data.color }
24
+ ]
25
+ }
26
+ );
27
+ };
28
+ export {
29
+ StatusChip as default
30
+ };
@@ -0,0 +1,8 @@
1
+ import { PropsWithChildren } from 'react';
2
+
3
+ interface ClueEntryProps {
4
+ entry: any;
5
+ selected?: boolean;
6
+ }
7
+ declare const _default: import('react').NamedExoticComponent<PropsWithChildren<ClueEntryProps>>;
8
+ export default _default;
@@ -0,0 +1,15 @@
1
+ import { ClueGroupContext } from "../../hooks/ClueGroupContext.js";
2
+ import { memo, useEffect } from "react";
3
+ import { u as useContextSelector } from "../../index-BDVjGvMI.js";
4
+ import { i as isEqual } from "../../utils-CxIhC2xH.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$1 = memo(Entry);
13
+ export {
14
+ Entry$1 as default
15
+ };
@@ -0,0 +1,12 @@
1
+ import { StackProps } from '@mui/material';
2
+ import { ClueGroupContextProps } from "../../hooks/ClueGroupContext";
3
+ import { PropsWithChildren } from 'react';
4
+
5
+ interface ClueGroupProps extends ClueGroupContextProps {
6
+ showHeader?: boolean;
7
+ slotProps?: {
8
+ stack?: StackProps;
9
+ };
10
+ }
11
+ declare const _default: import('react').NamedExoticComponent<PropsWithChildren<ClueGroupProps>>;
12
+ export default _default;
@@ -0,0 +1,15 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Stack } from "@mui/material";
3
+ import { ClueGroupProvider } from "../../hooks/ClueGroupContext.js";
4
+ import { memo } from "react";
5
+ import GroupControl from "./GroupControl.js";
6
+ const Group = ({ children, showHeader = true, slotProps, ...groupProps }) => {
7
+ return /* @__PURE__ */ jsx(ClueGroupProvider, { ...groupProps, children: showHeader ? /* @__PURE__ */ jsxs(Stack, { direction: "column", alignSelf: "stretch", ...(slotProps == null ? void 0 : slotProps.stack) ?? {}, children: [
8
+ /* @__PURE__ */ jsx(GroupControl, {}),
9
+ children
10
+ ] }) : children });
11
+ };
12
+ const Group$1 = memo(Group);
13
+ export {
14
+ Group$1 as default
15
+ };
@@ -0,0 +1,4 @@
1
+ import { FC } from 'react';
2
+
3
+ declare const GroupControl: FC;
4
+ export default GroupControl;
@@ -0,0 +1,103 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Card, Stack, Box, Typography, Autocomplete, TextField, Button, CircularProgress } from "@mui/material";
3
+ import { F as FlexOne } from "../../FlexOne-BSYAhhtG.js";
4
+ import Iconified from "../display/icons/Iconified.js";
5
+ import { SNACKBAR_EVENT_ID } from "../../data/event.js";
6
+ import { ClueGroupContext } from "../../hooks/ClueGroupContext.js";
7
+ import { useClueComponentSelector, useClueEnrichSelector } from "../../hooks/selectors.js";
8
+ import { safeDispatchEvent } from "../../utils/window.js";
9
+ import { useState, useMemo, useCallback } from "react";
10
+ import { u as useContextSelector } from "../../index-BDVjGvMI.js";
11
+ import ExecutePopover from "../actions/ExecutePopover.js";
12
+ import { c as capitalize } from "../../ActionForm-c5hLIfQ-.js";
13
+ const GroupControl = () => {
14
+ const { t } = useClueComponentSelector((ctx) => ctx.i18next);
15
+ const { type, values, classification } = useContextSelector(ClueGroupContext, (ctx) => ({
16
+ type: ctx == null ? void 0 : ctx.type,
17
+ values: ctx == null ? void 0 : ctx.values,
18
+ classification: ctx == null ? void 0 : ctx.classification
19
+ }));
20
+ const sources = useClueEnrichSelector((ctx) => ctx.availableSources);
21
+ const enrich = useClueEnrichSelector((ctx) => ctx.bulkEnrich);
22
+ const [loading, setLoading] = useState(false);
23
+ const [selectedSources, setSelectedSources] = useState([]);
24
+ const fullValues = useMemo(
25
+ () => (values ?? []).map((value) => ({ value, type, classification })),
26
+ [classification, type, values]
27
+ );
28
+ const runEnrichment = useCallback(async () => {
29
+ if (loading) {
30
+ return;
31
+ }
32
+ try {
33
+ setLoading(true);
34
+ await enrich(
35
+ (values ?? []).map((value) => ({ type, value })),
36
+ { force: true, sources: selectedSources }
37
+ );
38
+ } catch (e) {
39
+ console.error(e);
40
+ safeDispatchEvent(
41
+ new CustomEvent(SNACKBAR_EVENT_ID, {
42
+ detail: {
43
+ message: e.toString(),
44
+ level: "error"
45
+ }
46
+ })
47
+ );
48
+ } finally {
49
+ setLoading(false);
50
+ }
51
+ }, [enrich, loading, selectedSources, type, values]);
52
+ return /* @__PURE__ */ jsx(Card, { sx: { p: 1 }, children: /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 1, alignItems: "center", children: [
53
+ /* @__PURE__ */ jsx(
54
+ Box,
55
+ {
56
+ sx: (theme) => ({
57
+ border: "thin solid",
58
+ alignSelf: "stretch",
59
+ display: "flex",
60
+ alignItems: "center",
61
+ px: 1,
62
+ borderRadius: "5px",
63
+ borderColor: theme.palette.divider
64
+ }),
65
+ children: /* @__PURE__ */ jsxs(Typography, { color: "text.secondary", children: [
66
+ (values == null ? void 0 : values.length) ?? 0,
67
+ " selected"
68
+ ] })
69
+ }
70
+ ),
71
+ /* @__PURE__ */ jsx(FlexOne, {}),
72
+ /* @__PURE__ */ jsx(
73
+ Autocomplete,
74
+ {
75
+ size: "small",
76
+ multiple: true,
77
+ options: sources,
78
+ sx: { minWidth: "400px" },
79
+ renderInput: (params) => /* @__PURE__ */ jsx(TextField, { size: "small", placeholder: t("sources"), ...params }),
80
+ value: selectedSources,
81
+ onChange: (__, value) => setSelectedSources(value),
82
+ disableCloseOnSelect: true,
83
+ getOptionLabel: (opt) => opt.split(/[_-]/).map((word) => capitalize(word)).join(" ")
84
+ }
85
+ ),
86
+ /* @__PURE__ */ jsx(
87
+ Button,
88
+ {
89
+ variant: "outlined",
90
+ color: "info",
91
+ disabled: (values == null ? void 0 : values.length) < 1 || loading,
92
+ startIcon: loading ? /* @__PURE__ */ jsx(CircularProgress, { color: "info", size: "20px" }) : /* @__PURE__ */ jsx(Iconified, { icon: "ic:outline-play-arrow" }),
93
+ sx: { alignSelf: "stretch" },
94
+ onClick: runEnrichment,
95
+ children: t("enrich")
96
+ }
97
+ ),
98
+ /* @__PURE__ */ jsx(ExecutePopover, { selectors: fullValues, size: "medium", multiples: true })
99
+ ] }) });
100
+ };
101
+ export {
102
+ GroupControl as default
103
+ };
@@ -0,0 +1,4 @@
1
+ import { FC } from 'react';
2
+
3
+ declare const QueryStatus: FC;
4
+ export default QueryStatus;
@@ -0,0 +1,61 @@
1
+ import { jsxs } from "react/jsx-runtime";
2
+ import { Stack, Typography } from "@mui/material";
3
+ import { ClueDatabaseContext } from "../../hooks/ClueDatabaseContext.js";
4
+ import { useClueEnrichSelector } from "../../hooks/selectors.js";
5
+ import { useContext, useState, useEffect } from "react";
6
+ const QueryStatus = () => {
7
+ const database = useContext(ClueDatabaseContext);
8
+ const ready = useClueEnrichSelector((ctx) => ctx.ready);
9
+ const [pendingCount, setPendingCount] = useState(0);
10
+ const [inProgressCount, setInProgressCount] = useState(0);
11
+ const [completeCount, setCompleteCount] = useState(0);
12
+ useEffect(() => {
13
+ if (!ready) {
14
+ return;
15
+ }
16
+ const observables = [
17
+ database.status.count({ selector: { status: "pending" } }).$.subscribe(setPendingCount),
18
+ database.status.count({ selector: { status: "in-progress" } }).$.subscribe(setInProgressCount),
19
+ database.status.count({ selector: { status: "complete" } }).$.subscribe(setCompleteCount)
20
+ ];
21
+ return () => {
22
+ try {
23
+ observables.forEach((_observable) => _observable.unsubscribe());
24
+ } catch (e) {
25
+ console.warn(e);
26
+ }
27
+ };
28
+ }, [database, ready]);
29
+ if (pendingCount + inProgressCount + completeCount < 1) {
30
+ return null;
31
+ }
32
+ return /* @__PURE__ */ jsxs(
33
+ Stack,
34
+ {
35
+ spacing: 1,
36
+ sx: (theme) => ({
37
+ border: `thin solid ${theme.palette.divider}`,
38
+ borderRadius: theme.spacing(0.5),
39
+ mx: 1,
40
+ p: 1
41
+ }),
42
+ children: [
43
+ /* @__PURE__ */ jsxs(Typography, { sx: { fontFamily: "monospace" }, children: [
44
+ "Pending: ",
45
+ pendingCount
46
+ ] }),
47
+ /* @__PURE__ */ jsxs(Typography, { sx: { fontFamily: "monospace" }, children: [
48
+ "In Progress: ",
49
+ inProgressCount
50
+ ] }),
51
+ /* @__PURE__ */ jsxs(Typography, { sx: { fontFamily: "monospace" }, children: [
52
+ "Complete: ",
53
+ completeCount
54
+ ] })
55
+ ]
56
+ }
57
+ );
58
+ };
59
+ export {
60
+ QueryStatus as default
61
+ };
@@ -0,0 +1,14 @@
1
+ import { b as baseAssignValue } from "./_baseAssignValue-CNbcU6Nb.js";
2
+ import { c as createAggregator } from "./_createAggregator-BpVy5xMi.js";
3
+ var objectProto = Object.prototype;
4
+ var hasOwnProperty = objectProto.hasOwnProperty;
5
+ var countBy = createAggregator(function(result, value, key) {
6
+ if (hasOwnProperty.call(result, key)) {
7
+ ++result[key];
8
+ } else {
9
+ baseAssignValue(result, key, 1);
10
+ }
11
+ });
12
+ export {
13
+ countBy as c
14
+ };
@@ -0,0 +1,12 @@
1
+ import { OptionsObject } from 'notistack';
2
+ import { ReactNode } from 'react';
3
+
4
+ export declare const SNACKBAR_EVENT_ID = "snackbar.message";
5
+ export declare const SHOW_EVENT_ID = "clue.showPopup";
6
+ export declare const HIDE_EVENT_ID = "clue.hidePopup";
7
+ export type SnackbarEvents = {
8
+ message: ReactNode;
9
+ level: 'success' | 'error' | 'info' | 'warning';
10
+ timeout?: number;
11
+ options?: OptionsObject;
12
+ };
package/data/event.js ADDED
@@ -0,0 +1,8 @@
1
+ const SNACKBAR_EVENT_ID = "snackbar.message";
2
+ const SHOW_EVENT_ID = "clue.showPopup";
3
+ const HIDE_EVENT_ID = "clue.hidePopup";
4
+ export {
5
+ HIDE_EVENT_ID,
6
+ SHOW_EVENT_ID,
7
+ SNACKBAR_EVENT_ID
8
+ };