dev-inspector 1.0.2 → 1.0.4

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 (58) hide show
  1. package/README.md +15 -48
  2. package/lib/index.d.ts +1 -6
  3. package/lib/index.js +1 -10
  4. package/lib/init.d.ts +11 -22
  5. package/lib/init.js +33 -24
  6. package/lib/ui/logList/networkDetails.d.ts +2 -0
  7. package/lib/ui/logList/networkDetails.js +75 -0
  8. package/lib/ui/logList.js +6 -0
  9. package/lib/ui/panel/behavior/index.d.ts +1 -0
  10. package/lib/ui/panel/behavior/index.js +5 -0
  11. package/lib/ui/panel/behavior/setupPanelBehavior.d.ts +5 -0
  12. package/lib/ui/panel/behavior/setupPanelBehavior.js +75 -0
  13. package/lib/ui/panel/bindings/bindStorageToPanelView.d.ts +16 -0
  14. package/lib/ui/panel/bindings/bindStorageToPanelView.js +76 -0
  15. package/lib/ui/panel/bindings/index.d.ts +2 -0
  16. package/lib/ui/panel/bindings/index.js +5 -0
  17. package/lib/ui/panel/bindings/types.d.ts +5 -0
  18. package/lib/ui/panel/bindings/types.js +2 -0
  19. package/lib/ui/panel/dom/buildPanelDOM.d.ts +3 -0
  20. package/lib/ui/panel/dom/buildPanelDOM.js +73 -0
  21. package/lib/ui/panel/dom/constants.d.ts +3 -0
  22. package/lib/ui/panel/dom/constants.js +28 -0
  23. package/lib/ui/panel/dom/index.d.ts +2 -0
  24. package/lib/ui/panel/dom/index.js +5 -0
  25. package/lib/ui/panel/dom/types.d.ts +25 -0
  26. package/lib/ui/panel/dom/types.js +2 -0
  27. package/lib/ui/panel/index.d.ts +15 -0
  28. package/lib/ui/panel/index.js +16 -0
  29. package/lib/ui/panel/resize/attachResizeHandling.d.ts +2 -0
  30. package/lib/ui/panel/resize/attachResizeHandling.js +94 -0
  31. package/lib/ui/panel/resize/index.d.ts +2 -0
  32. package/lib/ui/panel/resize/index.js +5 -0
  33. package/lib/ui/panel/resize/types.d.ts +3 -0
  34. package/lib/ui/panel/resize/types.js +2 -0
  35. package/lib/ui/panel/shared/dom.d.ts +1 -0
  36. package/lib/ui/panel/shared/dom.js +9 -0
  37. package/lib/ui/panel/shared/ensureDocument.d.ts +1 -0
  38. package/lib/ui/panel/shared/ensureDocument.js +9 -0
  39. package/lib/ui/panel/shared/ensureStyle.d.ts +1 -0
  40. package/lib/ui/panel/shared/ensureStyle.js +14 -0
  41. package/lib/ui/panel/shared/index.d.ts +6 -0
  42. package/lib/ui/panel/shared/index.js +13 -0
  43. package/lib/ui/panel/shared/math.d.ts +1 -0
  44. package/lib/ui/panel/shared/math.js +6 -0
  45. package/lib/ui/panel/shared/types.d.ts +11 -0
  46. package/lib/ui/panel/shared/types.js +2 -0
  47. package/lib/ui/panel/shared/window.d.ts +2 -0
  48. package/lib/ui/panel/shared/window.js +6 -0
  49. package/lib/ui/panel/state/createPanelState.d.ts +2 -0
  50. package/lib/ui/panel/state/createPanelState.js +11 -0
  51. package/lib/ui/panel/state/index.d.ts +2 -0
  52. package/lib/ui/panel/state/index.js +5 -0
  53. package/lib/ui/panel/state/types.d.ts +8 -0
  54. package/lib/ui/panel/state/types.js +2 -0
  55. package/lib/ui/panel.js +219 -186
  56. package/lib/ui/panelStyles.d.ts +1 -1
  57. package/lib/ui/panelStyles.js +22 -0
  58. package/package.json +16 -1
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NETWORK_TAB_HTML = exports.CONSOLE_TAB_HTML = exports.TOGGLE_BUTTON_HTML = void 0;
4
+ exports.TOGGLE_BUTTON_HTML = `<span class="di-toggleTitle">Dev Inspector</span>` +
5
+ `<span class="di-toggleMeta">` +
6
+ `<span class="di-toggleBadge" data-di-toggle-count="console">` +
7
+ `<svg class="di-toggleIcon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 5.5C4 4.67 4.67 4 5.5 4H18.5C19.33 4 20 4.67 20 5.5V15.5C20 16.33 19.33 17 18.5 17H13.5L12 18.5L10.5 17H5.5C4.67 17 4 16.33 4 15.5V5.5Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M7 8H17" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><path d="M7 11H14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>` +
8
+ `<span data-di-toggle-count-value="console">0</span>` +
9
+ `<span class="di-toggleErr" data-di-toggle-error="console" aria-label="Console errors">` +
10
+ `<span class="di-toggleErrIcon">!</span>` +
11
+ `<span data-di-toggle-error-value="console">0</span>` +
12
+ `</span>` +
13
+ `</span>` +
14
+ `<span class="di-toggleBadge" data-di-toggle-count="network">` +
15
+ `<svg class="di-toggleIcon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 12C4 7.58 7.58 4 12 4C16.42 4 20 7.58 20 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><path d="M6 12C6 8.69 8.69 6 12 6C15.31 6 18 8.69 18 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><path d="M8.5 12C8.5 10.07 10.07 8.5 12 8.5C13.93 8.5 15.5 10.07 15.5 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><path d="M12 12L12 20" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><circle cx="12" cy="20" r="1.5" fill="currentColor"/></svg>` +
16
+ `<span data-di-toggle-count-value="network">0</span>` +
17
+ `<span class="di-toggleErr" data-di-toggle-error="network" aria-label="Network errors">` +
18
+ `<span class="di-toggleErrIcon">!</span>` +
19
+ `<span data-di-toggle-error-value="network">0</span>` +
20
+ `</span>` +
21
+ `</span>` +
22
+ `</span>`;
23
+ exports.CONSOLE_TAB_HTML = `<svg class="di-tabIcon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 5.5C4 4.67 4.67 4 5.5 4H18.5C19.33 4 20 4.67 20 5.5V15.5C20 16.33 19.33 17 18.5 17H13.5L12 18.5L10.5 17H5.5C4.67 17 4 16.33 4 15.5V5.5Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M7 8H17" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><path d="M7 11H14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>` +
24
+ `<span>Console</span>` +
25
+ `<span class="di-badge" data-di-count="console">0</span>`;
26
+ exports.NETWORK_TAB_HTML = `<svg class="di-tabIcon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 12C4 7.58 7.58 4 12 4C16.42 4 20 7.58 20 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><path d="M6 12C6 8.69 8.69 6 12 6C15.31 6 18 8.69 18 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><path d="M8.5 12C8.5 10.07 10.07 8.5 12 8.5C13.93 8.5 15.5 10.07 15.5 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><path d="M12 12L12 20" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><circle cx="12" cy="20" r="1.5" fill="currentColor"/></svg>` +
27
+ `<span>Network</span>` +
28
+ `<span class="di-badge" data-di-count="network">0</span>`;
@@ -0,0 +1,2 @@
1
+ export { buildPanelDOM } from "./buildPanelDOM";
2
+ export type { PanelCountersDOM, PanelDOM } from "./types";
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildPanelDOM = void 0;
4
+ var buildPanelDOM_1 = require("./buildPanelDOM");
5
+ Object.defineProperty(exports, "buildPanelDOM", { enumerable: true, get: function () { return buildPanelDOM_1.buildPanelDOM; } });
@@ -0,0 +1,25 @@
1
+ import type { createLogList } from "../../logList";
2
+ export type PanelCountersDOM = {
3
+ headerConsoleCount: HTMLElement;
4
+ headerNetworkCount: HTMLElement;
5
+ toggleConsoleCount: HTMLElement;
6
+ toggleNetworkCount: HTMLElement;
7
+ toggleConsoleErrorCount: HTMLElement;
8
+ toggleNetworkErrorCount: HTMLElement;
9
+ toggleConsoleErrorWrap: HTMLElement;
10
+ toggleNetworkErrorWrap: HTMLElement;
11
+ };
12
+ export type PanelDOM = {
13
+ root: HTMLDivElement;
14
+ toggleBtn: HTMLButtonElement;
15
+ panel: HTMLDivElement;
16
+ header: HTMLDivElement;
17
+ body: HTMLDivElement;
18
+ closeBtn: HTMLButtonElement;
19
+ clearBtn: HTMLButtonElement;
20
+ consoleTab: HTMLButtonElement;
21
+ networkTab: HTMLButtonElement;
22
+ resizeHandle: HTMLDivElement;
23
+ list: ReturnType<typeof createLogList>;
24
+ counters: PanelCountersDOM;
25
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,15 @@
1
+ import type { LogStorage } from "../../storage/logStorage";
2
+ export type PanelOptions = {
3
+ storage: LogStorage;
4
+ title?: string;
5
+ initiallyOpen?: boolean;
6
+ mount?: HTMLElement;
7
+ };
8
+ export type PanelHandle = {
9
+ open: () => void;
10
+ close: () => void;
11
+ toggle: () => void;
12
+ destroy: () => void;
13
+ isOpen: () => boolean;
14
+ };
15
+ export declare function createPanel(options: PanelOptions): PanelHandle;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createPanel = createPanel;
4
+ const ensureDocument_1 = require("./shared/ensureDocument");
5
+ const ensureStyle_1 = require("./shared/ensureStyle");
6
+ const dom_1 = require("./dom");
7
+ const state_1 = require("./state");
8
+ const behavior_1 = require("./behavior");
9
+ function createPanel(options) {
10
+ var _a;
11
+ const doc = (0, ensureDocument_1.ensureDocument)();
12
+ (0, ensureStyle_1.ensureStyle)(doc);
13
+ const dom = (0, dom_1.buildPanelDOM)(doc, options);
14
+ const state = (0, state_1.createPanelState)((_a = options.initiallyOpen) !== null && _a !== void 0 ? _a : false);
15
+ return (0, behavior_1.setupPanelBehavior)(dom, state, options.storage);
16
+ }
@@ -0,0 +1,2 @@
1
+ import type { ResizeControls } from "./types";
2
+ export declare function attachResizeHandling(panel: HTMLElement, resizeHandle: HTMLElement): ResizeControls;
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.attachResizeHandling = attachResizeHandling;
4
+ const shared_1 = require("../shared");
5
+ function attachResizeHandling(panel, resizeHandle) {
6
+ var _a;
7
+ const MAX_WIDTH_CAP = 920;
8
+ const MAX_HEIGHT_CAP = 720;
9
+ const MARGIN_X = 24;
10
+ const MARGIN_Y = 68;
11
+ const minSize = (() => {
12
+ const r = panel.getBoundingClientRect();
13
+ return { w: Math.round(r.width), h: Math.round(r.height) };
14
+ })();
15
+ const getMaxSize = () => {
16
+ const win = (0, shared_1.getWindow)();
17
+ const vw = typeof win.innerWidth === "number" ? win.innerWidth : 0;
18
+ const vh = typeof win.innerHeight === "number" ? win.innerHeight : 0;
19
+ return {
20
+ w: Math.max(200, Math.min(MAX_WIDTH_CAP, vw - MARGIN_X)),
21
+ h: Math.max(180, Math.min(MAX_HEIGHT_CAP, vh - MARGIN_Y)),
22
+ };
23
+ };
24
+ const getCurrentSize = () => {
25
+ const r = panel.getBoundingClientRect();
26
+ return { w: Math.round(r.width), h: Math.round(r.height) };
27
+ };
28
+ const applySize = (next) => {
29
+ const max = getMaxSize();
30
+ const effMinW = Math.min(minSize.w, max.w);
31
+ const effMinH = Math.min(minSize.h, max.h);
32
+ const w = (0, shared_1.clamp)(next.w, effMinW, max.w);
33
+ const h = (0, shared_1.clamp)(next.h, effMinH, max.h);
34
+ panel.style.width = `${w}px`;
35
+ panel.style.height = `${h}px`;
36
+ };
37
+ const ensureWithinViewport = () => {
38
+ if (!panel.style.width && !panel.style.height)
39
+ return;
40
+ applySize(getCurrentSize());
41
+ };
42
+ let resizing = false;
43
+ let startX = 0;
44
+ let startY = 0;
45
+ let startW = 0;
46
+ let startH = 0;
47
+ const onResizeMove = (ev) => {
48
+ if (!resizing)
49
+ return;
50
+ const dx = startX - ev.clientX;
51
+ const dy = startY - ev.clientY;
52
+ applySize({ w: startW + dx, h: startH + dy });
53
+ };
54
+ const stopResize = () => {
55
+ var _a, _b, _c;
56
+ if (!resizing)
57
+ return;
58
+ resizing = false;
59
+ const win = (0, shared_1.getWindow)();
60
+ (_a = win.removeEventListener) === null || _a === void 0 ? void 0 : _a.call(win, "pointermove", onResizeMove);
61
+ (_b = win.removeEventListener) === null || _b === void 0 ? void 0 : _b.call(win, "pointerup", stopResize);
62
+ (_c = win.removeEventListener) === null || _c === void 0 ? void 0 : _c.call(win, "pointercancel", stopResize);
63
+ };
64
+ const onResizeStart = (ev) => {
65
+ var _a, _b, _c;
66
+ resizing = true;
67
+ startX = ev.clientX;
68
+ startY = ev.clientY;
69
+ const cur = getCurrentSize();
70
+ startW = cur.w;
71
+ startH = cur.h;
72
+ try {
73
+ resizeHandle.setPointerCapture(ev.pointerId);
74
+ }
75
+ catch (_d) {
76
+ void 0;
77
+ }
78
+ const win = (0, shared_1.getWindow)();
79
+ (_a = win.addEventListener) === null || _a === void 0 ? void 0 : _a.call(win, "pointermove", onResizeMove);
80
+ (_b = win.addEventListener) === null || _b === void 0 ? void 0 : _b.call(win, "pointerup", stopResize);
81
+ (_c = win.addEventListener) === null || _c === void 0 ? void 0 : _c.call(win, "pointercancel", stopResize);
82
+ };
83
+ const onWindowResize = () => ensureWithinViewport();
84
+ const win = (0, shared_1.getWindow)();
85
+ (_a = win.addEventListener) === null || _a === void 0 ? void 0 : _a.call(win, "resize", onWindowResize);
86
+ resizeHandle.addEventListener("pointerdown", onResizeStart);
87
+ const destroy = () => {
88
+ var _a;
89
+ resizeHandle.removeEventListener("pointerdown", onResizeStart);
90
+ stopResize();
91
+ (_a = win.removeEventListener) === null || _a === void 0 ? void 0 : _a.call(win, "resize", onWindowResize);
92
+ };
93
+ return { destroy };
94
+ }
@@ -0,0 +1,2 @@
1
+ export { attachResizeHandling } from "./attachResizeHandling";
2
+ export type { ResizeControls } from "./types";
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.attachResizeHandling = void 0;
4
+ var attachResizeHandling_1 = require("./attachResizeHandling");
5
+ Object.defineProperty(exports, "attachResizeHandling", { enumerable: true, get: function () { return attachResizeHandling_1.attachResizeHandling; } });
@@ -0,0 +1,3 @@
1
+ export type ResizeControls = {
2
+ destroy: () => void;
3
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export declare function queryOrThrow<T extends Element>(root: ParentNode, selector: string): T;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.queryOrThrow = queryOrThrow;
4
+ function queryOrThrow(root, selector) {
5
+ const el = root.querySelector(selector);
6
+ if (!el)
7
+ throw new Error(`Missing required element: ${selector}`);
8
+ return el;
9
+ }
@@ -0,0 +1 @@
1
+ export declare function ensureDocument(): Document;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ensureDocument = ensureDocument;
4
+ function ensureDocument() {
5
+ if (typeof document === "undefined") {
6
+ throw new Error("Panel UI requires a browser-like environment with document.");
7
+ }
8
+ return document;
9
+ }
@@ -0,0 +1 @@
1
+ export declare function ensureStyle(doc: Document): void;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ensureStyle = ensureStyle;
4
+ const panelStyles_1 = require("../../panelStyles");
5
+ function ensureStyle(doc) {
6
+ const id = "dev-inspector-panel-style";
7
+ const existing = doc.getElementById(id);
8
+ if (existing)
9
+ return;
10
+ const style = doc.createElement("style");
11
+ style.id = id;
12
+ style.textContent = panelStyles_1.PANEL_CSS;
13
+ doc.head.append(style);
14
+ }
@@ -0,0 +1,6 @@
1
+ export type { Size, TabKey, WindowLike } from "./types";
2
+ export { clamp } from "./math";
3
+ export { queryOrThrow } from "./dom";
4
+ export { getWindow } from "./window";
5
+ export { ensureDocument } from "./ensureDocument";
6
+ export { ensureStyle } from "./ensureStyle";
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ensureStyle = exports.ensureDocument = exports.getWindow = exports.queryOrThrow = exports.clamp = void 0;
4
+ var math_1 = require("./math");
5
+ Object.defineProperty(exports, "clamp", { enumerable: true, get: function () { return math_1.clamp; } });
6
+ var dom_1 = require("./dom");
7
+ Object.defineProperty(exports, "queryOrThrow", { enumerable: true, get: function () { return dom_1.queryOrThrow; } });
8
+ var window_1 = require("./window");
9
+ Object.defineProperty(exports, "getWindow", { enumerable: true, get: function () { return window_1.getWindow; } });
10
+ var ensureDocument_1 = require("./ensureDocument");
11
+ Object.defineProperty(exports, "ensureDocument", { enumerable: true, get: function () { return ensureDocument_1.ensureDocument; } });
12
+ var ensureStyle_1 = require("./ensureStyle");
13
+ Object.defineProperty(exports, "ensureStyle", { enumerable: true, get: function () { return ensureStyle_1.ensureStyle; } });
@@ -0,0 +1 @@
1
+ export declare function clamp(n: number, min: number, max: number): number;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clamp = clamp;
4
+ function clamp(n, min, max) {
5
+ return Math.max(min, Math.min(max, n));
6
+ }
@@ -0,0 +1,11 @@
1
+ export type TabKey = "console" | "network";
2
+ export type Size = {
3
+ w: number;
4
+ h: number;
5
+ };
6
+ export type WindowLike = {
7
+ innerWidth?: number;
8
+ innerHeight?: number;
9
+ addEventListener?: (type: string, listener: EventListener, options?: unknown) => void;
10
+ removeEventListener?: (type: string, listener: EventListener, options?: unknown) => void;
11
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ import type { WindowLike } from "./types";
2
+ export declare function getWindow(): WindowLike;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWindow = getWindow;
4
+ function getWindow() {
5
+ return globalThis;
6
+ }
@@ -0,0 +1,2 @@
1
+ import type { PanelState } from "./types";
2
+ export declare function createPanelState(initiallyOpen: boolean): PanelState;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createPanelState = createPanelState;
4
+ function createPanelState(initiallyOpen) {
5
+ return {
6
+ open: initiallyOpen,
7
+ tab: "console",
8
+ entries: { console: [], network: [] },
9
+ errorCounts: { console: 0, network: 0 },
10
+ };
11
+ }
@@ -0,0 +1,2 @@
1
+ export { createPanelState } from "./createPanelState";
2
+ export type { PanelState } from "./types";
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createPanelState = void 0;
4
+ var createPanelState_1 = require("./createPanelState");
5
+ Object.defineProperty(exports, "createPanelState", { enumerable: true, get: function () { return createPanelState_1.createPanelState; } });
@@ -0,0 +1,8 @@
1
+ import type { LogEntry } from "../../../utils/types";
2
+ import type { TabKey } from "../shared/types";
3
+ export type PanelState = {
4
+ open: boolean;
5
+ tab: TabKey;
6
+ entries: Record<TabKey, LogEntry[]>;
7
+ errorCounts: Record<TabKey, number>;
8
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });