bippy 0.2.21 → 0.2.23

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.
@@ -0,0 +1,1748 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ require('../chunk-6D4F5LZN.cjs');
6
+ var chunkXRTKUBYA_cjs = require('../chunk-XRTKUBYA.cjs');
7
+ var React17 = require('react');
8
+ var ReactDOM = require('react-dom');
9
+
10
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
+
12
+ var React17__default = /*#__PURE__*/_interopDefault(React17);
13
+ var ReactDOM__default = /*#__PURE__*/_interopDefault(ReactDOM);
14
+
15
+ /**
16
+ * @license bippy
17
+ *
18
+ * Copyright (c) Aiden Bai, Million Software, Inc.
19
+ *
20
+ * This source code is licensed under the MIT license found in the
21
+ * LICENSE file in the root directory of this source tree.
22
+ */
23
+ var __create = Object.create;
24
+ var __defProp = Object.defineProperty;
25
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
26
+ var __getOwnPropNames = Object.getOwnPropertyNames;
27
+ var __getProtoOf = Object.getPrototypeOf;
28
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
29
+ var __commonJS = (cb, mod) => function __require() {
30
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
31
+ };
32
+ var __export = (target, all) => {
33
+ for (var name in all)
34
+ __defProp(target, name, { get: all[name], enumerable: true });
35
+ };
36
+ var __copyProps = (to, from, except, desc) => {
37
+ if (from && typeof from === "object" || typeof from === "function") {
38
+ for (let key of __getOwnPropNames(from))
39
+ if (!__hasOwnProp.call(to, key) && key !== except)
40
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
41
+ }
42
+ return to;
43
+ };
44
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(!mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
45
+ var require_is_object = __commonJS({
46
+ "node_modules/is-object/index.js"(exports, module) {
47
+ module.exports = function isObject(x) {
48
+ return typeof x === "object" && x !== null;
49
+ };
50
+ }
51
+ });
52
+ var require_is_window = __commonJS({
53
+ "node_modules/is-window/index.js"(exports, module) {
54
+ module.exports = function(obj) {
55
+ if (obj == null) {
56
+ return false;
57
+ }
58
+ var o = Object(obj);
59
+ return o === o.window;
60
+ };
61
+ }
62
+ });
63
+ var require_is_dom = __commonJS({
64
+ "node_modules/is-dom/index.js"(exports, module) {
65
+ var isObject = require_is_object();
66
+ var isWindow = require_is_window();
67
+ function isNode(val) {
68
+ if (!isObject(val) || !isWindow(window) || typeof window.Node !== "function") {
69
+ return false;
70
+ }
71
+ return typeof val.nodeType === "number" && typeof val.nodeName === "string";
72
+ }
73
+ module.exports = isNode;
74
+ }
75
+ });
76
+ var themes_exports = {};
77
+ __export(themes_exports, {
78
+ chromeDark: () => theme,
79
+ chromeLight: () => theme2
80
+ });
81
+ var theme = {
82
+ BASE_FONT_FAMILY: "Menlo, monospace",
83
+ BASE_FONT_SIZE: "11px",
84
+ BASE_LINE_HEIGHT: 1.2,
85
+ BASE_BACKGROUND_COLOR: "rgb(36, 36, 36)",
86
+ BASE_COLOR: "rgb(213, 213, 213)",
87
+ OBJECT_PREVIEW_ARRAY_MAX_PROPERTIES: 10,
88
+ OBJECT_PREVIEW_OBJECT_MAX_PROPERTIES: 5,
89
+ OBJECT_NAME_COLOR: "rgb(227, 110, 236)",
90
+ OBJECT_VALUE_NULL_COLOR: "rgb(127, 127, 127)",
91
+ OBJECT_VALUE_UNDEFINED_COLOR: "rgb(127, 127, 127)",
92
+ OBJECT_VALUE_REGEXP_COLOR: "rgb(233, 63, 59)",
93
+ OBJECT_VALUE_STRING_COLOR: "rgb(233, 63, 59)",
94
+ OBJECT_VALUE_SYMBOL_COLOR: "rgb(233, 63, 59)",
95
+ OBJECT_VALUE_NUMBER_COLOR: "hsl(252, 100%, 75%)",
96
+ OBJECT_VALUE_BOOLEAN_COLOR: "hsl(252, 100%, 75%)",
97
+ OBJECT_VALUE_FUNCTION_PREFIX_COLOR: "rgb(85, 106, 242)",
98
+ HTML_TAG_COLOR: "rgb(93, 176, 215)",
99
+ HTML_TAGNAME_COLOR: "rgb(93, 176, 215)",
100
+ HTML_TAGNAME_TEXT_TRANSFORM: "lowercase",
101
+ HTML_ATTRIBUTE_NAME_COLOR: "rgb(155, 187, 220)",
102
+ HTML_ATTRIBUTE_VALUE_COLOR: "rgb(242, 151, 102)",
103
+ HTML_COMMENT_COLOR: "rgb(137, 137, 137)",
104
+ HTML_DOCTYPE_COLOR: "rgb(192, 192, 192)",
105
+ ARROW_COLOR: "rgb(145, 145, 145)",
106
+ ARROW_MARGIN_RIGHT: 3,
107
+ ARROW_FONT_SIZE: 12,
108
+ ARROW_ANIMATION_DURATION: "0",
109
+ TREENODE_FONT_FAMILY: "Menlo, monospace",
110
+ TREENODE_FONT_SIZE: "11px",
111
+ TREENODE_LINE_HEIGHT: 1.2,
112
+ TREENODE_PADDING_LEFT: 12,
113
+ TABLE_BORDER_COLOR: "rgb(85, 85, 85)",
114
+ TABLE_TH_BACKGROUND_COLOR: "rgb(44, 44, 44)",
115
+ TABLE_TH_HOVER_COLOR: "rgb(48, 48, 48)",
116
+ TABLE_SORT_ICON_COLOR: "black",
117
+ TABLE_DATA_BACKGROUND_IMAGE: "linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0) 50%, rgba(51, 139, 255, 0.0980392) 50%, rgba(51, 139, 255, 0.0980392))",
118
+ TABLE_DATA_BACKGROUND_SIZE: "128px 32px"
119
+ };
120
+ var theme2 = {
121
+ BASE_FONT_FAMILY: "Menlo, monospace",
122
+ BASE_FONT_SIZE: "11px",
123
+ BASE_LINE_HEIGHT: 1.2,
124
+ BASE_BACKGROUND_COLOR: "white",
125
+ BASE_COLOR: "black",
126
+ OBJECT_PREVIEW_ARRAY_MAX_PROPERTIES: 10,
127
+ OBJECT_PREVIEW_OBJECT_MAX_PROPERTIES: 5,
128
+ OBJECT_NAME_COLOR: "rgb(136, 19, 145)",
129
+ OBJECT_VALUE_NULL_COLOR: "rgb(128, 128, 128)",
130
+ OBJECT_VALUE_UNDEFINED_COLOR: "rgb(128, 128, 128)",
131
+ OBJECT_VALUE_REGEXP_COLOR: "rgb(196, 26, 22)",
132
+ OBJECT_VALUE_STRING_COLOR: "rgb(196, 26, 22)",
133
+ OBJECT_VALUE_SYMBOL_COLOR: "rgb(196, 26, 22)",
134
+ OBJECT_VALUE_NUMBER_COLOR: "rgb(28, 0, 207)",
135
+ OBJECT_VALUE_BOOLEAN_COLOR: "rgb(28, 0, 207)",
136
+ OBJECT_VALUE_FUNCTION_PREFIX_COLOR: "rgb(13, 34, 170)",
137
+ HTML_TAG_COLOR: "rgb(168, 148, 166)",
138
+ HTML_TAGNAME_COLOR: "rgb(136, 18, 128)",
139
+ HTML_TAGNAME_TEXT_TRANSFORM: "lowercase",
140
+ HTML_ATTRIBUTE_NAME_COLOR: "rgb(153, 69, 0)",
141
+ HTML_ATTRIBUTE_VALUE_COLOR: "rgb(26, 26, 166)",
142
+ HTML_COMMENT_COLOR: "rgb(35, 110, 37)",
143
+ HTML_DOCTYPE_COLOR: "rgb(192, 192, 192)",
144
+ ARROW_COLOR: "#6e6e6e",
145
+ ARROW_MARGIN_RIGHT: 3,
146
+ ARROW_FONT_SIZE: 12,
147
+ ARROW_ANIMATION_DURATION: "0",
148
+ TREENODE_FONT_FAMILY: "Menlo, monospace",
149
+ TREENODE_FONT_SIZE: "11px",
150
+ TREENODE_LINE_HEIGHT: 1.2,
151
+ TREENODE_PADDING_LEFT: 12,
152
+ TABLE_BORDER_COLOR: "#aaa",
153
+ TABLE_TH_BACKGROUND_COLOR: "#eee",
154
+ TABLE_TH_HOVER_COLOR: "hsla(0, 0%, 90%, 1)",
155
+ TABLE_SORT_ICON_COLOR: "#6e6e6e",
156
+ TABLE_DATA_BACKGROUND_IMAGE: "linear-gradient(to bottom, white, white 50%, rgb(234, 243, 255) 50%, rgb(234, 243, 255))",
157
+ TABLE_DATA_BACKGROUND_SIZE: "128px 32px"
158
+ };
159
+ var ExpandedPathsContext = React17.createContext([{}, () => {
160
+ }]);
161
+ var unselectable = {
162
+ WebkitTouchCallout: "none",
163
+ WebkitUserSelect: "none",
164
+ KhtmlUserSelect: "none",
165
+ MozUserSelect: "none",
166
+ msUserSelect: "none",
167
+ OUserSelect: "none",
168
+ userSelect: "none"
169
+ };
170
+ var createTheme = (theme32) => ({
171
+ DOMNodePreview: {
172
+ htmlOpenTag: {
173
+ base: {
174
+ color: theme32.HTML_TAG_COLOR
175
+ },
176
+ tagName: {
177
+ color: theme32.HTML_TAGNAME_COLOR,
178
+ textTransform: theme32.HTML_TAGNAME_TEXT_TRANSFORM
179
+ },
180
+ htmlAttributeName: {
181
+ color: theme32.HTML_ATTRIBUTE_NAME_COLOR
182
+ },
183
+ htmlAttributeValue: {
184
+ color: theme32.HTML_ATTRIBUTE_VALUE_COLOR
185
+ }
186
+ },
187
+ htmlCloseTag: {
188
+ base: {
189
+ color: theme32.HTML_TAG_COLOR
190
+ },
191
+ offsetLeft: {
192
+ marginLeft: -theme32.TREENODE_PADDING_LEFT
193
+ },
194
+ tagName: {
195
+ color: theme32.HTML_TAGNAME_COLOR,
196
+ textTransform: theme32.HTML_TAGNAME_TEXT_TRANSFORM
197
+ }
198
+ },
199
+ htmlComment: {
200
+ color: theme32.HTML_COMMENT_COLOR
201
+ },
202
+ htmlDoctype: {
203
+ color: theme32.HTML_DOCTYPE_COLOR
204
+ }
205
+ },
206
+ ObjectPreview: {
207
+ objectDescription: {
208
+ fontStyle: "italic"
209
+ },
210
+ preview: {
211
+ fontStyle: "italic"
212
+ },
213
+ arrayMaxProperties: theme32.OBJECT_PREVIEW_ARRAY_MAX_PROPERTIES,
214
+ objectMaxProperties: theme32.OBJECT_PREVIEW_OBJECT_MAX_PROPERTIES
215
+ },
216
+ ObjectName: {
217
+ base: {
218
+ color: theme32.OBJECT_NAME_COLOR
219
+ },
220
+ dimmed: {
221
+ opacity: 0.6
222
+ }
223
+ },
224
+ ObjectValue: {
225
+ objectValueNull: {
226
+ color: theme32.OBJECT_VALUE_NULL_COLOR
227
+ },
228
+ objectValueUndefined: {
229
+ color: theme32.OBJECT_VALUE_UNDEFINED_COLOR
230
+ },
231
+ objectValueRegExp: {
232
+ color: theme32.OBJECT_VALUE_REGEXP_COLOR
233
+ },
234
+ objectValueString: {
235
+ color: theme32.OBJECT_VALUE_STRING_COLOR
236
+ },
237
+ objectValueSymbol: {
238
+ color: theme32.OBJECT_VALUE_SYMBOL_COLOR
239
+ },
240
+ objectValueNumber: {
241
+ color: theme32.OBJECT_VALUE_NUMBER_COLOR
242
+ },
243
+ objectValueBoolean: {
244
+ color: theme32.OBJECT_VALUE_BOOLEAN_COLOR
245
+ },
246
+ objectValueFunctionPrefix: {
247
+ color: theme32.OBJECT_VALUE_FUNCTION_PREFIX_COLOR,
248
+ fontStyle: "italic"
249
+ },
250
+ objectValueFunctionName: {
251
+ fontStyle: "italic"
252
+ }
253
+ },
254
+ TreeView: {
255
+ treeViewOutline: {
256
+ padding: 0,
257
+ margin: 0,
258
+ listStyleType: "none"
259
+ }
260
+ },
261
+ TreeNode: {
262
+ treeNodeBase: {
263
+ color: theme32.BASE_COLOR,
264
+ backgroundColor: theme32.BASE_BACKGROUND_COLOR,
265
+ lineHeight: theme32.TREENODE_LINE_HEIGHT,
266
+ cursor: "default",
267
+ boxSizing: "border-box",
268
+ listStyle: "none",
269
+ fontFamily: theme32.TREENODE_FONT_FAMILY,
270
+ fontSize: theme32.TREENODE_FONT_SIZE
271
+ },
272
+ treeNodePreviewContainer: {},
273
+ treeNodePlaceholder: {
274
+ whiteSpace: "pre",
275
+ fontSize: theme32.ARROW_FONT_SIZE,
276
+ marginRight: theme32.ARROW_MARGIN_RIGHT,
277
+ ...unselectable
278
+ },
279
+ treeNodeArrow: {
280
+ base: {
281
+ color: theme32.ARROW_COLOR,
282
+ display: "inline-block",
283
+ fontSize: theme32.ARROW_FONT_SIZE,
284
+ marginRight: theme32.ARROW_MARGIN_RIGHT,
285
+ ...parseFloat(theme32.ARROW_ANIMATION_DURATION) > 0 ? {
286
+ transition: `transform ${theme32.ARROW_ANIMATION_DURATION} ease 0s`
287
+ } : {},
288
+ ...unselectable
289
+ },
290
+ expanded: {
291
+ WebkitTransform: "rotateZ(90deg)",
292
+ MozTransform: "rotateZ(90deg)",
293
+ transform: "rotateZ(90deg)"
294
+ },
295
+ collapsed: {
296
+ WebkitTransform: "rotateZ(0deg)",
297
+ MozTransform: "rotateZ(0deg)",
298
+ transform: "rotateZ(0deg)"
299
+ }
300
+ },
301
+ treeNodeChildNodesContainer: {
302
+ margin: 0,
303
+ paddingLeft: theme32.TREENODE_PADDING_LEFT
304
+ }
305
+ },
306
+ TableInspector: {
307
+ base: {
308
+ color: theme32.BASE_COLOR,
309
+ position: "relative",
310
+ border: `1px solid ${theme32.TABLE_BORDER_COLOR}`,
311
+ fontFamily: theme32.BASE_FONT_FAMILY,
312
+ fontSize: theme32.BASE_FONT_SIZE,
313
+ lineHeight: "120%",
314
+ boxSizing: "border-box",
315
+ cursor: "default"
316
+ }
317
+ },
318
+ TableInspectorHeaderContainer: {
319
+ base: {
320
+ top: 0,
321
+ height: "17px",
322
+ left: 0,
323
+ right: 0,
324
+ overflowX: "hidden"
325
+ },
326
+ table: {
327
+ tableLayout: "fixed",
328
+ borderSpacing: 0,
329
+ borderCollapse: "separate",
330
+ height: "100%",
331
+ width: "100%",
332
+ margin: 0
333
+ }
334
+ },
335
+ TableInspectorDataContainer: {
336
+ tr: {
337
+ display: "table-row"
338
+ },
339
+ td: {
340
+ boxSizing: "border-box",
341
+ border: "none",
342
+ height: "16px",
343
+ verticalAlign: "top",
344
+ padding: "1px 4px",
345
+ WebkitUserSelect: "text",
346
+ whiteSpace: "nowrap",
347
+ textOverflow: "ellipsis",
348
+ overflow: "hidden",
349
+ lineHeight: "14px"
350
+ },
351
+ div: {
352
+ position: "static",
353
+ top: "17px",
354
+ bottom: 0,
355
+ overflowY: "overlay",
356
+ transform: "translateZ(0)",
357
+ left: 0,
358
+ right: 0,
359
+ overflowX: "hidden"
360
+ },
361
+ table: {
362
+ positon: "static",
363
+ left: 0,
364
+ top: 0,
365
+ right: 0,
366
+ bottom: 0,
367
+ borderTop: "0 none transparent",
368
+ margin: 0,
369
+ backgroundImage: theme32.TABLE_DATA_BACKGROUND_IMAGE,
370
+ backgroundSize: theme32.TABLE_DATA_BACKGROUND_SIZE,
371
+ tableLayout: "fixed",
372
+ borderSpacing: 0,
373
+ borderCollapse: "separate",
374
+ width: "100%",
375
+ fontSize: theme32.BASE_FONT_SIZE,
376
+ lineHeight: "120%"
377
+ }
378
+ },
379
+ TableInspectorTH: {
380
+ base: {
381
+ position: "relative",
382
+ height: "auto",
383
+ textAlign: "left",
384
+ backgroundColor: theme32.TABLE_TH_BACKGROUND_COLOR,
385
+ borderBottom: `1px solid ${theme32.TABLE_BORDER_COLOR}`,
386
+ fontWeight: "normal",
387
+ verticalAlign: "middle",
388
+ padding: "0 4px",
389
+ whiteSpace: "nowrap",
390
+ textOverflow: "ellipsis",
391
+ overflow: "hidden",
392
+ lineHeight: "14px",
393
+ ":hover": {
394
+ backgroundColor: theme32.TABLE_TH_HOVER_COLOR
395
+ }
396
+ },
397
+ div: {
398
+ whiteSpace: "nowrap",
399
+ textOverflow: "ellipsis",
400
+ overflow: "hidden",
401
+ fontSize: theme32.BASE_FONT_SIZE,
402
+ lineHeight: "120%"
403
+ }
404
+ },
405
+ TableInspectorLeftBorder: {
406
+ none: {
407
+ borderLeft: "none"
408
+ },
409
+ solid: {
410
+ borderLeft: `1px solid ${theme32.TABLE_BORDER_COLOR}`
411
+ }
412
+ },
413
+ TableInspectorSortIcon: {
414
+ display: "block",
415
+ marginRight: 3,
416
+ width: 8,
417
+ height: 7,
418
+ marginTop: -7,
419
+ color: theme32.TABLE_SORT_ICON_COLOR,
420
+ fontSize: 12,
421
+ ...unselectable
422
+ }
423
+ });
424
+ var DEFAULT_THEME_NAME = "chromeLight";
425
+ var ThemeContext = React17.createContext(createTheme(themes_exports[DEFAULT_THEME_NAME]));
426
+ var useStyles = (baseStylesKey) => {
427
+ const themeStyles = React17.useContext(ThemeContext);
428
+ return themeStyles[baseStylesKey];
429
+ };
430
+ var themeAcceptor = (WrappedComponent) => {
431
+ const ThemeAcceptor = ({ theme: theme32 = DEFAULT_THEME_NAME, ...restProps }) => {
432
+ const themeStyles = React17.useMemo(() => {
433
+ switch (Object.prototype.toString.call(theme32)) {
434
+ case "[object String]":
435
+ return createTheme(themes_exports[theme32]);
436
+ case "[object Object]":
437
+ return createTheme(theme32);
438
+ default:
439
+ return createTheme(themes_exports[DEFAULT_THEME_NAME]);
440
+ }
441
+ }, [theme32]);
442
+ return /* @__PURE__ */ React17__default.default.createElement(ThemeContext.Provider, {
443
+ value: themeStyles
444
+ }, /* @__PURE__ */ React17__default.default.createElement(WrappedComponent, {
445
+ ...restProps
446
+ }));
447
+ };
448
+ return ThemeAcceptor;
449
+ };
450
+ var Arrow = ({ expanded, styles }) => /* @__PURE__ */ React17__default.default.createElement("span", {
451
+ style: {
452
+ ...styles.base,
453
+ ...expanded ? styles.expanded : styles.collapsed
454
+ }
455
+ }, "\u25B6");
456
+ var TreeNode = React17.memo((props) => {
457
+ props = {
458
+ expanded: true,
459
+ nodeRenderer: ({ name }) => /* @__PURE__ */ React17__default.default.createElement("span", null, name),
460
+ onClick: () => {
461
+ },
462
+ shouldShowArrow: false,
463
+ shouldShowPlaceholder: true,
464
+ ...props
465
+ };
466
+ const { expanded, onClick, children, nodeRenderer, title, shouldShowArrow, shouldShowPlaceholder } = props;
467
+ const styles = useStyles("TreeNode");
468
+ const NodeRenderer = nodeRenderer;
469
+ return /* @__PURE__ */ React17__default.default.createElement("li", {
470
+ "aria-expanded": expanded,
471
+ role: "treeitem",
472
+ style: styles.treeNodeBase,
473
+ title
474
+ }, /* @__PURE__ */ React17__default.default.createElement("div", {
475
+ style: styles.treeNodePreviewContainer,
476
+ onClick
477
+ }, shouldShowArrow || React17.Children.count(children) > 0 ? /* @__PURE__ */ React17__default.default.createElement(Arrow, {
478
+ expanded,
479
+ styles: styles.treeNodeArrow
480
+ }) : shouldShowPlaceholder && /* @__PURE__ */ React17__default.default.createElement("span", {
481
+ style: styles.treeNodePlaceholder
482
+ }, "\xA0"), /* @__PURE__ */ React17__default.default.createElement(NodeRenderer, {
483
+ ...props
484
+ })), /* @__PURE__ */ React17__default.default.createElement("ol", {
485
+ role: "group",
486
+ style: styles.treeNodeChildNodesContainer
487
+ }, expanded ? children : void 0));
488
+ });
489
+ var DEFAULT_ROOT_PATH = "$";
490
+ var WILDCARD = "*";
491
+ function hasChildNodes(data, dataIterator) {
492
+ return !dataIterator(data).next().done;
493
+ }
494
+ var wildcardPathsFromLevel = (level) => {
495
+ return Array.from({ length: level }, (_, i) => [DEFAULT_ROOT_PATH].concat(Array.from({ length: i }, () => "*")).join("."));
496
+ };
497
+ var getExpandedPaths = (data, dataIterator, expandPaths, expandLevel, prevExpandedPaths) => {
498
+ const wildcardPaths = [].concat(wildcardPathsFromLevel(expandLevel)).concat(expandPaths).filter((path) => typeof path === "string");
499
+ const expandedPaths = [];
500
+ wildcardPaths.forEach((wildcardPath) => {
501
+ const keyPaths = wildcardPath.split(".");
502
+ const populatePaths = (curData, curPath, depth) => {
503
+ if (depth === keyPaths.length) {
504
+ expandedPaths.push(curPath);
505
+ return;
506
+ }
507
+ const key = keyPaths[depth];
508
+ if (depth === 0) {
509
+ if (hasChildNodes(curData, dataIterator) && (key === DEFAULT_ROOT_PATH || key === WILDCARD)) {
510
+ populatePaths(curData, DEFAULT_ROOT_PATH, depth + 1);
511
+ }
512
+ } else {
513
+ if (key === WILDCARD) {
514
+ for (const { name, data: data2 } of dataIterator(curData)) {
515
+ if (hasChildNodes(data2, dataIterator)) {
516
+ populatePaths(data2, `${curPath}.${name}`, depth + 1);
517
+ }
518
+ }
519
+ } else {
520
+ const value = curData[key];
521
+ if (hasChildNodes(value, dataIterator)) {
522
+ populatePaths(value, `${curPath}.${key}`, depth + 1);
523
+ }
524
+ }
525
+ }
526
+ };
527
+ populatePaths(data, "", 0);
528
+ });
529
+ return expandedPaths.reduce((obj, path) => {
530
+ obj[path] = true;
531
+ return obj;
532
+ }, { ...prevExpandedPaths });
533
+ };
534
+ var ConnectedTreeNode = React17.memo((props) => {
535
+ const { data, dataIterator, path, depth, nodeRenderer } = props;
536
+ const [expandedPaths, setExpandedPaths] = React17.useContext(ExpandedPathsContext);
537
+ const nodeHasChildNodes = hasChildNodes(data, dataIterator);
538
+ const expanded = !!expandedPaths[path];
539
+ const handleClick = React17.useCallback(() => nodeHasChildNodes && setExpandedPaths((prevExpandedPaths) => ({
540
+ ...prevExpandedPaths,
541
+ [path]: !expanded
542
+ })), [nodeHasChildNodes, setExpandedPaths, path, expanded]);
543
+ return /* @__PURE__ */ React17__default.default.createElement(TreeNode, {
544
+ expanded,
545
+ onClick: handleClick,
546
+ shouldShowArrow: nodeHasChildNodes,
547
+ shouldShowPlaceholder: depth > 0,
548
+ nodeRenderer,
549
+ ...props
550
+ }, expanded ? [...dataIterator(data)].map(({ name, data: data2, ...renderNodeProps }) => {
551
+ return /* @__PURE__ */ React17__default.default.createElement(ConnectedTreeNode, {
552
+ name,
553
+ data: data2,
554
+ depth: depth + 1,
555
+ path: `${path}.${name}`,
556
+ key: name,
557
+ dataIterator,
558
+ nodeRenderer,
559
+ ...renderNodeProps
560
+ });
561
+ }) : null);
562
+ });
563
+ var TreeView = React17.memo(({ name, data, dataIterator, nodeRenderer, expandPaths, expandLevel }) => {
564
+ const styles = useStyles("TreeView");
565
+ const stateAndSetter = React17.useState({});
566
+ const [, setExpandedPaths] = stateAndSetter;
567
+ React17.useLayoutEffect(() => setExpandedPaths((prevExpandedPaths) => getExpandedPaths(data, dataIterator, expandPaths, expandLevel, prevExpandedPaths)), [data, dataIterator, expandPaths, expandLevel]);
568
+ return /* @__PURE__ */ React17__default.default.createElement(ExpandedPathsContext.Provider, {
569
+ value: stateAndSetter
570
+ }, /* @__PURE__ */ React17__default.default.createElement("ol", {
571
+ role: "tree",
572
+ style: styles.treeViewOutline
573
+ }, /* @__PURE__ */ React17__default.default.createElement(ConnectedTreeNode, {
574
+ name,
575
+ data,
576
+ dataIterator,
577
+ depth: 0,
578
+ path: DEFAULT_ROOT_PATH,
579
+ nodeRenderer
580
+ })));
581
+ });
582
+ var ObjectName = ({ name, dimmed = false, styles = {} }) => {
583
+ const themeStyles = useStyles("ObjectName");
584
+ const appliedStyles = {
585
+ ...themeStyles.base,
586
+ ...dimmed ? themeStyles["dimmed"] : {},
587
+ ...styles
588
+ };
589
+ return /* @__PURE__ */ React17__default.default.createElement("span", {
590
+ style: appliedStyles
591
+ }, name);
592
+ };
593
+ var ObjectValue = ({ object, styles }) => {
594
+ const themeStyles = useStyles("ObjectValue");
595
+ const mkStyle = (key) => ({ ...themeStyles[key], ...styles });
596
+ switch (typeof object) {
597
+ case "bigint":
598
+ return /* @__PURE__ */ React17__default.default.createElement("span", {
599
+ style: mkStyle("objectValueNumber")
600
+ }, String(object), "n");
601
+ case "number":
602
+ return /* @__PURE__ */ React17__default.default.createElement("span", {
603
+ style: mkStyle("objectValueNumber")
604
+ }, String(object));
605
+ case "string":
606
+ return /* @__PURE__ */ React17__default.default.createElement("span", {
607
+ style: mkStyle("objectValueString")
608
+ }, '"', object, '"');
609
+ case "boolean":
610
+ return /* @__PURE__ */ React17__default.default.createElement("span", {
611
+ style: mkStyle("objectValueBoolean")
612
+ }, String(object));
613
+ case "undefined":
614
+ return /* @__PURE__ */ React17__default.default.createElement("span", {
615
+ style: mkStyle("objectValueUndefined")
616
+ }, "undefined");
617
+ case "object":
618
+ if (object === null) {
619
+ return /* @__PURE__ */ React17__default.default.createElement("span", {
620
+ style: mkStyle("objectValueNull")
621
+ }, "null");
622
+ }
623
+ if (object instanceof Date) {
624
+ return /* @__PURE__ */ React17__default.default.createElement("span", null, object.toString());
625
+ }
626
+ if (object instanceof RegExp) {
627
+ return /* @__PURE__ */ React17__default.default.createElement("span", {
628
+ style: mkStyle("objectValueRegExp")
629
+ }, object.toString());
630
+ }
631
+ if (Array.isArray(object)) {
632
+ return /* @__PURE__ */ React17__default.default.createElement("span", null, `Array(${object.length})`);
633
+ }
634
+ if (!object.constructor) {
635
+ return /* @__PURE__ */ React17__default.default.createElement("span", null, "Object");
636
+ }
637
+ if (typeof object.constructor.isBuffer === "function" && object.constructor.isBuffer(object)) {
638
+ return /* @__PURE__ */ React17__default.default.createElement("span", null, `Buffer[${object.length}]`);
639
+ }
640
+ return /* @__PURE__ */ React17__default.default.createElement("span", null, object.constructor.name);
641
+ case "function":
642
+ return /* @__PURE__ */ React17__default.default.createElement("span", null, /* @__PURE__ */ React17__default.default.createElement("span", {
643
+ style: mkStyle("objectValueFunctionPrefix")
644
+ }, "\u0192\xA0"), /* @__PURE__ */ React17__default.default.createElement("span", {
645
+ style: mkStyle("objectValueFunctionName")
646
+ }, object.name, "()"));
647
+ case "symbol":
648
+ return /* @__PURE__ */ React17__default.default.createElement("span", {
649
+ style: mkStyle("objectValueSymbol")
650
+ }, object.toString());
651
+ default:
652
+ return /* @__PURE__ */ React17__default.default.createElement("span", null);
653
+ }
654
+ };
655
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
656
+ var propertyIsEnumerable = Object.prototype.propertyIsEnumerable;
657
+ function getPropertyValue(object, propertyName) {
658
+ const propertyDescriptor = Object.getOwnPropertyDescriptor(object, propertyName);
659
+ if (propertyDescriptor.get) {
660
+ try {
661
+ return propertyDescriptor.get();
662
+ } catch {
663
+ return propertyDescriptor.get;
664
+ }
665
+ }
666
+ return object[propertyName];
667
+ }
668
+ function intersperse(arr, sep) {
669
+ if (arr.length === 0) {
670
+ return [];
671
+ }
672
+ return arr.slice(1).reduce((xs, x) => xs.concat([sep, x]), [arr[0]]);
673
+ }
674
+ var ObjectPreview = ({ data }) => {
675
+ const styles = useStyles("ObjectPreview");
676
+ const object = data;
677
+ if (typeof object !== "object" || object === null || object instanceof Date || object instanceof RegExp) {
678
+ return /* @__PURE__ */ React17__default.default.createElement(ObjectValue, {
679
+ object
680
+ });
681
+ }
682
+ if (Array.isArray(object)) {
683
+ const maxProperties = styles.arrayMaxProperties;
684
+ const previewArray = object.slice(0, maxProperties).map((element, index) => /* @__PURE__ */ React17__default.default.createElement(ObjectValue, {
685
+ key: index,
686
+ object: element
687
+ }));
688
+ if (object.length > maxProperties) {
689
+ previewArray.push(/* @__PURE__ */ React17__default.default.createElement("span", {
690
+ key: "ellipsis"
691
+ }, "\u2026"));
692
+ }
693
+ const arrayLength = object.length;
694
+ return /* @__PURE__ */ React17__default.default.createElement(React17__default.default.Fragment, null, /* @__PURE__ */ React17__default.default.createElement("span", {
695
+ style: styles.objectDescription
696
+ }, arrayLength === 0 ? `` : `(${arrayLength})\xA0`), /* @__PURE__ */ React17__default.default.createElement("span", {
697
+ style: styles.preview
698
+ }, "[", intersperse(previewArray, ", "), "]"));
699
+ } else {
700
+ const maxProperties = styles.objectMaxProperties;
701
+ const propertyNodes = [];
702
+ for (const propertyName in object) {
703
+ if (hasOwnProperty.call(object, propertyName)) {
704
+ let ellipsis;
705
+ if (propertyNodes.length === maxProperties - 1 && Object.keys(object).length > maxProperties) {
706
+ ellipsis = /* @__PURE__ */ React17__default.default.createElement("span", {
707
+ key: "ellipsis"
708
+ }, "\u2026");
709
+ }
710
+ const propertyValue = getPropertyValue(object, propertyName);
711
+ propertyNodes.push(/* @__PURE__ */ React17__default.default.createElement("span", {
712
+ key: propertyName
713
+ }, /* @__PURE__ */ React17__default.default.createElement(ObjectName, {
714
+ name: propertyName || `""`
715
+ }), ":\xA0", /* @__PURE__ */ React17__default.default.createElement(ObjectValue, {
716
+ object: propertyValue
717
+ }), ellipsis));
718
+ if (ellipsis)
719
+ break;
720
+ }
721
+ }
722
+ const objectConstructorName = object.constructor ? object.constructor.name : "Object";
723
+ return /* @__PURE__ */ React17__default.default.createElement(React17__default.default.Fragment, null, /* @__PURE__ */ React17__default.default.createElement("span", {
724
+ style: styles.objectDescription
725
+ }, objectConstructorName === "Object" ? "" : `${objectConstructorName} `), /* @__PURE__ */ React17__default.default.createElement("span", {
726
+ style: styles.preview
727
+ }, "{", intersperse(propertyNodes, ", "), "}"));
728
+ }
729
+ };
730
+ var ObjectRootLabel = ({ name, data }) => {
731
+ if (typeof name === "string") {
732
+ return /* @__PURE__ */ React17__default.default.createElement("span", null, /* @__PURE__ */ React17__default.default.createElement(ObjectName, {
733
+ name
734
+ }), /* @__PURE__ */ React17__default.default.createElement("span", null, ": "), /* @__PURE__ */ React17__default.default.createElement(ObjectPreview, {
735
+ data
736
+ }));
737
+ } else {
738
+ return /* @__PURE__ */ React17__default.default.createElement(ObjectPreview, {
739
+ data
740
+ });
741
+ }
742
+ };
743
+ var ObjectLabel = ({ name, data, isNonenumerable = false }) => {
744
+ const object = data;
745
+ return /* @__PURE__ */ React17__default.default.createElement("span", null, typeof name === "string" ? /* @__PURE__ */ React17__default.default.createElement(ObjectName, {
746
+ name,
747
+ dimmed: isNonenumerable
748
+ }) : /* @__PURE__ */ React17__default.default.createElement(ObjectPreview, {
749
+ data: name
750
+ }), /* @__PURE__ */ React17__default.default.createElement("span", null, ": "), /* @__PURE__ */ React17__default.default.createElement(ObjectValue, {
751
+ object
752
+ }));
753
+ };
754
+ var createIterator = (showNonenumerable, sortObjectKeys) => {
755
+ const objectIterator = function* (data) {
756
+ const shouldIterate = typeof data === "object" && data !== null || typeof data === "function";
757
+ if (!shouldIterate)
758
+ return;
759
+ const dataIsArray = Array.isArray(data);
760
+ if (!dataIsArray && data[Symbol.iterator]) {
761
+ let i = 0;
762
+ for (const entry of data) {
763
+ if (Array.isArray(entry) && entry.length === 2) {
764
+ const [k, v] = entry;
765
+ yield {
766
+ name: k,
767
+ data: v
768
+ };
769
+ } else {
770
+ yield {
771
+ name: i.toString(),
772
+ data: entry
773
+ };
774
+ }
775
+ i++;
776
+ }
777
+ } else {
778
+ const keys = Object.getOwnPropertyNames(data);
779
+ if (sortObjectKeys === true && !dataIsArray) {
780
+ keys.sort();
781
+ } else if (typeof sortObjectKeys === "function") {
782
+ keys.sort(sortObjectKeys);
783
+ }
784
+ for (const propertyName of keys) {
785
+ if (propertyIsEnumerable.call(data, propertyName)) {
786
+ const propertyValue = getPropertyValue(data, propertyName);
787
+ yield {
788
+ name: propertyName || `""`,
789
+ data: propertyValue
790
+ };
791
+ } else if (showNonenumerable) {
792
+ let propertyValue;
793
+ try {
794
+ propertyValue = getPropertyValue(data, propertyName);
795
+ } catch (e) {
796
+ }
797
+ if (propertyValue !== void 0) {
798
+ yield {
799
+ name: propertyName,
800
+ data: propertyValue,
801
+ isNonenumerable: true
802
+ };
803
+ }
804
+ }
805
+ }
806
+ if (showNonenumerable && data !== Object.prototype) {
807
+ yield {
808
+ name: "__proto__",
809
+ data: Object.getPrototypeOf(data),
810
+ isNonenumerable: true
811
+ };
812
+ }
813
+ }
814
+ };
815
+ return objectIterator;
816
+ };
817
+ var defaultNodeRenderer = ({ depth, name, data, isNonenumerable }) => depth === 0 ? /* @__PURE__ */ React17__default.default.createElement(ObjectRootLabel, {
818
+ name,
819
+ data
820
+ }) : /* @__PURE__ */ React17__default.default.createElement(ObjectLabel, {
821
+ name,
822
+ data,
823
+ isNonenumerable
824
+ });
825
+ var ObjectInspector = ({ showNonenumerable = false, sortObjectKeys, nodeRenderer, ...treeViewProps }) => {
826
+ const dataIterator = createIterator(showNonenumerable, sortObjectKeys);
827
+ const renderer = nodeRenderer ? nodeRenderer : defaultNodeRenderer;
828
+ return /* @__PURE__ */ React17__default.default.createElement(TreeView, {
829
+ nodeRenderer: renderer,
830
+ dataIterator,
831
+ ...treeViewProps
832
+ });
833
+ };
834
+ var themedObjectInspector = themeAcceptor(ObjectInspector);
835
+ function getHeaders(data) {
836
+ if (typeof data === "object") {
837
+ let rowHeaders = [];
838
+ if (Array.isArray(data)) {
839
+ const nRows = data.length;
840
+ rowHeaders = [...Array(nRows).keys()];
841
+ } else if (data !== null) {
842
+ rowHeaders = Object.keys(data);
843
+ }
844
+ const colHeaders = rowHeaders.reduce((colHeaders2, rowHeader) => {
845
+ const row = data[rowHeader];
846
+ if (typeof row === "object" && row !== null) {
847
+ const cols = Object.keys(row);
848
+ cols.reduce((xs, x) => {
849
+ if (!xs.includes(x)) {
850
+ xs.push(x);
851
+ }
852
+ return xs;
853
+ }, colHeaders2);
854
+ }
855
+ return colHeaders2;
856
+ }, []);
857
+ return {
858
+ rowHeaders,
859
+ colHeaders
860
+ };
861
+ }
862
+ return void 0;
863
+ }
864
+ var DataContainer = ({ rows, columns, rowsData }) => {
865
+ const styles = useStyles("TableInspectorDataContainer");
866
+ const borderStyles = useStyles("TableInspectorLeftBorder");
867
+ return /* @__PURE__ */ React17__default.default.createElement("div", {
868
+ style: styles.div
869
+ }, /* @__PURE__ */ React17__default.default.createElement("table", {
870
+ style: styles.table
871
+ }, /* @__PURE__ */ React17__default.default.createElement("colgroup", null), /* @__PURE__ */ React17__default.default.createElement("tbody", null, rows.map((row, i) => /* @__PURE__ */ React17__default.default.createElement("tr", {
872
+ key: row,
873
+ style: styles.tr
874
+ }, /* @__PURE__ */ React17__default.default.createElement("td", {
875
+ style: { ...styles.td, ...borderStyles.none }
876
+ }, row), columns.map((column) => {
877
+ const rowData = rowsData[i];
878
+ if (typeof rowData === "object" && rowData !== null && hasOwnProperty.call(rowData, column)) {
879
+ return /* @__PURE__ */ React17__default.default.createElement("td", {
880
+ key: column,
881
+ style: { ...styles.td, ...borderStyles.solid }
882
+ }, /* @__PURE__ */ React17__default.default.createElement(ObjectValue, {
883
+ object: rowData[column]
884
+ }));
885
+ } else {
886
+ return /* @__PURE__ */ React17__default.default.createElement("td", {
887
+ key: column,
888
+ style: { ...styles.td, ...borderStyles.solid }
889
+ });
890
+ }
891
+ }))))));
892
+ };
893
+ var SortIconContainer = (props) => /* @__PURE__ */ React17__default.default.createElement("div", {
894
+ style: {
895
+ position: "absolute",
896
+ top: 1,
897
+ right: 0,
898
+ bottom: 1,
899
+ display: "flex",
900
+ alignItems: "center"
901
+ }
902
+ }, props.children);
903
+ var SortIcon = ({ sortAscending }) => {
904
+ const styles = useStyles("TableInspectorSortIcon");
905
+ const glyph = sortAscending ? "\u25B2" : "\u25BC";
906
+ return /* @__PURE__ */ React17__default.default.createElement("div", {
907
+ style: styles
908
+ }, glyph);
909
+ };
910
+ var TH = ({
911
+ sortAscending = false,
912
+ sorted = false,
913
+ onClick = void 0,
914
+ borderStyle = {},
915
+ children,
916
+ ...thProps
917
+ }) => {
918
+ const styles = useStyles("TableInspectorTH");
919
+ const [hovered, setHovered] = React17.useState(false);
920
+ const handleMouseEnter = React17.useCallback(() => setHovered(true), []);
921
+ const handleMouseLeave = React17.useCallback(() => setHovered(false), []);
922
+ return /* @__PURE__ */ React17__default.default.createElement("th", {
923
+ ...thProps,
924
+ style: {
925
+ ...styles.base,
926
+ ...borderStyle,
927
+ ...hovered ? styles.base[":hover"] : {}
928
+ },
929
+ onMouseEnter: handleMouseEnter,
930
+ onMouseLeave: handleMouseLeave,
931
+ onClick
932
+ }, /* @__PURE__ */ React17__default.default.createElement("div", {
933
+ style: styles.div
934
+ }, children), sorted && /* @__PURE__ */ React17__default.default.createElement(SortIconContainer, null, /* @__PURE__ */ React17__default.default.createElement(SortIcon, {
935
+ sortAscending
936
+ })));
937
+ };
938
+ var HeaderContainer = ({
939
+ indexColumnText = "(index)",
940
+ columns = [],
941
+ sorted,
942
+ sortIndexColumn,
943
+ sortColumn,
944
+ sortAscending,
945
+ onTHClick,
946
+ onIndexTHClick
947
+ }) => {
948
+ const styles = useStyles("TableInspectorHeaderContainer");
949
+ const borderStyles = useStyles("TableInspectorLeftBorder");
950
+ return /* @__PURE__ */ React17__default.default.createElement("div", {
951
+ style: styles.base
952
+ }, /* @__PURE__ */ React17__default.default.createElement("table", {
953
+ style: styles.table
954
+ }, /* @__PURE__ */ React17__default.default.createElement("tbody", null, /* @__PURE__ */ React17__default.default.createElement("tr", null, /* @__PURE__ */ React17__default.default.createElement(TH, {
955
+ borderStyle: borderStyles.none,
956
+ sorted: sorted && sortIndexColumn,
957
+ sortAscending,
958
+ onClick: onIndexTHClick
959
+ }, indexColumnText), columns.map((column) => /* @__PURE__ */ React17__default.default.createElement(TH, {
960
+ borderStyle: borderStyles.solid,
961
+ key: column,
962
+ sorted: sorted && sortColumn === column,
963
+ sortAscending,
964
+ onClick: onTHClick.bind(null, column)
965
+ }, column))))));
966
+ };
967
+ var TableInspector = ({
968
+ data,
969
+ columns
970
+ }) => {
971
+ const styles = useStyles("TableInspector");
972
+ const [{ sorted, sortIndexColumn, sortColumn, sortAscending }, setState] = React17.useState({
973
+ sorted: false,
974
+ sortIndexColumn: false,
975
+ sortColumn: void 0,
976
+ sortAscending: false
977
+ });
978
+ const handleIndexTHClick = React17.useCallback(() => {
979
+ setState(({ sortIndexColumn: sortIndexColumn2, sortAscending: sortAscending2 }) => ({
980
+ sorted: true,
981
+ sortIndexColumn: true,
982
+ sortColumn: void 0,
983
+ sortAscending: sortIndexColumn2 ? !sortAscending2 : true
984
+ }));
985
+ }, []);
986
+ const handleTHClick = React17.useCallback((col) => {
987
+ setState(({ sortColumn: sortColumn2, sortAscending: sortAscending2 }) => ({
988
+ sorted: true,
989
+ sortIndexColumn: false,
990
+ sortColumn: col,
991
+ sortAscending: col === sortColumn2 ? !sortAscending2 : true
992
+ }));
993
+ }, []);
994
+ if (typeof data !== "object" || data === null) {
995
+ return /* @__PURE__ */ React17__default.default.createElement("div", null);
996
+ }
997
+ let { rowHeaders, colHeaders } = getHeaders(data);
998
+ if (columns !== void 0) {
999
+ colHeaders = columns;
1000
+ }
1001
+ let rowsData = rowHeaders.map((rowHeader) => data[rowHeader]);
1002
+ let columnDataWithRowIndexes;
1003
+ if (sortColumn !== void 0) {
1004
+ columnDataWithRowIndexes = rowsData.map((rowData, index) => {
1005
+ if (typeof rowData === "object" && rowData !== null) {
1006
+ const columnData = rowData[sortColumn];
1007
+ return [columnData, index];
1008
+ }
1009
+ return [void 0, index];
1010
+ });
1011
+ } else {
1012
+ if (sortIndexColumn) {
1013
+ columnDataWithRowIndexes = rowHeaders.map((rowData, index) => {
1014
+ const columnData = rowHeaders[index];
1015
+ return [columnData, index];
1016
+ });
1017
+ }
1018
+ }
1019
+ if (columnDataWithRowIndexes !== void 0) {
1020
+ const comparator = (mapper, ascending) => {
1021
+ return (a, b) => {
1022
+ const v1 = mapper(a);
1023
+ const v2 = mapper(b);
1024
+ const type1 = typeof v1;
1025
+ const type2 = typeof v2;
1026
+ const lt = (v12, v22) => {
1027
+ if (v12 < v22) {
1028
+ return -1;
1029
+ } else if (v12 > v22) {
1030
+ return 1;
1031
+ } else {
1032
+ return 0;
1033
+ }
1034
+ };
1035
+ let result;
1036
+ if (type1 === type2) {
1037
+ result = lt(v1, v2);
1038
+ } else {
1039
+ const order = {
1040
+ string: 0,
1041
+ number: 1,
1042
+ object: 2,
1043
+ symbol: 3,
1044
+ boolean: 4,
1045
+ undefined: 5,
1046
+ function: 6
1047
+ };
1048
+ result = lt(order[type1], order[type2]);
1049
+ }
1050
+ if (!ascending)
1051
+ result = -result;
1052
+ return result;
1053
+ };
1054
+ };
1055
+ const sortedRowIndexes = columnDataWithRowIndexes.sort(comparator((item) => item[0], sortAscending)).map((item) => item[1]);
1056
+ rowHeaders = sortedRowIndexes.map((i) => rowHeaders[i]);
1057
+ rowsData = sortedRowIndexes.map((i) => rowsData[i]);
1058
+ }
1059
+ return /* @__PURE__ */ React17__default.default.createElement("div", {
1060
+ style: styles.base
1061
+ }, /* @__PURE__ */ React17__default.default.createElement(HeaderContainer, {
1062
+ columns: colHeaders,
1063
+ sorted,
1064
+ sortIndexColumn,
1065
+ sortColumn,
1066
+ sortAscending,
1067
+ onTHClick: handleTHClick,
1068
+ onIndexTHClick: handleIndexTHClick
1069
+ }), /* @__PURE__ */ React17__default.default.createElement(DataContainer, {
1070
+ rows: rowHeaders,
1071
+ columns: colHeaders,
1072
+ rowsData
1073
+ }));
1074
+ };
1075
+ var themedTableInspector = themeAcceptor(TableInspector);
1076
+ var TEXT_NODE_MAX_INLINE_CHARS = 80;
1077
+ var shouldInline = (data) => data.childNodes.length === 0 || data.childNodes.length === 1 && data.childNodes[0].nodeType === Node.TEXT_NODE && data.textContent.length < TEXT_NODE_MAX_INLINE_CHARS;
1078
+ var OpenTag = ({ tagName, attributes, styles }) => {
1079
+ return /* @__PURE__ */ React17__default.default.createElement("span", {
1080
+ style: styles.base
1081
+ }, "<", /* @__PURE__ */ React17__default.default.createElement("span", {
1082
+ style: styles.tagName
1083
+ }, tagName), (() => {
1084
+ if (attributes) {
1085
+ const attributeNodes = [];
1086
+ for (let i = 0; i < attributes.length; i++) {
1087
+ const attribute = attributes[i];
1088
+ attributeNodes.push(/* @__PURE__ */ React17__default.default.createElement("span", {
1089
+ key: i
1090
+ }, " ", /* @__PURE__ */ React17__default.default.createElement("span", {
1091
+ style: styles.htmlAttributeName
1092
+ }, attribute.name), '="', /* @__PURE__ */ React17__default.default.createElement("span", {
1093
+ style: styles.htmlAttributeValue
1094
+ }, attribute.value), '"'));
1095
+ }
1096
+ return attributeNodes;
1097
+ }
1098
+ })(), ">");
1099
+ };
1100
+ var CloseTag = ({ tagName, isChildNode = false, styles }) => /* @__PURE__ */ React17__default.default.createElement("span", {
1101
+ style: Object.assign({}, styles.base, isChildNode && styles.offsetLeft)
1102
+ }, "</", /* @__PURE__ */ React17__default.default.createElement("span", {
1103
+ style: styles.tagName
1104
+ }, tagName), ">");
1105
+ var nameByNodeType = {
1106
+ 1: "ELEMENT_NODE",
1107
+ 3: "TEXT_NODE",
1108
+ 7: "PROCESSING_INSTRUCTION_NODE",
1109
+ 8: "COMMENT_NODE",
1110
+ 9: "DOCUMENT_NODE",
1111
+ 10: "DOCUMENT_TYPE_NODE",
1112
+ 11: "DOCUMENT_FRAGMENT_NODE"
1113
+ };
1114
+ var DOMNodePreview = ({ isCloseTag, data, expanded }) => {
1115
+ const styles = useStyles("DOMNodePreview");
1116
+ if (isCloseTag) {
1117
+ return /* @__PURE__ */ React17__default.default.createElement(CloseTag, {
1118
+ styles: styles.htmlCloseTag,
1119
+ isChildNode: true,
1120
+ tagName: data.tagName
1121
+ });
1122
+ }
1123
+ switch (data.nodeType) {
1124
+ case Node.ELEMENT_NODE:
1125
+ return /* @__PURE__ */ React17__default.default.createElement("span", null, /* @__PURE__ */ React17__default.default.createElement(OpenTag, {
1126
+ tagName: data.tagName,
1127
+ attributes: data.attributes,
1128
+ styles: styles.htmlOpenTag
1129
+ }), shouldInline(data) ? data.textContent : !expanded && "\u2026", !expanded && /* @__PURE__ */ React17__default.default.createElement(CloseTag, {
1130
+ tagName: data.tagName,
1131
+ styles: styles.htmlCloseTag
1132
+ }));
1133
+ case Node.TEXT_NODE:
1134
+ return /* @__PURE__ */ React17__default.default.createElement("span", null, data.textContent);
1135
+ case Node.CDATA_SECTION_NODE:
1136
+ return /* @__PURE__ */ React17__default.default.createElement("span", null, "<![CDATA[" + data.textContent + "]]>");
1137
+ case Node.COMMENT_NODE:
1138
+ return /* @__PURE__ */ React17__default.default.createElement("span", {
1139
+ style: styles.htmlComment
1140
+ }, "<!--", data.textContent, "-->");
1141
+ case Node.PROCESSING_INSTRUCTION_NODE:
1142
+ return /* @__PURE__ */ React17__default.default.createElement("span", null, data.nodeName);
1143
+ case Node.DOCUMENT_TYPE_NODE:
1144
+ return /* @__PURE__ */ React17__default.default.createElement("span", {
1145
+ style: styles.htmlDoctype
1146
+ }, "<!DOCTYPE ", data.name, data.publicId ? ` PUBLIC "${data.publicId}"` : "", !data.publicId && data.systemId ? " SYSTEM" : "", data.systemId ? ` "${data.systemId}"` : "", ">");
1147
+ case Node.DOCUMENT_NODE:
1148
+ return /* @__PURE__ */ React17__default.default.createElement("span", null, data.nodeName);
1149
+ case Node.DOCUMENT_FRAGMENT_NODE:
1150
+ return /* @__PURE__ */ React17__default.default.createElement("span", null, data.nodeName);
1151
+ default:
1152
+ return /* @__PURE__ */ React17__default.default.createElement("span", null, nameByNodeType[data.nodeType]);
1153
+ }
1154
+ };
1155
+ var domIterator = function* (data) {
1156
+ if (data && data.childNodes) {
1157
+ const textInlined = shouldInline(data);
1158
+ if (textInlined) {
1159
+ return;
1160
+ }
1161
+ for (let i = 0; i < data.childNodes.length; i++) {
1162
+ const node = data.childNodes[i];
1163
+ if (node.nodeType === Node.TEXT_NODE && node.textContent.trim().length === 0)
1164
+ continue;
1165
+ yield {
1166
+ name: `${node.tagName}[${i}]`,
1167
+ data: node
1168
+ };
1169
+ }
1170
+ if (data.tagName) {
1171
+ yield {
1172
+ name: "CLOSE_TAG",
1173
+ data: {
1174
+ tagName: data.tagName
1175
+ },
1176
+ isCloseTag: true
1177
+ };
1178
+ }
1179
+ }
1180
+ };
1181
+ var DOMInspector = (props) => {
1182
+ return /* @__PURE__ */ React17__default.default.createElement(TreeView, {
1183
+ nodeRenderer: DOMNodePreview,
1184
+ dataIterator: domIterator,
1185
+ ...props
1186
+ });
1187
+ };
1188
+ var themedDOMInspector = themeAcceptor(DOMInspector);
1189
+ var import_is_dom = __toESM(require_is_dom());
1190
+ var Inspector = ({ table = false, data, ...rest }) => {
1191
+ if (table) {
1192
+ return /* @__PURE__ */ React17__default.default.createElement(themedTableInspector, {
1193
+ data,
1194
+ ...rest
1195
+ });
1196
+ }
1197
+ if ((0, import_is_dom.default)(data))
1198
+ return /* @__PURE__ */ React17__default.default.createElement(themedDOMInspector, {
1199
+ data,
1200
+ ...rest
1201
+ });
1202
+ return /* @__PURE__ */ React17__default.default.createElement(themedObjectInspector, {
1203
+ data,
1204
+ ...rest
1205
+ });
1206
+ };
1207
+ var FIBER_PROP_EXPLANATIONS = {
1208
+ tag: "Numeric type identifier for this fiber (e.g. 1=FunctionComponent, 5=HostComponent)",
1209
+ elementType: "The original function/class/element type",
1210
+ type: "The resolved function/class after going through any HOCs",
1211
+ stateNode: "Reference to the actual instance (DOM node, class instance, etc)",
1212
+ return: "Parent fiber",
1213
+ child: "First child fiber",
1214
+ sibling: "Next sibling fiber",
1215
+ index: "Position among siblings",
1216
+ ref: "Ref object or function",
1217
+ pendingProps: "Props that are about to be applied",
1218
+ memoizedProps: "Props from the last render",
1219
+ memoizedState: "State from the last render",
1220
+ dependencies: "Context and other dependencies this fiber subscribes to",
1221
+ flags: "Side-effects flags (e.g. needs update, deletion)",
1222
+ lanes: "Priority lanes for updates",
1223
+ childLanes: "Priority lanes for child updates"
1224
+ };
1225
+ var throttle = (fn, wait) => {
1226
+ let timeout = null;
1227
+ return function() {
1228
+ if (!timeout) {
1229
+ timeout = setTimeout(() => {
1230
+ fn.apply(this, arguments);
1231
+ timeout = null;
1232
+ }, wait);
1233
+ }
1234
+ };
1235
+ };
1236
+ var isMac = typeof navigator !== "undefined" && navigator.platform.toLowerCase().includes("mac");
1237
+ var theme3 = {
1238
+ BASE_FONT_FAMILY: "Menlo, monospace",
1239
+ BASE_FONT_SIZE: "12px",
1240
+ BASE_LINE_HEIGHT: 1.2,
1241
+ BASE_BACKGROUND_COLOR: "none",
1242
+ BASE_COLOR: "#FFF",
1243
+ OBJECT_PREVIEW_ARRAY_MAX_PROPERTIES: 10,
1244
+ OBJECT_PREVIEW_OBJECT_MAX_PROPERTIES: 5,
1245
+ OBJECT_NAME_COLOR: "#FFC799",
1246
+ OBJECT_VALUE_NULL_COLOR: "#A0A0A0",
1247
+ OBJECT_VALUE_UNDEFINED_COLOR: "#A0A0A0",
1248
+ OBJECT_VALUE_REGEXP_COLOR: "#FF8080",
1249
+ OBJECT_VALUE_STRING_COLOR: "#99FFE4",
1250
+ OBJECT_VALUE_SYMBOL_COLOR: "#FFC799",
1251
+ OBJECT_VALUE_NUMBER_COLOR: "#FFC799",
1252
+ OBJECT_VALUE_BOOLEAN_COLOR: "#FFC799",
1253
+ OBJECT_VALUE_FUNCTION_PREFIX_COLOR: "#FFC799",
1254
+ HTML_TAG_COLOR: "#FFC799",
1255
+ HTML_TAGNAME_COLOR: "#FFC799",
1256
+ HTML_TAGNAME_TEXT_TRANSFORM: "lowercase",
1257
+ HTML_ATTRIBUTE_NAME_COLOR: "#A0A0A0",
1258
+ HTML_ATTRIBUTE_VALUE_COLOR: "#99FFE4",
1259
+ HTML_COMMENT_COLOR: "#8b8b8b94",
1260
+ HTML_DOCTYPE_COLOR: "#A0A0A0",
1261
+ ARROW_COLOR: "#A0A0A0",
1262
+ ARROW_MARGIN_RIGHT: 3,
1263
+ ARROW_FONT_SIZE: 12,
1264
+ ARROW_ANIMATION_DURATION: "0",
1265
+ TREENODE_FONT_FAMILY: "Menlo, monospace",
1266
+ TREENODE_FONT_SIZE: "11px",
1267
+ TREENODE_LINE_HEIGHT: 1.2,
1268
+ TREENODE_PADDING_LEFT: 12,
1269
+ TABLE_BORDER_COLOR: "#282828",
1270
+ TABLE_TH_BACKGROUND_COLOR: "#161616",
1271
+ TABLE_TH_HOVER_COLOR: "#232323",
1272
+ TABLE_SORT_ICON_COLOR: "#A0A0A0",
1273
+ TABLE_DATA_BACKGROUND_IMAGE: "none",
1274
+ TABLE_DATA_BACKGROUND_SIZE: "0"
1275
+ };
1276
+ var BackButton = React17__default.default.memo(({ onClick }) => /* @__PURE__ */ React17__default.default.createElement(
1277
+ "button",
1278
+ {
1279
+ type: "button",
1280
+ onClick,
1281
+ style: {
1282
+ padding: "0.5ch 1ch",
1283
+ background: "#161616",
1284
+ border: "1px solid #282828",
1285
+ color: "#FFF",
1286
+ borderRadius: "0.25rem",
1287
+ cursor: "pointer",
1288
+ fontSize: "0.875rem",
1289
+ opacity: 0.8,
1290
+ transition: "opacity 150ms"
1291
+ },
1292
+ onMouseEnter: (e) => {
1293
+ e.currentTarget.style.opacity = "1";
1294
+ },
1295
+ onMouseLeave: (e) => {
1296
+ e.currentTarget.style.opacity = "0.8";
1297
+ }
1298
+ },
1299
+ "\u2190 Back"
1300
+ ));
1301
+ var BreadcrumbButton = React17__default.default.memo(
1302
+ ({
1303
+ name,
1304
+ onClick,
1305
+ onKeyDown
1306
+ }) => /* @__PURE__ */ React17__default.default.createElement(
1307
+ "button",
1308
+ {
1309
+ type: "button",
1310
+ onClick,
1311
+ onKeyDown,
1312
+ style: {
1313
+ cursor: "pointer",
1314
+ textDecoration: "underline",
1315
+ color: "#A0A0A0",
1316
+ background: "none",
1317
+ border: "none",
1318
+ padding: 0,
1319
+ font: "inherit"
1320
+ },
1321
+ onMouseEnter: (e) => {
1322
+ e.currentTarget.style.backgroundColor = "#232323";
1323
+ e.currentTarget.style.color = "#FFF";
1324
+ },
1325
+ onMouseLeave: (e) => {
1326
+ e.currentTarget.style.backgroundColor = "";
1327
+ e.currentTarget.style.color = "#A0A0A0";
1328
+ }
1329
+ },
1330
+ name
1331
+ )
1332
+ );
1333
+ var CloseButton = React17__default.default.memo(({ onClick }) => /* @__PURE__ */ React17__default.default.createElement(
1334
+ "button",
1335
+ {
1336
+ type: "button",
1337
+ onClick,
1338
+ style: {
1339
+ border: "none",
1340
+ background: "none",
1341
+ cursor: "pointer",
1342
+ padding: "0.5ch",
1343
+ fontSize: "2ch",
1344
+ opacity: 0.5,
1345
+ color: "#FFF"
1346
+ }
1347
+ },
1348
+ "\xD7"
1349
+ ));
1350
+ var RawInspector = React17__default.default.memo(
1351
+ ({ enabled = true, dangerouslyRunInProduction = false }) => {
1352
+ const [element, setElement] = React17.useState(null);
1353
+ const [rect, setRect] = React17.useState(null);
1354
+ const [isActive, setIsActive] = React17.useState(true);
1355
+ const [isDialogMode, setIsDialogMode] = React17.useState(false);
1356
+ const [tooltip, setTooltip] = React17.useState(null);
1357
+ const [selectedFiber, setSelectedFiber] = React17.useState(null);
1358
+ const [position, setPosition] = React17.useState({
1359
+ top: 0,
1360
+ left: 0
1361
+ });
1362
+ const [fiberHistory, setFiberHistory] = React17.useState([]);
1363
+ const getFiberForDisplay = React17.useCallback(() => {
1364
+ if (selectedFiber) return selectedFiber;
1365
+ const fiber2 = chunkXRTKUBYA_cjs.getFiberFromHostInstance(element);
1366
+ return fiber2;
1367
+ }, [selectedFiber, element]);
1368
+ const handlePropertyHover = (_e, propName) => {
1369
+ if (!isDialogMode) return;
1370
+ const explanation = FIBER_PROP_EXPLANATIONS[propName];
1371
+ setTooltip(explanation || null);
1372
+ };
1373
+ const handlePropertyLeave = () => {
1374
+ setTooltip(null);
1375
+ };
1376
+ const handleClose = React17.useCallback(() => {
1377
+ setIsDialogMode(false);
1378
+ setFiberHistory([]);
1379
+ setTooltip(null);
1380
+ setSelectedFiber(null);
1381
+ setElement(null);
1382
+ setRect(null);
1383
+ }, []);
1384
+ React17.useEffect(() => {
1385
+ const handleKeyDown = (e) => {
1386
+ if (e.key === "o" && (e.metaKey || e.ctrlKey) && rect) {
1387
+ e.preventDefault();
1388
+ const currentFiber = getFiberForDisplay();
1389
+ if (currentFiber) {
1390
+ setFiberHistory([currentFiber]);
1391
+ }
1392
+ setIsDialogMode(true);
1393
+ } else if (e.key === "Escape") {
1394
+ handleClose();
1395
+ }
1396
+ };
1397
+ window.addEventListener("keydown", handleKeyDown);
1398
+ return () => window.removeEventListener("keydown", handleKeyDown);
1399
+ }, [rect, getFiberForDisplay, handleClose]);
1400
+ React17.useEffect(() => {
1401
+ if (!isDialogMode) {
1402
+ setTooltip(null);
1403
+ setFiberHistory([]);
1404
+ setSelectedFiber(null);
1405
+ setElement(null);
1406
+ setRect(null);
1407
+ }
1408
+ }, [isDialogMode]);
1409
+ React17.useEffect(() => {
1410
+ const handleMouseMove = (event) => {
1411
+ if (isDialogMode) return;
1412
+ const isActive2 = chunkXRTKUBYA_cjs.isInstrumentationActive() || chunkXRTKUBYA_cjs.hasRDTHook();
1413
+ if (!isActive2) {
1414
+ setIsActive(false);
1415
+ return;
1416
+ }
1417
+ if (!dangerouslyRunInProduction) {
1418
+ const rdtHook = chunkXRTKUBYA_cjs.getRDTHook();
1419
+ for (const renderer of rdtHook.renderers.values()) {
1420
+ const buildType = chunkXRTKUBYA_cjs.detectReactBuildType(renderer);
1421
+ if (buildType === "production") {
1422
+ setIsActive(false);
1423
+ return;
1424
+ }
1425
+ }
1426
+ }
1427
+ if (!enabled) {
1428
+ setElement(null);
1429
+ setRect(null);
1430
+ setSelectedFiber(null);
1431
+ return;
1432
+ }
1433
+ if (!isDialogMode) {
1434
+ const element2 = document.elementFromPoint(
1435
+ event.clientX,
1436
+ event.clientY
1437
+ );
1438
+ if (!element2) return;
1439
+ setElement(element2);
1440
+ setRect(element2.getBoundingClientRect());
1441
+ setSelectedFiber(null);
1442
+ }
1443
+ };
1444
+ const throttledMouseMove = throttle(handleMouseMove, 16);
1445
+ document.addEventListener("mousemove", throttledMouseMove);
1446
+ return () => {
1447
+ document.removeEventListener("mousemove", throttledMouseMove);
1448
+ };
1449
+ }, [enabled, isDialogMode, dangerouslyRunInProduction]);
1450
+ React17.useEffect(() => {
1451
+ if (!rect) return;
1452
+ const padding = 10;
1453
+ const inspectorWidth = 400;
1454
+ const inspectorHeight = 320;
1455
+ let left = rect.left + rect.width + padding;
1456
+ let top = rect.top;
1457
+ if (left + inspectorWidth > window.innerWidth) {
1458
+ left = Math.max(padding, rect.left - inspectorWidth - padding);
1459
+ }
1460
+ if (top >= rect.top && top <= rect.bottom) {
1461
+ if (rect.bottom + inspectorHeight + padding <= window.innerHeight) {
1462
+ top = rect.bottom + padding;
1463
+ } else if (rect.top - inspectorHeight - padding >= 0) {
1464
+ top = rect.top - inspectorHeight - padding;
1465
+ } else {
1466
+ top = window.innerHeight - inspectorHeight - padding;
1467
+ }
1468
+ }
1469
+ top = Math.max(
1470
+ padding,
1471
+ Math.min(top, window.innerHeight - inspectorHeight - padding)
1472
+ );
1473
+ left = Math.max(
1474
+ padding,
1475
+ Math.min(left, window.innerWidth - inspectorWidth - padding)
1476
+ );
1477
+ setPosition({ top, left });
1478
+ }, [rect]);
1479
+ React17.useEffect(() => {
1480
+ if (selectedFiber) {
1481
+ const element2 = chunkXRTKUBYA_cjs.getNearestHostFiber(selectedFiber)?.stateNode;
1482
+ if (element2) {
1483
+ setElement(element2);
1484
+ setRect(element2.getBoundingClientRect());
1485
+ }
1486
+ }
1487
+ }, [selectedFiber]);
1488
+ const handleBack = () => {
1489
+ const previousFiber = fiberHistory[fiberHistory.length - 1];
1490
+ if (previousFiber) {
1491
+ setFiberHistory((prev) => prev.slice(0, -1));
1492
+ setSelectedFiber(previousFiber);
1493
+ }
1494
+ };
1495
+ if (!rect || !isActive) return null;
1496
+ const fiber = getFiberForDisplay();
1497
+ if (!fiber) return null;
1498
+ let foundInspect = false;
1499
+ chunkXRTKUBYA_cjs.traverseFiber(
1500
+ fiber,
1501
+ (innerFiber) => {
1502
+ if (innerFiber.type === Inspector2) {
1503
+ foundInspect = true;
1504
+ return true;
1505
+ }
1506
+ },
1507
+ true
1508
+ );
1509
+ if (foundInspect) return null;
1510
+ const dialogStyle = isDialogMode ? {
1511
+ position: "fixed",
1512
+ top: "50%",
1513
+ left: "50%",
1514
+ transform: "translate(-50%, -50%)",
1515
+ width: "80vw",
1516
+ height: "80vh",
1517
+ maxWidth: "none",
1518
+ maxHeight: "none",
1519
+ padding: "2ch",
1520
+ boxShadow: "0 0 0 5px rgba(0, 0, 0, 0.3)",
1521
+ backgroundColor: "#1a1a1a",
1522
+ border: "1px solid #333",
1523
+ zIndex: 1e3
1524
+ } : {};
1525
+ const overlayStyle = isDialogMode ? {
1526
+ position: "fixed",
1527
+ top: 0,
1528
+ left: 0,
1529
+ right: 0,
1530
+ bottom: 0,
1531
+ backgroundColor: "rgba(0, 0, 0, 0.7)",
1532
+ zIndex: 999
1533
+ } : {};
1534
+ const fiberStack = fiber ? chunkXRTKUBYA_cjs.getFiberStack(fiber) : [];
1535
+ return /* @__PURE__ */ React17__default.default.createElement(React17__default.default.Fragment, null, isDialogMode && /* @__PURE__ */ React17__default.default.createElement(
1536
+ "div",
1537
+ {
1538
+ style: overlayStyle,
1539
+ onClick: handleClose,
1540
+ onKeyDown: (e) => {
1541
+ if (e.key === "Escape") {
1542
+ handleClose();
1543
+ }
1544
+ },
1545
+ role: "button",
1546
+ tabIndex: 0
1547
+ }
1548
+ ), /* @__PURE__ */ React17__default.default.createElement(
1549
+ "div",
1550
+ {
1551
+ style: {
1552
+ position: "fixed",
1553
+ backgroundColor: "#101010",
1554
+ color: "#FFF",
1555
+ zIndex: 50,
1556
+ padding: "1ch",
1557
+ width: "50ch",
1558
+ height: isDialogMode ? "80ch" : "40ch",
1559
+ transition: "all 150ms, z-index 0ms",
1560
+ overflow: "visible",
1561
+ boxShadow: "0 1px 3px 0 rgb(0 0 0 / 0.3)",
1562
+ border: "1px solid #282828",
1563
+ top: position.top,
1564
+ left: position.left,
1565
+ opacity: rect ? 1 : 0,
1566
+ transform: rect ? "translateY(0)" : "translateY(10px)",
1567
+ pointerEvents: rect ? "auto" : "none",
1568
+ display: "flex",
1569
+ flexDirection: "column",
1570
+ ...dialogStyle
1571
+ }
1572
+ },
1573
+ /* @__PURE__ */ React17__default.default.createElement(
1574
+ "div",
1575
+ {
1576
+ style: {
1577
+ display: "flex",
1578
+ justifyContent: "space-between",
1579
+ alignItems: "center"
1580
+ }
1581
+ },
1582
+ /* @__PURE__ */ React17__default.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: "1ch" } }, fiberHistory.length > 0 && /* @__PURE__ */ React17__default.default.createElement(BackButton, { onClick: handleBack }), /* @__PURE__ */ React17__default.default.createElement(
1583
+ "h3",
1584
+ {
1585
+ style: {
1586
+ fontSize: "0.875rem",
1587
+ backgroundColor: "#161616",
1588
+ color: "#FFF",
1589
+ padding: "0 0.5ch",
1590
+ borderRadius: "0.125rem",
1591
+ width: "fit-content",
1592
+ margin: 0
1593
+ }
1594
+ },
1595
+ `<${typeof fiber.type === "string" ? fiber.type : chunkXRTKUBYA_cjs.getDisplayName(fiber.type) || "unknown"}>`,
1596
+ !isDialogMode && /* @__PURE__ */ React17__default.default.createElement(
1597
+ "span",
1598
+ {
1599
+ style: {
1600
+ marginLeft: "1ch",
1601
+ opacity: 0.5,
1602
+ fontSize: "0.75rem"
1603
+ }
1604
+ },
1605
+ `Press ${isMac ? "\u2318" : "ctrl"}O to expand`
1606
+ )
1607
+ )),
1608
+ isDialogMode && /* @__PURE__ */ React17__default.default.createElement(CloseButton, { onClick: handleClose })
1609
+ ),
1610
+ isDialogMode && /* @__PURE__ */ React17__default.default.createElement(
1611
+ "div",
1612
+ {
1613
+ style: {
1614
+ borderTop: "1px solid #282828",
1615
+ padding: "0.5ch 0",
1616
+ fontSize: "0.75rem",
1617
+ color: "#A0A0A0",
1618
+ whiteSpace: "nowrap",
1619
+ overflow: "hidden",
1620
+ textOverflow: "ellipsis"
1621
+ }
1622
+ },
1623
+ fiberStack.reverse().map((f, i, arr) => {
1624
+ const name = typeof f.type === "string" ? f.type : chunkXRTKUBYA_cjs.getDisplayName(f.type) || "unknown";
1625
+ if (!name) return null;
1626
+ return /* @__PURE__ */ React17__default.default.createElement(React17__default.default.Fragment, { key: chunkXRTKUBYA_cjs.getFiberId(f) }, /* @__PURE__ */ React17__default.default.createElement(
1627
+ BreadcrumbButton,
1628
+ {
1629
+ name,
1630
+ onClick: () => {
1631
+ if (selectedFiber) {
1632
+ setFiberHistory((prev) => [...prev, selectedFiber]);
1633
+ }
1634
+ setSelectedFiber(f);
1635
+ const element2 = chunkXRTKUBYA_cjs.getNearestHostFiber(f)?.stateNode;
1636
+ if (element2) {
1637
+ setElement(element2);
1638
+ setRect(element2.getBoundingClientRect());
1639
+ }
1640
+ },
1641
+ onKeyDown: (e) => {
1642
+ if (e.key === "Enter" || e.key === " ") {
1643
+ if (selectedFiber) {
1644
+ setFiberHistory((prev) => [...prev, selectedFiber]);
1645
+ }
1646
+ setSelectedFiber(f);
1647
+ const element2 = chunkXRTKUBYA_cjs.getNearestHostFiber(f)?.stateNode;
1648
+ if (element2) {
1649
+ setElement(element2);
1650
+ setRect(element2.getBoundingClientRect());
1651
+ }
1652
+ }
1653
+ }
1654
+ }
1655
+ ), i < arr.length - 1 && " > ");
1656
+ })
1657
+ ),
1658
+ /* @__PURE__ */ React17__default.default.createElement("div", { style: { flex: 1, overflow: "auto" } }, fiber && /* @__PURE__ */ React17__default.default.createElement(
1659
+ Inspector,
1660
+ {
1661
+ theme: theme3,
1662
+ data: fiber,
1663
+ expandLevel: 1,
1664
+ table: false,
1665
+ nodeRenderer: (props) => {
1666
+ const Component = props.depth === 0 ? ObjectRootLabel : ObjectLabel;
1667
+ return /* @__PURE__ */ React17__default.default.createElement(
1668
+ "span",
1669
+ {
1670
+ onMouseEnter: (e) => handlePropertyHover(e, props.name),
1671
+ onMouseLeave: handlePropertyLeave,
1672
+ style: {
1673
+ cursor: FIBER_PROP_EXPLANATIONS[props.name] ? "help" : "default",
1674
+ padding: "1px 0",
1675
+ display: "inline-block",
1676
+ fontWeight: FIBER_PROP_EXPLANATIONS[props.name] ? 500 : "normal"
1677
+ }
1678
+ },
1679
+ /* @__PURE__ */ React17__default.default.createElement(
1680
+ Component,
1681
+ {
1682
+ name: props.name,
1683
+ data: props.data,
1684
+ isNonenumerable: props.isNonenumerable
1685
+ }
1686
+ )
1687
+ );
1688
+ }
1689
+ }
1690
+ )),
1691
+ tooltip && /* @__PURE__ */ React17__default.default.createElement(
1692
+ "div",
1693
+ {
1694
+ style: {
1695
+ position: "absolute",
1696
+ zIndex: 1001,
1697
+ backgroundColor: "#161616",
1698
+ color: "#FFF",
1699
+ bottom: "2ch",
1700
+ right: "2ch",
1701
+ pointerEvents: "none",
1702
+ overflowY: "auto",
1703
+ padding: "1ch",
1704
+ fontSize: "1ch",
1705
+ border: "1px solid #282828",
1706
+ borderRadius: "0.25ch"
1707
+ }
1708
+ },
1709
+ tooltip
1710
+ )
1711
+ ), !isDialogMode && /* @__PURE__ */ React17__default.default.createElement(
1712
+ "div",
1713
+ {
1714
+ style: {
1715
+ position: "fixed",
1716
+ zIndex: 40,
1717
+ pointerEvents: "none",
1718
+ transition: "all 150ms",
1719
+ border: "1px dashed #505050",
1720
+ left: rect.left,
1721
+ top: rect.top,
1722
+ width: rect.width,
1723
+ height: rect.height,
1724
+ opacity: rect ? 1 : 0
1725
+ }
1726
+ }
1727
+ ));
1728
+ }
1729
+ );
1730
+ var Inspector2 = React17__default.default.memo(({ ...props }) => {
1731
+ const [root, setRoot] = React17.useState(null);
1732
+ React17.useEffect(() => {
1733
+ const div = document.createElement("div");
1734
+ document.body.appendChild(div);
1735
+ const shadowRoot = div.attachShadow({ mode: "open" });
1736
+ setRoot(shadowRoot);
1737
+ return () => {
1738
+ document.body.removeChild(div);
1739
+ };
1740
+ }, []);
1741
+ if (!root) return null;
1742
+ return ReactDOM__default.default.createPortal(/* @__PURE__ */ React17__default.default.createElement(RawInspector, { ...props }), root);
1743
+ });
1744
+ var inspect_default = Inspector2;
1745
+
1746
+ exports.Inspector = Inspector2;
1747
+ exports.RawInspector = RawInspector;
1748
+ exports.default = inspect_default;