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