@cccsaurora/clue-ui 1.1.3 → 1.2.0-dev.106

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 (178) 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/cloneDeep-CjP5k9zW.js +8 -0
  24. package/components/AnnotationBody.js +49 -35
  25. package/components/AnnotationDetailPopover.js +36 -30
  26. package/components/AnnotationDetails.js +6 -6
  27. package/components/AnnotationEntry.js +50 -47
  28. package/components/AnnotationPreview.js +5 -5
  29. package/components/ClassificationChip.js +44 -23
  30. package/components/CountBadge.js +31 -26
  31. package/components/EnrichedCard.js +110 -97
  32. package/components/EnrichedChip.js +130 -105
  33. package/components/EnrichedTypography.js +133 -107
  34. package/components/ErrorBoundary.js +28 -24
  35. package/components/RetryFailedEnrichments.js +10 -9
  36. package/components/SourcePicker.js +57 -49
  37. package/components/actions/ActionForm.js +4 -4
  38. package/components/actions/ExecutePopover.js +64 -50
  39. package/components/actions/ResultModal.js +5 -5
  40. package/components/actions/form/schemaAdapter.js +39 -23
  41. package/components/display/graph/ExpandMoreButton.js +10 -10
  42. package/components/display/graph/elements/NodeCard.js +111 -91
  43. package/components/display/graph/elements/NodeTag.js +15 -13
  44. package/components/display/graph/index.js +261 -202
  45. package/components/display/graph/visualizations/Leaf.js +88 -69
  46. package/components/display/graph/visualizations/cloud/index.js +98 -81
  47. package/components/display/graph/visualizations/icons/BaseIcon.js +26 -21
  48. package/components/display/graph/visualizations/icons/BugIcon.js +12 -12
  49. package/components/display/graph/visualizations/icons/HostIcon.js +12 -12
  50. package/components/display/graph/visualizations/icons/NetworkIcon.js +12 -12
  51. package/components/display/graph/visualizations/icons/ProcessIcon.js +12 -12
  52. package/components/display/graph/visualizations/icons/TargetIcon.js +13 -13
  53. package/components/display/graph/visualizations/icons/index.js +14 -13
  54. package/components/display/graph/visualizations/panels/NodePanel.js +10 -8
  55. package/components/display/graph/visualizations/tree/BundleLine.js +108 -81
  56. package/components/display/graph/visualizations/tree/Triangle.js +13 -13
  57. package/components/display/graph/visualizations/tree/index.js +407 -305
  58. package/components/display/icons/Iconified.js +27 -12
  59. package/components/display/json/index.js +4 -4
  60. package/components/display/markdown/index.js +8658 -5757
  61. package/components/enrichment/EnrichPopover.js +55 -47
  62. package/components/fetchers/Fetcher.js +123 -95
  63. package/components/fetchers/PreviewModal.js +20 -17
  64. package/components/fetchers/StatusChip.js +21 -17
  65. package/components/group/Entry.js +13 -11
  66. package/components/group/Group.js +13 -10
  67. package/components/group/GroupControl.js +77 -66
  68. package/components/stats/QueryStatus.js +40 -35
  69. package/countBy-C69WslUA.js +14 -0
  70. package/data/event.js +6 -4
  71. package/database/index.js +2 -2
  72. package/debounce-bV0h5FC5.js +92 -0
  73. package/get-D3C3lEU3.js +8 -0
  74. package/groupBy-DC2oOuBN.js +14 -0
  75. package/hooks/ClueActionContext.js +7 -7
  76. package/hooks/ClueComponentContext.js +29 -23
  77. package/hooks/ClueConfigProvider.js +14 -12
  78. package/hooks/ClueDatabaseContext.js +19 -13
  79. package/hooks/ClueEnrichContext.js +8 -8
  80. package/hooks/ClueFetcherContext.js +74 -46
  81. package/hooks/ClueGroupContext.js +17 -14
  82. package/hooks/CluePopupContext.js +5 -5
  83. package/hooks/ClueProvider.js +12 -10
  84. package/hooks/selectors.js +21 -10
  85. package/hooks/useActionResult.js +2 -2
  86. package/hooks/useAnnotations.js +44 -32
  87. package/hooks/useClue.js +6 -4
  88. package/hooks/useClueActions.js +3 -3
  89. package/hooks/useClueConfig.js +6 -4
  90. package/hooks/useClueTypeConfig.js +3 -3
  91. package/hooks/useComparator.js +722 -435
  92. package/hooks/useErrors.js +22 -18
  93. package/hooks/useMyHighlights.js +66 -36
  94. package/hooks/useMyLocalStorage.js +66 -37
  95. package/iconify-CXMreGTg.js +1782 -0
  96. package/icons/Action.js +66 -49
  97. package/icons/Assessment.js +84 -68
  98. package/icons/Context.js +77 -63
  99. package/icons/Opinion.js +77 -65
  100. package/icons/iconMap.js +2 -2
  101. package/identity-CPGTqrE4.js +6 -0
  102. package/index-BDVjGvMI.js +696 -0
  103. package/index-BbPn6-Mw.js +15750 -0
  104. package/index-Bi21Wb23.js +465 -0
  105. package/index-C3lkTD69.js +1172 -0
  106. package/index-CC12Ux-9.js +17654 -0
  107. package/isEmpty-BQkZubqU.js +29 -0
  108. package/isNil-CIubwp4T.js +6 -0
  109. package/isObject-FTY-5JQX.js +7 -0
  110. package/isObjectLike-OAgjjZye.js +48 -0
  111. package/isSymbol-Xd2FsJyp.js +8 -0
  112. package/last-CUCl67Im.js +7 -0
  113. package/main.js +62 -62
  114. package/package.json +1 -1
  115. package/sortBy-B-UKp4GT.js +100 -0
  116. package/sumBy-MYkDPHZL.js +8 -0
  117. package/text/Frequency.js +42 -23
  118. package/toFinite-Bc55msYj.js +16 -0
  119. package/toNumber-DPxy1FBy.js +39 -0
  120. package/useClueTypeConfig-XvGvIw2S.js +3201 -0
  121. package/utils/chain.js +91 -64
  122. package/utils/classificationParser.js +519 -256
  123. package/utils/constants.js +35 -10
  124. package/utils/graph.js +72 -45
  125. package/utils/hashUtil.js +7 -7
  126. package/utils/line.js +131 -81
  127. package/utils/loggerUtil.js +5 -3
  128. package/utils/sessionStorage.js +41 -27
  129. package/utils/time.js +423 -423
  130. package/utils/utils.js +9 -9
  131. package/utils/window.js +21 -10
  132. package/utils-7OtvGnmf.js +200 -0
  133. package/ActionForm-myEAs2UC.js +0 -435
  134. package/AnnotationDetails-BChWwaXw.js +0 -160
  135. package/AnnotationPreview-D060vmy2.js +0 -140
  136. package/ClueEnrichContext-DJNjbXu_.js +0 -418
  137. package/FlexOne-BXWFOd1T.js +0 -6
  138. package/_Map-DXNg_Z-q.js +0 -54
  139. package/_MapCache-Cu25RRDU.js +0 -129
  140. package/_Uint8Array-DlJCtTvG.js +0 -102
  141. package/_baseAssignValue-CUmzp727.js +0 -20
  142. package/_baseClone-BlMmRXeX.js +0 -208
  143. package/_baseExtremum-P_0akmCi.js +0 -27
  144. package/_baseFlatten-CN7vDNEQ.js +0 -72
  145. package/_baseGet-Dgf6_xCm.js +0 -80
  146. package/_baseIsEqual-Cpjtfb3Q.js +0 -173
  147. package/_baseIteratee-CP1bocOX.js +0 -95
  148. package/_baseSlice-M5RKzt1A.js +0 -10
  149. package/_baseSum-wEbgNeUs.js +0 -10
  150. package/_baseUniq-tMFmk80M.js +0 -61
  151. package/_commonjsHelpers-DaMA6jEr.js +0 -8
  152. package/_createAggregator-B4Cav8ZM.js +0 -53
  153. package/_getPrototype-CHAFQYL_.js +0 -5
  154. package/_getTag-BV_UoLYG.js +0 -90
  155. package/cloneDeep-BPVpFBzJ.js +0 -8
  156. package/countBy-DOutsa_w.js +0 -8
  157. package/debounce-DryYcbJ4.js +0 -56
  158. package/get-Bow1vKwx.js +0 -8
  159. package/groupBy-BheQYl6f.js +0 -8
  160. package/iconify-BBckr5AQ.js +0 -1263
  161. package/identity-ByMq8VxU.js +0 -6
  162. package/index-BXxfAxFt.js +0 -12734
  163. package/index-C15OYgRY.js +0 -358
  164. package/index-E7g8cRyW.js +0 -568
  165. package/index-p5_wX7q1.js +0 -11729
  166. package/index-vF6IyBhz.js +0 -975
  167. package/isEmpty-g47Qir2A.js +0 -21
  168. package/isNil-CjWwlQS3.js +0 -6
  169. package/isObject-B53jY8Qg.js +0 -7
  170. package/isObjectLike-BatpeCIi.js +0 -29
  171. package/isSymbol-C3_SC0Qp.js +0 -8
  172. package/last-7CdUxN0r.js +0 -7
  173. package/sortBy-ITdmD17L.js +0 -79
  174. package/sumBy-DxJUU2E8.js +0 -8
  175. package/toFinite-BMy6GObD.js +0 -14
  176. package/toNumber-YVhnnJv4.js +0 -31
  177. package/useClueTypeConfig-DyeBcXQX.js +0 -2214
  178. package/utils-BnmI_6N8.js +0 -130
