bippy 0.2.0 → 0.2.2

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