@cccsaurora/clue-ui 1.0.2 → 1.1.0-dev.10

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 (180) hide show
  1. package/ActionForm-D4ryHO0M.js +436 -0
  2. package/AnnotationDetails-YAPoqw3R.js +175 -0
  3. package/AnnotationPreview-DiQDjt9s.js +188 -0
  4. package/ClueEnrichContext-DIn6g8tw.js +522 -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-CUmg6egw.js +6 -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 -34
  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 +104 -92
  32. package/components/EnrichedChip.js +134 -109
  33. package/components/EnrichedTypography.js +136 -110
  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 +37 -34
  40. package/components/actions/form/schemaAdapter.js +39 -20
  41. package/components/display/graph/ExpandMoreButton.js +10 -10
  42. package/components/display/graph/elements/NodeCard.js +92 -76
  43. package/components/display/graph/elements/NodeTag.js +15 -13
  44. package/components/display/graph/index.js +258 -200
  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/DynamicTabs.js +22 -17
  61. package/components/display/markdown/index.js +8527 -5670
  62. package/components/display/markdown/markdownPlugins/tabs.js +1 -1
  63. package/components/enrichment/EnrichPopover.js +55 -47
  64. package/components/fetchers/Fetcher.js +123 -95
  65. package/components/fetchers/PreviewModal.js +20 -17
  66. package/components/fetchers/StatusChip.js +22 -18
  67. package/components/group/Entry.js +13 -11
  68. package/components/group/Group.js +13 -10
  69. package/components/group/GroupControl.js +76 -65
  70. package/components/stats/QueryStatus.js +37 -28
  71. package/countBy-C69WslUA.js +14 -0
  72. package/data/event.js +6 -4
  73. package/database/index.js +2 -2
  74. package/debounce-bV0h5FC5.js +92 -0
  75. package/get-D3C3lEU3.js +8 -0
  76. package/groupBy-DC2oOuBN.js +14 -0
  77. package/hooks/ClueActionContext.js +6 -6
  78. package/hooks/ClueComponentContext.js +29 -23
  79. package/hooks/ClueConfigProvider.js +14 -12
  80. package/hooks/ClueDatabaseContext.js +19 -13
  81. package/hooks/ClueEnrichContext.js +8 -8
  82. package/hooks/ClueFetcherContext.js +74 -46
  83. package/hooks/ClueGroupContext.js +17 -14
  84. package/hooks/CluePopupContext.js +5 -5
  85. package/hooks/ClueProvider.js +12 -10
  86. package/hooks/selectors.js +22 -11
  87. package/hooks/useAnnotations.js +45 -29
  88. package/hooks/useClue.js +6 -4
  89. package/hooks/useClueActions.js +3 -3
  90. package/hooks/useClueConfig.js +5 -5
  91. package/hooks/useClueTypeConfig.js +3 -3
  92. package/hooks/useComparator.js +722 -435
  93. package/hooks/useErrors.js +22 -18
  94. package/hooks/useMyHighlights.js +66 -36
  95. package/hooks/useMyLocalStorage.js +63 -43
  96. package/iconify-CXMreGTg.js +1782 -0
  97. package/icons/Action.js +66 -49
  98. package/icons/Assessment.js +84 -68
  99. package/icons/Context.js +75 -61
  100. package/icons/Opinion.js +77 -65
  101. package/icons/iconMap.js +2 -2
  102. package/identity-CPGTqrE4.js +6 -0
  103. package/index-BDVjGvMI.js +696 -0
  104. package/index-BHPT3qoB.js +1172 -0
  105. package/index-BMxyILVD.js +465 -0
  106. package/index-BbPn6-Mw.js +15750 -0
  107. package/index-Dz1kF2MU.js +17654 -0
  108. package/isEmpty-BQkZubqU.js +29 -0
  109. package/isNil-CIubwp4T.js +6 -0
  110. package/isObject-FTY-5JQX.js +7 -0
  111. package/isObjectLike-OAgjjZye.js +48 -0
  112. package/isSymbol-Xd2FsJyp.js +8 -0
  113. package/last-CUCl67Im.js +7 -0
  114. package/main.js +58 -58
  115. package/package.json +1 -1
  116. package/sortBy-B-UKp4GT.js +100 -0
  117. package/sumBy-MYkDPHZL.js +8 -0
  118. package/tabs-xGuUGsJd.js +254 -0
  119. package/text/Frequency.js +42 -23
  120. package/toFinite-Bc55msYj.js +16 -0
  121. package/toNumber-DPxy1FBy.js +39 -0
  122. package/useClueTypeConfig-CH-nGq6a.js +3184 -0
  123. package/utils/chain.js +91 -64
  124. package/utils/classificationParser.js +519 -256
  125. package/utils/constants.js +35 -10
  126. package/utils/graph.js +72 -45
  127. package/utils/hashUtil.js +7 -7
  128. package/utils/line.js +131 -81
  129. package/utils/loggerUtil.js +5 -3
  130. package/utils/sessionStorage.js +41 -29
  131. package/utils/utils.js +9 -9
  132. package/utils/window.js +21 -10
  133. package/utils-Dr4wbKBZ.js +4182 -0
  134. package/ActionForm-BtTv0s4P.js +0 -340
  135. package/AnnotationDetails-D5tBIeEw.js +0 -160
  136. package/AnnotationPreview-CZr_CcZC.js +0 -140
  137. package/ClueEnrichContext-DH9lqjwH.js +0 -401
  138. package/FlexOne-BXWFOd1T.js +0 -6
  139. package/_Map-DXNg_Z-q.js +0 -54
  140. package/_MapCache-Cu25RRDU.js +0 -129
  141. package/_Uint8Array-DlJCtTvG.js +0 -102
  142. package/_baseAssignValue-CUmzp727.js +0 -20
  143. package/_baseClone-BlMmRXeX.js +0 -208
  144. package/_baseExtremum-P_0akmCi.js +0 -27
  145. package/_baseFlatten-CN7vDNEQ.js +0 -72
  146. package/_baseGet-Dgf6_xCm.js +0 -80
  147. package/_baseIsEqual-Cpjtfb3Q.js +0 -173
  148. package/_baseIteratee-CP1bocOX.js +0 -95
  149. package/_baseSlice-M5RKzt1A.js +0 -10
  150. package/_baseSum-wEbgNeUs.js +0 -10
  151. package/_baseUniq-tMFmk80M.js +0 -61
  152. package/_commonjsHelpers-C6fGbg64.js +0 -6
  153. package/_createAggregator-B4Cav8ZM.js +0 -53
  154. package/_getPrototype-CHAFQYL_.js +0 -5
  155. package/_getTag-BV_UoLYG.js +0 -90
  156. package/cloneDeep-BPVpFBzJ.js +0 -8
  157. package/countBy-DOutsa_w.js +0 -8
  158. package/debounce-DryYcbJ4.js +0 -56
  159. package/get-Bow1vKwx.js +0 -8
  160. package/groupBy-BheQYl6f.js +0 -8
  161. package/iconify-BBckr5AQ.js +0 -1263
  162. package/identity-ByMq8VxU.js +0 -6
  163. package/index-BUcHmehh.js +0 -975
  164. package/index-Bo-v5IAc.js +0 -12754
  165. package/index-CnaCBNrd.js +0 -358
  166. package/index-E7g8cRyW.js +0 -568
  167. package/index-p5_wX7q1.js +0 -11729
  168. package/isEmpty-g47Qir2A.js +0 -21
  169. package/isNil-CjWwlQS3.js +0 -6
  170. package/isObject-B53jY8Qg.js +0 -7
  171. package/isObjectLike-BatpeCIi.js +0 -29
  172. package/isSymbol-C3_SC0Qp.js +0 -8
  173. package/last-7CdUxN0r.js +0 -7
  174. package/sortBy-ITdmD17L.js +0 -79
  175. package/sumBy-DxJUU2E8.js +0 -8
  176. package/tabs-CgADNA57.js +0 -195
  177. package/toFinite-BMy6GObD.js +0 -14
  178. package/toNumber-YVhnnJv4.js +0 -31
  179. package/useClueTypeConfig-CneP98N_.js +0 -2260
  180. package/utils-CD0rFIFU.js +0 -2704
@@ -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-Dr4wbKBZ.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
+ };