@@ -0,0 +1,465 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { ClickAwayListener, TextField, InputAdornment, Popper, Paper, MenuList, MenuItem, ListItemText, useTheme, Stack, Skeleton } from "@mui/material";
6
+ import { useRef, useState, useEffect, useMemo, lazy } from "react";
7
+ import { r as removeEmpty, s as searchObject, f as flatten } from "./utils-7OtvGnmf.js";
8
+ import { ClueComponentContext } from "./hooks/ClueComponentContext.js";
9
+ import { useMyLocalStorageItem } from "./hooks/useMyLocalStorage.js";
10
+ import { StorageKey } from "./utils/constants.js";
11
+ import { u as useContextSelector } from "./index-BDVjGvMI.js";
12
+ const ENTER = "Enter";
13
+ const ESCAPE = "Escape";
14
+ const ARROW_LEFT = "ArrowLeft";
15
+ const ARROW_UP = "ArrowUp";
16
+ const ARROW_RIGHT = "ArrowRight";
17
+ const ARROW_DOWN = "ArrowDown";
18
+ const BACKSPACE = "Backspace";
19
+ const SPACE = " ";
20
+ function is(key, check) {
21
+ return key === check;
22
+ }
23
+ function isArrowUp(key) {
24
+ return is(key, ARROW_UP);
25
+ }
26
+ function isArrowDown(key) {
27
+ return is(key, ARROW_DOWN);
28
+ }
29
+ function isArrowLeft(key) {
30
+ return is(key, ARROW_LEFT);
31
+ }
32
+ function isArrowRight(key) {
33
+ return is(key, ARROW_RIGHT);
34
+ }
35
+ function isEscape(key) {
36
+ return is(key, ESCAPE);
37
+ }
38
+ function isEnter(key) {
39
+ return is(key, ENTER);
40
+ }
41
+ function isBackspace(key) {
42
+ return is(key, BACKSPACE);
43
+ }
44
+ function isSpace(key) {
45
+ return is(key, SPACE);
46
+ }
47
+ function parseEvent(event) {
48
+ return {
49
+ key: event.key,
50
+ isCtrl: event.ctrlKey,
51
+ isEnter: isEnter(event.key),
52
+ isSpace: isSpace(event.key),
53
+ isBackspace: isBackspace(event.key),
54
+ isEscape: isEscape(event.key),
55
+ isArrowLeft: isArrowLeft(event.key),
56
+ isArrowRight: isArrowRight(event.key),
57
+ isArrowUp: isArrowUp(event.key),
58
+ isArrowDown: isArrowDown(event.key)
59
+ };
60
+ }
61
+ class TuiPhraseLexer {
62
+ constructor() {
63
+ __publicField(this, "_phrase", null);
64
+ __publicField(this, "_buffer", null);
65
+ __publicField(this, "_tokens", null);
66
+ __publicField(this, "_consumers", null);
67
+ __publicField(this, "_consumer", null);
68
+ __publicField(this, "_startIndex", 0);
69
+ __publicField(this, "_endIndex", -1);
70
+ }
71
+ find(cursor, tokens) {
72
+ const index = tokens.findIndex((t) => t.startIndex <= cursor && cursor <= t.endIndex);
73
+ const token = tokens.at(index);
74
+ return { index, token };
75
+ }
76
+ parse(phrase, cursor = 0) {
77
+ this._phrase = phrase;
78
+ this._buffer = [];
79
+ this._tokens = [];
80
+ this._consumers = this.consumers();
81
+ this._consumer = null;
82
+ this._startIndex = 0;
83
+ this._endIndex = -1;
84
+ for (let i = 0; i < this._phrase.length; i++) {
85
+ this._endIndex += 1;
86
+ const next = this._phrase[i];
87
+ this._buffer.push(next);
88
+ let newLock = false;
89
+ if (!this._consumer) {
90
+ this._consumer = this.lock();
91
+ if (this._consumer) {
92
+ newLock = true;
93
+ this._consumer.init(this._buffer, this);
94
+ }
95
+ }
96
+ if (this._consumer) {
97
+ if (newLock) {
98
+ newLock = false;
99
+ } else {
100
+ this._consumer.append(next, this);
101
+ }
102
+ const token = this._consumer.consume(this);
103
+ if (token) {
104
+ this._tokens.push(token);
105
+ this._buffer = [];
106
+ this._consumer = null;
107
+ this._startIndex = this._endIndex + 1;
108
+ }
109
+ }
110
+ }
111
+ this._tokens.push({ type: "eop", startIndex: phrase.length, endIndex: phrase.length, value: "" });
112
+ const flatTokens = this._tokens.flatMap((t) => t.children && t.children.length > 0 ? t.children : [t]);
113
+ const { token: parent, index: parentIndex } = this.find(cursor, this._tokens);
114
+ const { token: current, index: currentIndex } = this.find(cursor, flatTokens);
115
+ const filter = cursor === current.startIndex && flatTokens[currentIndex - 1] ? flatTokens[currentIndex - 1] : current;
116
+ return {
117
+ cursor,
118
+ parentIndex,
119
+ parent,
120
+ currentIndex,
121
+ current,
122
+ suggest: {
123
+ token: filter,
124
+ parent: this.find(filter.startIndex, this._tokens).token,
125
+ value: filter.value.substring(0, cursor - filter.startIndex)
126
+ },
127
+ tokens: this._tokens
128
+ };
129
+ }
130
+ lock() {
131
+ return this._consumers.find((c) => c.lock(this));
132
+ }
133
+ buffer() {
134
+ return this._buffer;
135
+ }
136
+ bufferValue() {
137
+ return this._buffer.join("");
138
+ }
139
+ start() {
140
+ return this._startIndex;
141
+ }
142
+ end() {
143
+ return this._endIndex;
144
+ }
145
+ ahead(inc) {
146
+ const start = this._endIndex + 1;
147
+ if (inc) {
148
+ return this._phrase.slice(start, start + inc);
149
+ }
150
+ return this._phrase.substring(start);
151
+ }
152
+ behind(inc) {
153
+ if (inc) {
154
+ return this.bufferValue().slice(-inc);
155
+ }
156
+ return this.bufferValue();
157
+ }
158
+ behindEndsWithAny(trim, ...values) {
159
+ const behind = trim ? this.behind().trimEnd() : this.behind();
160
+ return values.some((v) => behind.endsWith(v));
161
+ }
162
+ testBehind(regex) {
163
+ return regex.test(this.behind());
164
+ }
165
+ aheadStartsWithAny(trim, ...values) {
166
+ const ahead = trim ? this.ahead().trimStart() : this.ahead();
167
+ return values.some((v) => ahead.startsWith(v));
168
+ }
169
+ aheadIsEmpty(trim = false) {
170
+ return trim ? this.ahead().trim().length === 0 : this.ahead().length === 0;
171
+ }
172
+ testAhead(regex) {
173
+ return regex.test(this.ahead());
174
+ }
175
+ }
176
+ class TuiPhraseConsumer {
177
+ constructor() {
178
+ __publicField(this, "_buffer", []);
179
+ }
180
+ reset() {
181
+ this._buffer = [];
182
+ }
183
+ init(buffer, lexer) {
184
+ this._buffer = [...buffer];
185
+ }
186
+ append(next, lexer) {
187
+ this._buffer.push(next);
188
+ }
189
+ bufferValue() {
190
+ return this._buffer.join("");
191
+ }
192
+ endsWithAny(...values) {
193
+ const _bufferValue = this.bufferValue();
194
+ return values.some((v) => _bufferValue.endsWith(v));
195
+ }
196
+ test(regex) {
197
+ return regex.test(this.bufferValue());
198
+ }
199
+ }
200
+ class WhitespaceConsumer extends TuiPhraseConsumer {
201
+ lock(lexer) {
202
+ return lexer.bufferValue().match(/\s/) && lexer.ahead(1) !== " ";
203
+ }
204
+ consume(lexer) {
205
+ if (lexer.ahead(1) !== " ") {
206
+ return {
207
+ type: "whitespace",
208
+ startIndex: lexer.start(),
209
+ endIndex: lexer.end(),
210
+ value: this._buffer.join("")
211
+ };
212
+ }
213
+ return null;
214
+ }
215
+ }
216
+ class WordConsumer extends TuiPhraseConsumer {
217
+ lock(lexer) {
218
+ return !lexer.bufferValue().match(/\s/) && (lexer.ahead(1) === " " || lexer.ahead(1) === "");
219
+ }
220
+ consume(lexer) {
221
+ if (lexer.ahead(1) === " " || lexer.aheadIsEmpty(true)) {
222
+ return {
223
+ type: "word",
224
+ startIndex: lexer.start(),
225
+ endIndex: lexer.end(),
226
+ value: this._buffer.join("")
227
+ };
228
+ }
229
+ return null;
230
+ }
231
+ }
232
+ class WordLexer extends TuiPhraseLexer {
233
+ consumers() {
234
+ return [new WordConsumer(), new WhitespaceConsumer()];
235
+ }
236
+ }
237
+ class WordSuggestor {
238
+ constructor(suggestions) {
239
+ this.suggestions = suggestions;
240
+ }
241
+ suggest(phrase) {
242
+ return this.suggestions.filter((s) => s.indexOf(phrase.suggest.value) > -1);
243
+ }
244
+ }
245
+ function TuiPhrase({
246
+ value = "",
247
+ variant = "outlined",
248
+ suggestions = [],
249
+ lexer,
250
+ suggester,
251
+ startAdornment,
252
+ endAdornment,
253
+ onChange,
254
+ onKeyDown,
255
+ ...props
256
+ }) {
257
+ const containerRef = useRef();
258
+ const inputRef = useRef();
259
+ const menuRef = useRef();
260
+ const lexerRef = useRef(lexer || new WordLexer());
261
+ const analysisRef = useRef();
262
+ const suggesterRef = useRef(suggester || new WordSuggestor(suggestions));
263
+ const [optionsOpen, setOptionsOpen] = useState(false);
264
+ const [options, setOptions] = useState(suggestions);
265
+ useEffect(() => {
266
+ suggesterRef.current = suggester || new WordSuggestor(suggestions);
267
+ }, [suggester, suggestions]);
268
+ const lex = (inputValue, offset = 0) => {
269
+ let cursor = inputRef.current.querySelector("input").selectionStart + offset;
270
+ cursor = cursor < 0 ? 0 : cursor > inputValue.length ? inputValue.length : cursor;
271
+ analysisRef.current = lexerRef.current.parse(inputValue, cursor);
272
+ return analysisRef.current;
273
+ };
274
+ const _suggest = (inputValue, offset = 0) => {
275
+ const _suggestions = suggesterRef.current.suggest(lex(inputValue, offset));
276
+ setOptions((_suggestions == null ? void 0 : _suggestions.length) > 0 ? _suggestions : [...suggestions]);
277
+ };
278
+ const _onChange = (event) => {
279
+ onChange(event.target.value);
280
+ };
281
+ const _onInputKeyDown = (event) => {
282
+ const parsedEvent = parseEvent(event);
283
+ const { isEnter: isEnter2, isCtrl, isSpace: isSpace2, isEscape: isEscape2, isArrowDown: isArrowDown2 } = parsedEvent;
284
+ if (isArrowDown2) {
285
+ event.preventDefault();
286
+ menuRef.current.focus();
287
+ } else if (isCtrl && isSpace2) {
288
+ setOptionsOpen(true);
289
+ _suggest(value);
290
+ } else if (isEscape2) {
291
+ setOptionsOpen(!optionsOpen);
292
+ }
293
+ if (isEnter2 && optionsOpen && options.length === 1) {
294
+ onWordClick(options[0]);
295
+ event.preventDefault();
296
+ } else if (onKeyDown) {
297
+ onKeyDown(parsedEvent);
298
+ }
299
+ };
300
+ const _onSelectCapture = (event) => {
301
+ if (optionsOpen) {
302
+ _suggest(event.target.value);
303
+ }
304
+ };
305
+ const _onMenuKeyDown = (event) => {
306
+ const { isEscape: isEscape2 } = parseEvent(event);
307
+ if (isEscape2) {
308
+ inputRef.current.focus();
309
+ setOptionsOpen(false);
310
+ }
311
+ };
312
+ const onWordClick = (word) => {
313
+ const { suggest } = analysisRef.current;
314
+ const inputEl = inputRef.current.querySelector("input");
315
+ inputEl.focus();
316
+ inputEl.setSelectionRange(suggest.token.startIndex, suggest.token.endIndex + 1);
317
+ document.execCommand("insertText", false, word);
318
+ setOptionsOpen(false);
319
+ };
320
+ return /* @__PURE__ */ jsx(ClickAwayListener, { onClickAway: () => setOptionsOpen(false), children: /* @__PURE__ */ jsxs("div", { ref: containerRef, style: { position: "relative" }, children: [
321
+ /* @__PURE__ */ jsx(
322
+ TextField,
323
+ {
324
+ ref: inputRef,
325
+ ...props,
326
+ fullWidth: true,
327
+ autoComplete: "off",
328
+ value,
329
+ variant,
330
+ onChange: _onChange,
331
+ onKeyDown: _onInputKeyDown,
332
+ InputProps: {
333
+ ...props.InputProps,
334
+ onSelectCapture: _onSelectCapture,
335
+ startAdornment: startAdornment && /* @__PURE__ */ jsx(InputAdornment, { position: "start", children: startAdornment }),
336
+ endAdornment: endAdornment && /* @__PURE__ */ jsx(InputAdornment, { position: "end", children: endAdornment })
337
+ }
338
+ }
339
+ ),
340
+ /* @__PURE__ */ jsx(
341
+ Popper,
342
+ {
343
+ anchorEl: containerRef.current,
344
+ style: { width: "100%", zIndex: 100 },
345
+ open: optionsOpen && options.length > 0,
346
+ disablePortal: true,
347
+ children: /* @__PURE__ */ jsx(
348
+ Paper,
349
+ {
350
+ elevation: 2,
351
+ sx: { maxHeight: 200, overflow: "auto", borderTopRightRadius: 0, borderTopLeftRadius: 0 },
352
+ children: /* @__PURE__ */ jsx(
353
+ MenuList,
354
+ {
355
+ ref: menuRef,
356
+ onKeyDown: _onMenuKeyDown,
357
+ sx: {
358
+ "&:focus": {
359
+ outline: "none"
360
+ }
361
+ },
362
+ children: options == null ? void 0 : options.map((o) => /* @__PURE__ */ jsx(MenuItem, { onClick: () => onWordClick(o), children: /* @__PURE__ */ jsx(ListItemText, { children: o }) }, o))
363
+ }
364
+ )
365
+ }
366
+ )
367
+ }
368
+ )
369
+ ] }) });
370
+ }
371
+ const JSONViewer = ({ data, collapse = true, forceCompact = false, slotProps }) => {
372
+ var _a, _b, _c;
373
+ const theme = useTheme();
374
+ const [compact] = useMyLocalStorageItem(StorageKey.COMPACT_JSON);
375
+ const [flat] = useMyLocalStorageItem(StorageKey.FLATTEN_JSON);
376
+ const _ProvidedReactJson = useContextSelector(ClueComponentContext, (ctx) => ctx == null ? void 0 : ctx.ReactJson);
377
+ const { t } = useContextSelector(ClueComponentContext, (ctx) => ctx == null ? void 0 : ctx.i18next);
378
+ const [ReactJson, setReactJson] = useState(null);
379
+ const [query, setQuery] = useState("");
380
+ const isDark = useMemo(() => theme.palette.mode === "dark", [theme]);
381
+ const filteredData = useMemo(() => removeEmpty(data, compact || forceCompact), [compact, data, forceCompact]);
382
+ const searchedData = useMemo(() => {
383
+ const _searchedData = searchObject(filteredData, query);
384
+ return flat ? flatten(_searchedData) : _searchedData;
385
+ }, [filteredData, flat, query]);
386
+ const hasError = useMemo(() => {
387
+ try {
388
+ new RegExp(query);
389
+ return false;
390
+ } catch {
391
+ return true;
392
+ }
393
+ }, [query]);
394
+ useEffect(() => {
395
+ if (_ProvidedReactJson) {
396
+ setReactJson(() => _ProvidedReactJson);
397
+ } else {
398
+ setReactJson(lazy(() => import("@microlink/react-json-view")));
399
+ }
400
+ }, [_ProvidedReactJson]);
401
+ const shouldCollapse = (field) => {
402
+ return field.name !== "root" && field.type !== "object" || field.namespace.length > 3;
403
+ };
404
+ return data ? /* @__PURE__ */ jsxs(
405
+ Stack,
406
+ {
407
+ direction: "column",
408
+ spacing: 1,
409
+ ...slotProps == null ? void 0 : slotProps.stack,
410
+ sx: {
411
+ "& > div:first-of-type": { mt: 1, mr: 0.5 },
412
+ ...Array.isArray((_a = slotProps == null ? void 0 : slotProps.stack) == null ? void 0 : _a.sx) ? (_b = slotProps == null ? void 0 : slotProps.stack) == null ? void 0 : _b.sx : [(_c = slotProps == null ? void 0 : slotProps.stack) == null ? void 0 : _c.sx]
413
+ },
414
+ children: [
415
+ /* @__PURE__ */ jsx(
416
+ TuiPhrase,
417
+ {
418
+ value: query,
419
+ onChange: setQuery,
420
+ size: "small",
421
+ error: hasError,
422
+ label: t("json.viewer.search.label"),
423
+ placeholder: t("json.viewer.search.prompt")
424
+ }
425
+ ),
426
+ ReactJson && /* @__PURE__ */ jsx(
427
+ ReactJson,
428
+ {
429
+ src: searchedData,
430
+ theme: isDark ? "summerfruit" : "summerfruit:inverted",
431
+ indentWidth: 2,
432
+ displayDataTypes: !compact && !forceCompact,
433
+ displayObjectSize: !compact && !forceCompact,
434
+ shouldCollapse: collapse ? shouldCollapse : false,
435
+ quotesOnKeys: false,
436
+ style: {
437
+ flex: 1,
438
+ overflow: "auto",
439
+ height: "100%",
440
+ fontSize: compact || forceCompact ? "small" : "smaller",
441
+ borderRadius: theme.shape.borderRadius,
442
+ padding: theme.spacing(1)
443
+ },
444
+ enableClipboard: (_data) => {
445
+ if (typeof _data.src === "string") {
446
+ navigator.clipboard.writeText(_data.src);
447
+ } else {
448
+ navigator.clipboard.writeText(JSON.stringify(_data.src));
449
+ }
450
+ },
451
+ ...{
452
+ // Type declaration is wrong - this is a valid prop
453
+ displayArrayKey: !compact && !forceCompact
454
+ },
455
+ ...slotProps == null ? void 0 : slotProps.json
456
+ }
457
+ )
458
+ ]
459
+ }
460
+ ) : /* @__PURE__ */ jsx(Skeleton, { width: "100%", height: "95%", variant: "rounded" });
461
+ };
462
+ export {
463
+ JSONViewer as J,
464
+ parseEvent as p
465
+ };