@superblocksteam/library 2.0.34 → 2.0.35-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +1 -1
  2. package/dist/build-manifest-BNJahcH4.js +6 -0
  3. package/dist/build-manifest-BNJahcH4.js.map +1 -0
  4. package/dist/devtools-consolidated-BJ2tPWBk.js +212 -0
  5. package/dist/devtools-consolidated-BJ2tPWBk.js.map +1 -0
  6. package/dist/early-console-buffer-DWTLgla0.js +109 -0
  7. package/dist/early-console-buffer-DWTLgla0.js.map +1 -0
  8. package/dist/index.css +16 -34148
  9. package/dist/index.css.map +1 -0
  10. package/dist/index.d.ts +1388 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +11414 -185
  13. package/dist/index.js.map +1 -1
  14. package/dist/logs-ivxzrJPP.js +31 -0
  15. package/dist/logs-ivxzrJPP.js.map +1 -0
  16. package/dist/root-store-OkumbU1B.js +4564 -0
  17. package/dist/root-store-OkumbU1B.js.map +1 -0
  18. package/dist/root-store-Z42RSY5l.js +4 -0
  19. package/dist/utils-BCrSLIhM.js +3 -0
  20. package/dist/utils-CCBWAYIM.js +45 -0
  21. package/dist/utils-CCBWAYIM.js.map +1 -0
  22. package/package.json +15 -28
  23. package/dist/allPaths-BiumKu08.js +0 -17
  24. package/dist/allPaths-BiumKu08.js.map +0 -1
  25. package/dist/allPaths-DVZye-qX.js +0 -17
  26. package/dist/allPaths-DVZye-qX.js.map +0 -1
  27. package/dist/allPathsLoader-BmHfoSD_.js +0 -22
  28. package/dist/allPathsLoader-BmHfoSD_.js.map +0 -1
  29. package/dist/allPathsLoader-DRmGASlD.js +0 -22
  30. package/dist/allPathsLoader-DRmGASlD.js.map +0 -1
  31. package/dist/devtools-consolidated-C22ZSOdp.js +0 -590
  32. package/dist/devtools-consolidated-C22ZSOdp.js.map +0 -1
  33. package/dist/icons-BPtVE6ue.js +0 -58
  34. package/dist/icons-BPtVE6ue.js.map +0 -1
  35. package/dist/index-BxzKdlqH.js +0 -1353
  36. package/dist/index-BxzKdlqH.js.map +0 -1
  37. package/dist/index-CdXfIz8N.js +0 -216319
  38. package/dist/index-CdXfIz8N.js.map +0 -1
  39. package/dist/index-DIJYif9G.js +0 -1341
  40. package/dist/index-DIJYif9G.js.map +0 -1
  41. package/dist/index-DIn-fanT.js +0 -1353
  42. package/dist/index-DIn-fanT.js.map +0 -1
  43. package/dist/index-LHtbj0-V.js +0 -1341
  44. package/dist/index-LHtbj0-V.js.map +0 -1
  45. package/dist/logs-BfdjooW0.js +0 -1475
  46. package/dist/logs-BfdjooW0.js.map +0 -1
  47. package/dist/splitPathsBySizeLoader-De1h8uYk.js +0 -34
  48. package/dist/splitPathsBySizeLoader-De1h8uYk.js.map +0 -1
  49. package/dist/splitPathsBySizeLoader-Df5pOIDq.js +0 -34
  50. package/dist/splitPathsBySizeLoader-Df5pOIDq.js.map +0 -1
@@ -1,590 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { e as toJS, o as observer, j as jsxRuntimeExports, m as makeAutoObservable } from "./index-CdXfIz8N.js";
5
- import { useRef, createElement, useState, useEffect, useId, useCallback } from "react";
6
- import { createPortal } from "react-dom";
7
- const isBoolean = (data) => {
8
- return typeof data === "boolean" || data instanceof Boolean;
9
- };
10
- const isNumber = (data) => {
11
- return typeof data === "number" || data instanceof Number;
12
- };
13
- const isBigInt = (data) => {
14
- return typeof data === "bigint" || data instanceof BigInt;
15
- };
16
- const isDate = (data) => {
17
- return !!data && data instanceof Date;
18
- };
19
- const isString = (data) => {
20
- return typeof data === "string" || data instanceof String;
21
- };
22
- const isArray = (data) => {
23
- return Array.isArray(data);
24
- };
25
- const isObject = (data) => {
26
- return typeof data === "object" && data !== null;
27
- };
28
- const isFunction = (data) => {
29
- return !!data && data instanceof Object && typeof data === "function";
30
- };
31
- function quoteString(value, quoted) {
32
- if (quoted === void 0) {
33
- quoted = false;
34
- }
35
- return !value || quoted ? `"${value}"` : value;
36
- }
37
- function quoteStringValue(value, quoted, stringify) {
38
- if (stringify) {
39
- return JSON.stringify(value);
40
- }
41
- return quoted ? `"${value}"` : value;
42
- }
43
- function ExpandableObject(_ref) {
44
- let {
45
- field,
46
- value,
47
- data,
48
- lastElement,
49
- openBracket,
50
- closeBracket,
51
- level,
52
- style,
53
- shouldExpandNode,
54
- clickToExpandNode,
55
- outerRef,
56
- beforeExpandChange
57
- } = _ref;
58
- const shouldExpandNodeCalledRef = useRef(false);
59
- const [expanded, setExpanded] = useState(() => shouldExpandNode(level, value, field));
60
- const expanderButtonRef = useRef(null);
61
- useEffect(() => {
62
- if (!shouldExpandNodeCalledRef.current) {
63
- shouldExpandNodeCalledRef.current = true;
64
- } else {
65
- setExpanded(shouldExpandNode(level, value, field));
66
- }
67
- }, [shouldExpandNode]);
68
- const contentsId = useId();
69
- if (data.length === 0) {
70
- return EmptyObject({
71
- field,
72
- openBracket,
73
- closeBracket,
74
- lastElement,
75
- style
76
- });
77
- }
78
- const expanderIconStyle = expanded ? style.collapseIcon : style.expandIcon;
79
- const ariaLabel = expanded ? style.ariaLables.collapseJson : style.ariaLables.expandJson;
80
- const childLevel = level + 1;
81
- const lastIndex = data.length - 1;
82
- const setExpandWithCallback = (newExpandValue) => {
83
- if (expanded !== newExpandValue && (!beforeExpandChange || beforeExpandChange({
84
- level,
85
- value,
86
- field,
87
- newExpandValue
88
- }))) {
89
- setExpanded(newExpandValue);
90
- }
91
- };
92
- const onKeyDown = (e) => {
93
- if (e.key === "ArrowRight" || e.key === "ArrowLeft") {
94
- e.preventDefault();
95
- setExpandWithCallback(e.key === "ArrowRight");
96
- } else if (e.key === "ArrowUp" || e.key === "ArrowDown") {
97
- e.preventDefault();
98
- const direction = e.key === "ArrowUp" ? -1 : 1;
99
- if (!outerRef.current) return;
100
- const buttonElements = outerRef.current.querySelectorAll("[role=button]");
101
- let currentIndex = -1;
102
- for (let i = 0; i < buttonElements.length; i++) {
103
- if (buttonElements[i].tabIndex === 0) {
104
- currentIndex = i;
105
- break;
106
- }
107
- }
108
- if (currentIndex < 0) {
109
- return;
110
- }
111
- const nextIndex = (currentIndex + direction + buttonElements.length) % buttonElements.length;
112
- buttonElements[currentIndex].tabIndex = -1;
113
- buttonElements[nextIndex].tabIndex = 0;
114
- buttonElements[nextIndex].focus();
115
- }
116
- };
117
- const onClick = () => {
118
- var _outerRef$current;
119
- setExpandWithCallback(!expanded);
120
- const buttonElement = expanderButtonRef.current;
121
- if (!buttonElement) return;
122
- const prevButtonElement = (_outerRef$current = outerRef.current) === null || _outerRef$current === void 0 ? void 0 : _outerRef$current.querySelector('[role=button][tabindex="0"]');
123
- if (prevButtonElement) {
124
- prevButtonElement.tabIndex = -1;
125
- }
126
- buttonElement.tabIndex = 0;
127
- buttonElement.focus();
128
- };
129
- return /* @__PURE__ */ createElement("div", {
130
- className: style.basicChildStyle,
131
- role: "treeitem",
132
- "aria-expanded": expanded,
133
- "aria-selected": void 0
134
- }, /* @__PURE__ */ createElement("span", {
135
- className: expanderIconStyle,
136
- onClick,
137
- onKeyDown,
138
- role: "button",
139
- "aria-label": ariaLabel,
140
- "aria-expanded": expanded,
141
- "aria-controls": expanded ? contentsId : void 0,
142
- ref: expanderButtonRef,
143
- tabIndex: level === 0 ? 0 : -1
144
- }), (field || field === "") && (clickToExpandNode ? /* @__PURE__ */ createElement("span", {
145
- className: style.clickableLabel,
146
- onClick,
147
- onKeyDown
148
- }, quoteString(field, style.quotesForFieldNames), ":") : /* @__PURE__ */ createElement("span", {
149
- className: style.label
150
- }, quoteString(field, style.quotesForFieldNames), ":")), /* @__PURE__ */ createElement("span", {
151
- className: style.punctuation
152
- }, openBracket), expanded ? /* @__PURE__ */ createElement("ul", {
153
- id: contentsId,
154
- role: "group",
155
- className: style.childFieldsContainer
156
- }, data.map((dataElement, index) => /* @__PURE__ */ createElement(DataRender, {
157
- key: dataElement[0] || index,
158
- field: dataElement[0],
159
- value: dataElement[1],
160
- style,
161
- lastElement: index === lastIndex,
162
- level: childLevel,
163
- shouldExpandNode,
164
- clickToExpandNode,
165
- outerRef
166
- }))) : /* @__PURE__ */ createElement("span", {
167
- className: style.collapsedContent,
168
- onClick,
169
- onKeyDown
170
- }), /* @__PURE__ */ createElement("span", {
171
- className: style.punctuation
172
- }, closeBracket), !lastElement && /* @__PURE__ */ createElement("span", {
173
- className: style.punctuation
174
- }, ","));
175
- }
176
- function EmptyObject(_ref2) {
177
- let {
178
- field,
179
- openBracket,
180
- closeBracket,
181
- lastElement,
182
- style
183
- } = _ref2;
184
- return /* @__PURE__ */ createElement("div", {
185
- className: style.basicChildStyle,
186
- role: "treeitem",
187
- "aria-selected": void 0
188
- }, (field || field === "") && /* @__PURE__ */ createElement("span", {
189
- className: style.label
190
- }, quoteString(field, style.quotesForFieldNames), ":"), /* @__PURE__ */ createElement("span", {
191
- className: style.punctuation
192
- }, openBracket), /* @__PURE__ */ createElement("span", {
193
- className: style.punctuation
194
- }, closeBracket), !lastElement && /* @__PURE__ */ createElement("span", {
195
- className: style.punctuation
196
- }, ","));
197
- }
198
- function JsonObject(_ref3) {
199
- let {
200
- field,
201
- value,
202
- style,
203
- lastElement,
204
- shouldExpandNode,
205
- clickToExpandNode,
206
- level,
207
- outerRef,
208
- beforeExpandChange
209
- } = _ref3;
210
- return ExpandableObject({
211
- field,
212
- value,
213
- lastElement: lastElement || false,
214
- level,
215
- openBracket: "{",
216
- closeBracket: "}",
217
- style,
218
- shouldExpandNode,
219
- clickToExpandNode,
220
- data: Object.keys(value).map((key) => [key, value[key]]),
221
- outerRef,
222
- beforeExpandChange
223
- });
224
- }
225
- function JsonArray(_ref4) {
226
- let {
227
- field,
228
- value,
229
- style,
230
- lastElement,
231
- level,
232
- shouldExpandNode,
233
- clickToExpandNode,
234
- outerRef,
235
- beforeExpandChange
236
- } = _ref4;
237
- return ExpandableObject({
238
- field,
239
- value,
240
- lastElement: lastElement || false,
241
- level,
242
- openBracket: "[",
243
- closeBracket: "]",
244
- style,
245
- shouldExpandNode,
246
- clickToExpandNode,
247
- data: value.map((element) => [void 0, element]),
248
- outerRef,
249
- beforeExpandChange
250
- });
251
- }
252
- function JsonPrimitiveValue(_ref5) {
253
- let {
254
- field,
255
- value,
256
- style,
257
- lastElement
258
- } = _ref5;
259
- let stringValue;
260
- let valueStyle = style.otherValue;
261
- if (value === null) {
262
- stringValue = "null";
263
- valueStyle = style.nullValue;
264
- } else if (value === void 0) {
265
- stringValue = "undefined";
266
- valueStyle = style.undefinedValue;
267
- } else if (isString(value)) {
268
- stringValue = quoteStringValue(value, !style.noQuotesForStringValues, style.stringifyStringValues);
269
- valueStyle = style.stringValue;
270
- } else if (isBoolean(value)) {
271
- stringValue = value ? "true" : "false";
272
- valueStyle = style.booleanValue;
273
- } else if (isNumber(value)) {
274
- stringValue = value.toString();
275
- valueStyle = style.numberValue;
276
- } else if (isBigInt(value)) {
277
- stringValue = `${value.toString()}n`;
278
- valueStyle = style.numberValue;
279
- } else if (isDate(value)) {
280
- stringValue = value.toISOString();
281
- } else if (isFunction(value)) {
282
- stringValue = "function() { }";
283
- } else {
284
- stringValue = value.toString();
285
- }
286
- return /* @__PURE__ */ createElement("div", {
287
- className: style.basicChildStyle,
288
- role: "treeitem",
289
- "aria-selected": void 0
290
- }, (field || field === "") && /* @__PURE__ */ createElement("span", {
291
- className: style.label
292
- }, quoteString(field, style.quotesForFieldNames), ":"), /* @__PURE__ */ createElement("span", {
293
- className: valueStyle
294
- }, stringValue), !lastElement && /* @__PURE__ */ createElement("span", {
295
- className: style.punctuation
296
- }, ","));
297
- }
298
- function DataRender(props) {
299
- const value = props.value;
300
- if (isArray(value)) {
301
- return /* @__PURE__ */ createElement(JsonArray, Object.assign({}, props));
302
- }
303
- if (isObject(value) && !isDate(value) && !isFunction(value)) {
304
- return /* @__PURE__ */ createElement(JsonObject, Object.assign({}, props));
305
- }
306
- return /* @__PURE__ */ createElement(JsonPrimitiveValue, Object.assign({}, props));
307
- }
308
- var styles = { "container-light": "_2IvMF _GzYRV", "basic-element-style": "_2bkNM", "child-fields-container": "_1BXBN", "label-light": "_1MGIk", "clickable-label-light": "_2YKJg _1MGIk _1MFti", "punctuation-light": "_3uHL6 _3eOF8", "value-null-light": "_2T6PJ", "value-undefined-light": "_1Gho6", "value-string-light": "_vGjyY", "value-number-light": "_1bQdo", "value-boolean-light": "_3zQKs", "value-other-light": "_1xvuR", "collapse-icon-light": "_oLqym _f10Tu _1MFti _1LId0", "expand-icon-light": "_2AXVT _f10Tu _1MFti _1UmXx", "collapsed-content-light": "_2KJWg _1pNG9 _1MFti" };
309
- const defaultAriaLables = {
310
- collapseJson: "collapse JSON",
311
- expandJson: "expand JSON"
312
- };
313
- const defaultStyles = {
314
- container: styles["container-light"],
315
- basicChildStyle: styles["basic-element-style"],
316
- childFieldsContainer: styles["child-fields-container"],
317
- label: styles["label-light"],
318
- clickableLabel: styles["clickable-label-light"],
319
- nullValue: styles["value-null-light"],
320
- undefinedValue: styles["value-undefined-light"],
321
- stringValue: styles["value-string-light"],
322
- booleanValue: styles["value-boolean-light"],
323
- numberValue: styles["value-number-light"],
324
- otherValue: styles["value-other-light"],
325
- punctuation: styles["punctuation-light"],
326
- collapseIcon: styles["collapse-icon-light"],
327
- expandIcon: styles["expand-icon-light"],
328
- collapsedContent: styles["collapsed-content-light"],
329
- noQuotesForStringValues: false,
330
- quotesForFieldNames: false,
331
- ariaLables: defaultAriaLables,
332
- stringifyStringValues: false
333
- };
334
- const allExpanded = () => true;
335
- const JsonView = (_ref) => {
336
- let {
337
- data,
338
- style = defaultStyles,
339
- shouldExpandNode = allExpanded,
340
- clickToExpandNode = false,
341
- beforeExpandChange,
342
- ...ariaAttrs
343
- } = _ref;
344
- const outerRef = useRef(null);
345
- return /* @__PURE__ */ createElement("div", Object.assign({
346
- "aria-label": "JSON view"
347
- }, ariaAttrs, {
348
- className: style.container,
349
- ref: outerRef,
350
- role: "tree"
351
- }), /* @__PURE__ */ createElement(DataRender, {
352
- value: data,
353
- style: {
354
- ...defaultStyles,
355
- ...style
356
- },
357
- lastElement: true,
358
- level: 0,
359
- shouldExpandNode,
360
- clickToExpandNode,
361
- outerRef,
362
- beforeExpandChange
363
- }));
364
- };
365
- function serializeStoreData(stores_) {
366
- try {
367
- let serialize = function(obj) {
368
- if (obj === null || typeof obj !== "object") {
369
- return obj;
370
- }
371
- if (seen.has(obj)) {
372
- return "[Already Seen]";
373
- }
374
- seen.add(obj);
375
- if (Array.isArray(obj)) {
376
- return obj.map(serialize);
377
- }
378
- const result = {};
379
- for (const key of Object.keys(obj)) {
380
- if (typeof obj[key] === "function") {
381
- result[key] = "[Function]";
382
- }
383
- try {
384
- const descriptor = Object.getOwnPropertyDescriptor(obj, key);
385
- if (descriptor && descriptor.get) {
386
- try {
387
- result[key] = serialize(obj[key]);
388
- } catch {
389
- result[key] = "[Getter Error]";
390
- }
391
- } else {
392
- result[key] = serialize(obj[key]);
393
- }
394
- } catch {
395
- result[key] = "[Access Error]";
396
- }
397
- }
398
- if (obj.constructor && obj.constructor.name !== "Object") {
399
- result.__type__ = obj.constructor.name;
400
- }
401
- return result;
402
- };
403
- const stores = toJS(stores_);
404
- const seen = /* @__PURE__ */ new Set();
405
- return serialize(stores);
406
- } catch (error) {
407
- return {
408
- error: `Error serializing data: ${error instanceof Error ? error.message : "Unknown error"}`
409
- };
410
- }
411
- }
412
- class DevToolsState {
413
- constructor() {
414
- __publicField(this, "isVisible", false);
415
- makeAutoObservable(this);
416
- }
417
- show() {
418
- this.isVisible = true;
419
- }
420
- hide() {
421
- this.isVisible = false;
422
- }
423
- toggle() {
424
- this.isVisible = !this.isVisible;
425
- }
426
- }
427
- const devToolsState = new DevToolsState();
428
- class KeyboardShortcutManager {
429
- constructor() {
430
- __publicField(this, "isListening", false);
431
- __publicField(this, "shortcutKeys", {
432
- key: "KeyD",
433
- ctrlKey: true,
434
- shiftKey: true,
435
- altKey: false
436
- });
437
- __publicField(this, "handleEscapeKey", (event) => {
438
- if (event.key === "Escape" && devToolsState.isVisible) {
439
- event.preventDefault();
440
- devToolsState.hide();
441
- }
442
- });
443
- this.handleKeyDown = this.handleKeyDown.bind(this);
444
- }
445
- handleKeyDown(event) {
446
- const { ctrlKey, shiftKey, altKey, metaKey } = event;
447
- const isModifierMatch = (ctrlKey || metaKey) && shiftKey && !altKey;
448
- const isKeyMatch = event.code === this.shortcutKeys.key;
449
- if (isModifierMatch && isKeyMatch) {
450
- event.preventDefault();
451
- event.stopPropagation();
452
- devToolsState.toggle();
453
- }
454
- }
455
- startListening() {
456
- if (this.isListening) return;
457
- this.isListening = true;
458
- document.addEventListener("keydown", this.handleKeyDown, true);
459
- document.addEventListener("keydown", this.handleEscapeKey, true);
460
- }
461
- stopListening() {
462
- if (!this.isListening) return;
463
- this.isListening = false;
464
- document.removeEventListener("keydown", this.handleKeyDown, true);
465
- document.removeEventListener("keydown", this.handleEscapeKey, true);
466
- }
467
- updateShortcut(options) {
468
- this.shortcutKeys = { ...this.shortcutKeys, ...options };
469
- }
470
- }
471
- const keyboardShortcutManager = new KeyboardShortcutManager();
472
- let registeredStores = {};
473
- function setRegisteredStores(stores) {
474
- registeredStores = stores;
475
- }
476
- function getRegisteredStores() {
477
- return registeredStores;
478
- }
479
- const overlayStyles = {
480
- position: "fixed",
481
- top: 0,
482
- left: 0,
483
- right: 0,
484
- bottom: 0,
485
- backgroundColor: "rgba(0, 0, 0, 0.5)",
486
- zIndex: 9999
487
- };
488
- const panelStyles = {
489
- position: "fixed",
490
- top: "50%",
491
- left: "50%",
492
- transform: "translate(-50%, -50%)",
493
- width: "90vw",
494
- height: "90vh",
495
- backgroundColor: "#fff",
496
- zIndex: 1e4,
497
- display: "flex",
498
- flexDirection: "column",
499
- borderRadius: 12
500
- };
501
- const headerStyles = {
502
- padding: 12,
503
- borderBottom: "1px solid #ccc",
504
- display: "flex",
505
- justifyContent: "space-between",
506
- alignItems: "center"
507
- };
508
- const closeButtonStyles = {
509
- background: "none",
510
- border: "none",
511
- cursor: "pointer"
512
- };
513
- const contentStyles = {
514
- padding: 8,
515
- display: "flex",
516
- flex: 1,
517
- overflow: "auto",
518
- flexDirection: "column"
519
- };
520
- const DevToolsPanelContent = observer(() => {
521
- const stores = getRegisteredStores();
522
- const storeNames = Object.keys(stores);
523
- const serializedData = serializeStoreData(stores);
524
- const onClose = useCallback(() => {
525
- devToolsState.hide();
526
- }, []);
527
- return createPortal(
528
- /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
529
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: overlayStyles, onClick: onClose }),
530
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: panelStyles, children: [
531
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { style: headerStyles, children: [
532
- /* @__PURE__ */ jsxRuntimeExports.jsxs("h3", { children: [
533
- "MobX DevTools (",
534
- storeNames.length,
535
- " store",
536
- storeNames.length !== 1 ? "s" : "",
537
- ")"
538
- ] }),
539
- /* @__PURE__ */ jsxRuntimeExports.jsx(
540
- "button",
541
- {
542
- style: closeButtonStyles,
543
- onClick: onClose,
544
- title: "Close (ESC)",
545
- children: "×"
546
- }
547
- )
548
- ] }),
549
- storeNames.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "No stores registered yet." }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: contentStyles, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
550
- JsonView,
551
- {
552
- data: serializedData,
553
- clickToExpandNode: true,
554
- shouldExpandNode: (level) => level < 2
555
- }
556
- ) })
557
- ] })
558
- ] }),
559
- document.body
560
- );
561
- });
562
- const CustomDevTools = observer(() => {
563
- useEffect(() => {
564
- if (devToolsState.isVisible) {
565
- const handleEscape = (event) => {
566
- if (event.key === "Escape") {
567
- devToolsState.hide();
568
- }
569
- };
570
- document.addEventListener("keydown", handleEscape);
571
- return () => document.removeEventListener("keydown", handleEscape);
572
- }
573
- }, []);
574
- if (!devToolsState.isVisible) {
575
- return null;
576
- }
577
- return /* @__PURE__ */ jsxRuntimeExports.jsx(DevToolsPanelContent, {});
578
- });
579
- function initializeCustomDevTools() {
580
- keyboardShortcutManager.startListening();
581
- console.log(
582
- "[CustomDevTools] Initialized - Press Ctrl+Shift+D (or Cmd+Shift+D) to open"
583
- );
584
- }
585
- export {
586
- CustomDevTools,
587
- initializeCustomDevTools,
588
- setRegisteredStores
589
- };
590
- //# sourceMappingURL=devtools-consolidated-C22ZSOdp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"devtools-consolidated-C22ZSOdp.js","sources":["../../../node_modules/.pnpm/react-json-view-lite@2.4.1_react@18.3.1/node_modules/react-json-view-lite/dist/index.modern.js","../src/lib/internal-details/lib/devtools/serialize-store-data.tsx","../src/lib/internal-details/lib/devtools/devtools-consolidated.tsx"],"sourcesContent":["import { createElement, useRef, useState, useEffect, useId } from 'react';\n\nconst isBoolean = data => {\n return typeof data === 'boolean' || data instanceof Boolean;\n};\nconst isNumber = data => {\n return typeof data === 'number' || data instanceof Number;\n};\nconst isBigInt = data => {\n return typeof data === 'bigint' || data instanceof BigInt;\n};\nconst isDate = data => {\n return !!data && data instanceof Date;\n};\nconst isString = data => {\n return typeof data === 'string' || data instanceof String;\n};\nconst isArray = data => {\n return Array.isArray(data);\n};\nconst isObject = data => {\n return typeof data === 'object' && data !== null;\n};\nconst isFunction = data => {\n return !!data && data instanceof Object && typeof data === 'function';\n};\n\nfunction quoteString(value, quoted) {\n if (quoted === void 0) {\n quoted = false;\n }\n return !value || quoted ? `\"${value}\"` : value;\n}\nfunction quoteStringValue(value, quoted, stringify) {\n if (stringify) {\n return JSON.stringify(value);\n }\n return quoted ? `\"${value}\"` : value;\n}\nfunction ExpandableObject(_ref) {\n let {\n field,\n value,\n data,\n lastElement,\n openBracket,\n closeBracket,\n level,\n style,\n shouldExpandNode,\n clickToExpandNode,\n outerRef,\n beforeExpandChange\n } = _ref;\n const shouldExpandNodeCalledRef = useRef(false);\n const [expanded, setExpanded] = useState(() => shouldExpandNode(level, value, field));\n const expanderButtonRef = useRef(null);\n useEffect(() => {\n if (!shouldExpandNodeCalledRef.current) {\n shouldExpandNodeCalledRef.current = true;\n } else {\n setExpanded(shouldExpandNode(level, value, field));\n }\n }, [shouldExpandNode]);\n const contentsId = useId();\n if (data.length === 0) {\n return EmptyObject({\n field,\n openBracket,\n closeBracket,\n lastElement,\n style\n });\n }\n const expanderIconStyle = expanded ? style.collapseIcon : style.expandIcon;\n const ariaLabel = expanded ? style.ariaLables.collapseJson : style.ariaLables.expandJson;\n const childLevel = level + 1;\n const lastIndex = data.length - 1;\n const setExpandWithCallback = newExpandValue => {\n if (expanded !== newExpandValue && (!beforeExpandChange || beforeExpandChange({\n level,\n value,\n field,\n newExpandValue\n }))) {\n setExpanded(newExpandValue);\n }\n };\n const onKeyDown = e => {\n if (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\n e.preventDefault();\n setExpandWithCallback(e.key === 'ArrowRight');\n } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n const direction = e.key === 'ArrowUp' ? -1 : 1;\n if (!outerRef.current) return;\n const buttonElements = outerRef.current.querySelectorAll('[role=button]');\n let currentIndex = -1;\n for (let i = 0; i < buttonElements.length; i++) {\n if (buttonElements[i].tabIndex === 0) {\n currentIndex = i;\n break;\n }\n }\n if (currentIndex < 0) {\n return;\n }\n const nextIndex = (currentIndex + direction + buttonElements.length) % buttonElements.length;\n buttonElements[currentIndex].tabIndex = -1;\n buttonElements[nextIndex].tabIndex = 0;\n buttonElements[nextIndex].focus();\n }\n };\n const onClick = () => {\n var _outerRef$current;\n setExpandWithCallback(!expanded);\n const buttonElement = expanderButtonRef.current;\n if (!buttonElement) return;\n const prevButtonElement = (_outerRef$current = outerRef.current) === null || _outerRef$current === void 0 ? void 0 : _outerRef$current.querySelector('[role=button][tabindex=\"0\"]');\n if (prevButtonElement) {\n prevButtonElement.tabIndex = -1;\n }\n buttonElement.tabIndex = 0;\n buttonElement.focus();\n };\n return /*#__PURE__*/createElement(\"div\", {\n className: style.basicChildStyle,\n role: 'treeitem',\n \"aria-expanded\": expanded,\n \"aria-selected\": undefined\n }, /*#__PURE__*/createElement(\"span\", {\n className: expanderIconStyle,\n onClick: onClick,\n onKeyDown: onKeyDown,\n role: 'button',\n \"aria-label\": ariaLabel,\n \"aria-expanded\": expanded,\n \"aria-controls\": expanded ? contentsId : undefined,\n ref: expanderButtonRef,\n tabIndex: level === 0 ? 0 : -1\n }), (field || field === '') && (clickToExpandNode ? (\n /*#__PURE__*/\n createElement(\"span\", {\n className: style.clickableLabel,\n onClick: onClick,\n onKeyDown: onKeyDown\n }, quoteString(field, style.quotesForFieldNames), \":\")) : (/*#__PURE__*/createElement(\"span\", {\n className: style.label\n }, quoteString(field, style.quotesForFieldNames), \":\"))), /*#__PURE__*/createElement(\"span\", {\n className: style.punctuation\n }, openBracket), expanded ? (/*#__PURE__*/createElement(\"ul\", {\n id: contentsId,\n role: 'group',\n className: style.childFieldsContainer\n }, data.map((dataElement, index) => (/*#__PURE__*/createElement(DataRender, {\n key: dataElement[0] || index,\n field: dataElement[0],\n value: dataElement[1],\n style: style,\n lastElement: index === lastIndex,\n level: childLevel,\n shouldExpandNode: shouldExpandNode,\n clickToExpandNode: clickToExpandNode,\n outerRef: outerRef\n }))))) : (\n /*#__PURE__*/\n createElement(\"span\", {\n className: style.collapsedContent,\n onClick: onClick,\n onKeyDown: onKeyDown\n })), /*#__PURE__*/createElement(\"span\", {\n className: style.punctuation\n }, closeBracket), !lastElement && /*#__PURE__*/createElement(\"span\", {\n className: style.punctuation\n }, \",\"));\n}\nfunction EmptyObject(_ref2) {\n let {\n field,\n openBracket,\n closeBracket,\n lastElement,\n style\n } = _ref2;\n return /*#__PURE__*/createElement(\"div\", {\n className: style.basicChildStyle,\n role: 'treeitem',\n \"aria-selected\": undefined\n }, (field || field === '') && (/*#__PURE__*/createElement(\"span\", {\n className: style.label\n }, quoteString(field, style.quotesForFieldNames), \":\")), /*#__PURE__*/createElement(\"span\", {\n className: style.punctuation\n }, openBracket), /*#__PURE__*/createElement(\"span\", {\n className: style.punctuation\n }, closeBracket), !lastElement && /*#__PURE__*/createElement(\"span\", {\n className: style.punctuation\n }, \",\"));\n}\nfunction JsonObject(_ref3) {\n let {\n field,\n value,\n style,\n lastElement,\n shouldExpandNode,\n clickToExpandNode,\n level,\n outerRef,\n beforeExpandChange\n } = _ref3;\n return ExpandableObject({\n field,\n value,\n lastElement: lastElement || false,\n level,\n openBracket: '{',\n closeBracket: '}',\n style,\n shouldExpandNode,\n clickToExpandNode,\n data: Object.keys(value).map(key => [key, value[key]]),\n outerRef,\n beforeExpandChange\n });\n}\nfunction JsonArray(_ref4) {\n let {\n field,\n value,\n style,\n lastElement,\n level,\n shouldExpandNode,\n clickToExpandNode,\n outerRef,\n beforeExpandChange\n } = _ref4;\n return ExpandableObject({\n field,\n value,\n lastElement: lastElement || false,\n level,\n openBracket: '[',\n closeBracket: ']',\n style,\n shouldExpandNode,\n clickToExpandNode,\n data: value.map(element => [undefined, element]),\n outerRef,\n beforeExpandChange\n });\n}\nfunction JsonPrimitiveValue(_ref5) {\n let {\n field,\n value,\n style,\n lastElement\n } = _ref5;\n let stringValue;\n let valueStyle = style.otherValue;\n if (value === null) {\n stringValue = 'null';\n valueStyle = style.nullValue;\n } else if (value === undefined) {\n stringValue = 'undefined';\n valueStyle = style.undefinedValue;\n } else if (isString(value)) {\n stringValue = quoteStringValue(value, !style.noQuotesForStringValues, style.stringifyStringValues);\n valueStyle = style.stringValue;\n } else if (isBoolean(value)) {\n stringValue = value ? 'true' : 'false';\n valueStyle = style.booleanValue;\n } else if (isNumber(value)) {\n stringValue = value.toString();\n valueStyle = style.numberValue;\n } else if (isBigInt(value)) {\n stringValue = `${value.toString()}n`;\n valueStyle = style.numberValue;\n } else if (isDate(value)) {\n stringValue = value.toISOString();\n } else if (isFunction(value)) {\n stringValue = 'function() { }';\n } else {\n stringValue = value.toString();\n }\n return /*#__PURE__*/createElement(\"div\", {\n className: style.basicChildStyle,\n role: 'treeitem',\n \"aria-selected\": undefined\n }, (field || field === '') && (/*#__PURE__*/createElement(\"span\", {\n className: style.label\n }, quoteString(field, style.quotesForFieldNames), \":\")), /*#__PURE__*/createElement(\"span\", {\n className: valueStyle\n }, stringValue), !lastElement && /*#__PURE__*/createElement(\"span\", {\n className: style.punctuation\n }, \",\"));\n}\nfunction DataRender(props) {\n const value = props.value;\n if (isArray(value)) {\n return /*#__PURE__*/createElement(JsonArray, Object.assign({}, props));\n }\n if (isObject(value) && !isDate(value) && !isFunction(value)) {\n return /*#__PURE__*/createElement(JsonObject, Object.assign({}, props));\n }\n return /*#__PURE__*/createElement(JsonPrimitiveValue, Object.assign({}, props));\n}\n\nvar styles = {\"container-base\":\"_GzYRV\",\"punctuation-base\":\"_3eOF8\",\"pointer\":\"_1MFti\",\"expander-base\":\"_f10Tu _1MFti\",\"expand-icon\":\"_1UmXx\",\"collapse-icon\":\"_1LId0\",\"collapsed-content-base\":\"_1pNG9 _1MFti\",\"container-light\":\"_2IvMF _GzYRV\",\"basic-element-style\":\"_2bkNM\",\"child-fields-container\":\"_1BXBN\",\"label-light\":\"_1MGIk\",\"clickable-label-light\":\"_2YKJg _1MGIk _1MFti\",\"punctuation-light\":\"_3uHL6 _3eOF8\",\"value-null-light\":\"_2T6PJ\",\"value-undefined-light\":\"_1Gho6\",\"value-string-light\":\"_vGjyY\",\"value-number-light\":\"_1bQdo\",\"value-boolean-light\":\"_3zQKs\",\"value-other-light\":\"_1xvuR\",\"collapse-icon-light\":\"_oLqym _f10Tu _1MFti _1LId0\",\"expand-icon-light\":\"_2AXVT _f10Tu _1MFti _1UmXx\",\"collapsed-content-light\":\"_2KJWg _1pNG9 _1MFti\",\"container-dark\":\"_11RoI _GzYRV\",\"expand-icon-dark\":\"_17H2C _f10Tu _1MFti _1UmXx\",\"collapse-icon-dark\":\"_3QHg2 _f10Tu _1MFti _1LId0\",\"collapsed-content-dark\":\"_3fDAz _1pNG9 _1MFti\",\"label-dark\":\"_2bSDX\",\"clickable-label-dark\":\"_1RQEj _2bSDX _1MFti\",\"punctuation-dark\":\"_gsbQL _3eOF8\",\"value-null-dark\":\"_LaAZe\",\"value-undefined-dark\":\"_GTKgm\",\"value-string-dark\":\"_Chy1W\",\"value-number-dark\":\"_2bveF\",\"value-boolean-dark\":\"_2vRm-\",\"value-other-dark\":\"_1prJR\"};\n\nconst defaultAriaLables = {\n collapseJson: 'collapse JSON',\n expandJson: 'expand JSON'\n};\nconst defaultStyles = {\n container: styles['container-light'],\n basicChildStyle: styles['basic-element-style'],\n childFieldsContainer: styles['child-fields-container'],\n label: styles['label-light'],\n clickableLabel: styles['clickable-label-light'],\n nullValue: styles['value-null-light'],\n undefinedValue: styles['value-undefined-light'],\n stringValue: styles['value-string-light'],\n booleanValue: styles['value-boolean-light'],\n numberValue: styles['value-number-light'],\n otherValue: styles['value-other-light'],\n punctuation: styles['punctuation-light'],\n collapseIcon: styles['collapse-icon-light'],\n expandIcon: styles['expand-icon-light'],\n collapsedContent: styles['collapsed-content-light'],\n noQuotesForStringValues: false,\n quotesForFieldNames: false,\n ariaLables: defaultAriaLables,\n stringifyStringValues: false\n};\nconst darkStyles = {\n container: styles['container-dark'],\n basicChildStyle: styles['basic-element-style'],\n childFieldsContainer: styles['child-fields-container'],\n label: styles['label-dark'],\n clickableLabel: styles['clickable-label-dark'],\n nullValue: styles['value-null-dark'],\n undefinedValue: styles['value-undefined-dark'],\n stringValue: styles['value-string-dark'],\n booleanValue: styles['value-boolean-dark'],\n numberValue: styles['value-number-dark'],\n otherValue: styles['value-other-dark'],\n punctuation: styles['punctuation-dark'],\n collapseIcon: styles['collapse-icon-dark'],\n expandIcon: styles['expand-icon-dark'],\n collapsedContent: styles['collapsed-content-dark'],\n noQuotesForStringValues: false,\n quotesForFieldNames: false,\n ariaLables: defaultAriaLables,\n stringifyStringValues: false\n};\nconst allExpanded = () => true;\nconst collapseAllNested = level => level < 1;\nconst JsonView = _ref => {\n let {\n data,\n style = defaultStyles,\n shouldExpandNode = allExpanded,\n clickToExpandNode = false,\n beforeExpandChange,\n ...ariaAttrs\n } = _ref;\n const outerRef = useRef(null);\n return /*#__PURE__*/createElement(\"div\", Object.assign({\n \"aria-label\": 'JSON view'\n }, ariaAttrs, {\n className: style.container,\n ref: outerRef,\n role: 'tree'\n }), /*#__PURE__*/createElement(DataRender, {\n value: data,\n style: {\n ...defaultStyles,\n ...style\n },\n lastElement: true,\n level: 0,\n shouldExpandNode: shouldExpandNode,\n clickToExpandNode: clickToExpandNode,\n outerRef: outerRef,\n beforeExpandChange: beforeExpandChange\n }));\n};\n\nexport { JsonView, allExpanded, collapseAllNested, darkStyles, defaultStyles };\n//# sourceMappingURL=index.modern.js.map\n","import { toJS } from \"mobx\";\n\nexport function serializeStoreData(\n stores_: Record<string, any>,\n): Record<string, any> {\n try {\n const stores = toJS(stores_);\n const seen = new Set();\n function serialize(obj: any): any {\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n\n if (seen.has(obj)) {\n return \"[Already Seen]\";\n }\n\n // Create new path for this branch of recursion\n seen.add(obj);\n\n if (Array.isArray(obj)) {\n return obj.map(serialize);\n }\n\n const result: any = {};\n\n for (const key of Object.keys(obj)) {\n if (typeof obj[key] === \"function\") {\n result[key] = \"[Function]\";\n }\n\n try {\n const descriptor = Object.getOwnPropertyDescriptor(obj, key);\n if (descriptor && descriptor.get) {\n try {\n result[key] = serialize(obj[key]);\n } catch {\n result[key] = \"[Getter Error]\";\n }\n } else {\n result[key] = serialize(obj[key]);\n }\n } catch {\n result[key] = \"[Access Error]\";\n }\n }\n\n // Add type information\n if (obj.constructor && obj.constructor.name !== \"Object\") {\n result.__type__ = obj.constructor.name;\n }\n\n return result;\n }\n\n return serialize(stores);\n } catch (error) {\n return {\n error: `Error serializing data: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n };\n }\n}\n","import { makeAutoObservable } from \"mobx\";\nimport { observer } from \"mobx-react-lite\";\nimport React, { useCallback, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { JsonView } from \"react-json-view-lite\";\nimport \"react-json-view-lite/dist/index.css\";\nimport { serializeStoreData } from \"./serialize-store-data.js\";\n\n// ============================================================================\n// STATE MANAGEMENT\n// ============================================================================\n\nclass DevToolsState {\n isVisible = false;\n\n constructor() {\n makeAutoObservable(this);\n }\n\n show() {\n this.isVisible = true;\n }\n\n hide() {\n this.isVisible = false;\n }\n\n toggle() {\n this.isVisible = !this.isVisible;\n }\n}\n\nconst devToolsState = new DevToolsState();\n\n// ============================================================================\n// KEYBOARD SHORTCUT MANAGER\n// ============================================================================\n\nclass KeyboardShortcutManager {\n private isListening = false;\n private shortcutKeys = {\n key: \"KeyD\",\n ctrlKey: true,\n shiftKey: true,\n altKey: false,\n };\n\n constructor() {\n this.handleKeyDown = this.handleKeyDown.bind(this);\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n const { ctrlKey, shiftKey, altKey, metaKey } = event;\n const isModifierMatch = (ctrlKey || metaKey) && shiftKey && !altKey;\n const isKeyMatch = event.code === this.shortcutKeys.key;\n if (isModifierMatch && isKeyMatch) {\n event.preventDefault();\n event.stopPropagation();\n devToolsState.toggle();\n }\n }\n\n private handleEscapeKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && devToolsState.isVisible) {\n event.preventDefault();\n devToolsState.hide();\n }\n };\n\n startListening() {\n if (this.isListening) return;\n\n this.isListening = true;\n document.addEventListener(\"keydown\", this.handleKeyDown, true);\n document.addEventListener(\"keydown\", this.handleEscapeKey, true);\n }\n\n stopListening() {\n if (!this.isListening) return;\n\n this.isListening = false;\n document.removeEventListener(\"keydown\", this.handleKeyDown, true);\n document.removeEventListener(\"keydown\", this.handleEscapeKey, true);\n }\n\n updateShortcut(options: Partial<typeof this.shortcutKeys>) {\n this.shortcutKeys = { ...this.shortcutKeys, ...options };\n }\n}\n\nconst keyboardShortcutManager = new KeyboardShortcutManager();\n\n// ============================================================================\n// STORE ACCESS\n// ============================================================================\n\n// This will be populated by the registerStores function\nlet registeredStores: Record<string, any> = {};\n\nexport function setRegisteredStores(stores: Record<string, any>) {\n registeredStores = stores;\n}\n\nfunction getRegisteredStores() {\n return registeredStores;\n}\n\n// ============================================================================\n// DEVTOOLS PANEL COMPONENT\n// ============================================================================\n\nconst overlayStyles: React.CSSProperties = {\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(0, 0, 0, 0.5)\",\n zIndex: 9999,\n};\n\nconst panelStyles: React.CSSProperties = {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"90vw\",\n height: \"90vh\",\n backgroundColor: \"#fff\",\n zIndex: 10000,\n display: \"flex\",\n flexDirection: \"column\",\n borderRadius: 12,\n};\n\nconst headerStyles: React.CSSProperties = {\n padding: 12,\n borderBottom: \"1px solid #ccc\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n};\n\nconst closeButtonStyles: React.CSSProperties = {\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n};\n\nconst contentStyles: React.CSSProperties = {\n padding: 8,\n display: \"flex\",\n flex: 1,\n overflow: \"auto\",\n flexDirection: \"column\",\n};\n\nconst DevToolsPanelContent: React.FC = observer(() => {\n const stores = getRegisteredStores();\n const storeNames = Object.keys(stores);\n\n const serializedData = serializeStoreData(stores);\n const onClose = useCallback(() => {\n devToolsState.hide();\n }, []);\n\n return createPortal(\n <>\n <div style={overlayStyles} onClick={onClose} />\n <div style={panelStyles}>\n <div style={headerStyles}>\n <h3>\n MobX DevTools ({storeNames.length} store\n {storeNames.length !== 1 ? \"s\" : \"\"})\n </h3>\n <button\n style={closeButtonStyles}\n onClick={onClose}\n title=\"Close (ESC)\"\n >\n ×\n </button>\n </div>\n {storeNames.length === 0 ? (\n <div>No stores registered yet.</div>\n ) : (\n <div style={contentStyles}>\n <JsonView\n data={serializedData}\n clickToExpandNode={true}\n shouldExpandNode={(level) => level < 2}\n />\n </div>\n )}\n </div>\n </>,\n document.body,\n );\n});\n\n// ============================================================================\n// PROVIDER COMPONENT\n// ============================================================================\n\nexport const CustomDevTools: React.FC = observer(() => {\n useEffect(() => {\n if (devToolsState.isVisible) {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n devToolsState.hide();\n }\n };\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }\n }, []);\n\n if (!devToolsState.isVisible) {\n return null;\n }\n\n return <DevToolsPanelContent />;\n});\n\n// ============================================================================\n// INITIALIZATION\n// ============================================================================\n\nexport function initializeCustomDevTools() {\n keyboardShortcutManager.startListening();\n console.log(\n \"[CustomDevTools] Initialized - Press Ctrl+Shift+D (or Cmd+Shift+D) to open\",\n );\n}\n"],"names":["jsxs","Fragment","jsx"],"mappings":"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","x_google_ignoreList":[0]}