@edv4h/usketch-plugin-debug-hud 1.0.0 → 3.0.0
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.
- package/dist/debug-hud.d.ts +3 -1
- package/dist/debug-hud.d.ts.map +1 -1
- package/dist/debug-hud.js +16 -23
- package/dist/debug-hud.js.map +1 -1
- package/dist/event-logger.d.ts +4 -0
- package/dist/event-logger.d.ts.map +1 -1
- package/dist/event-logger.js +47 -8
- package/dist/event-logger.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/panels/general-panel.d.ts.map +1 -1
- package/dist/panels/general-panel.js +17 -1
- package/dist/panels/general-panel.js.map +1 -1
- package/dist/panels/shapes-panel.d.ts +6 -2
- package/dist/panels/shapes-panel.d.ts.map +1 -1
- package/dist/panels/shapes-panel.js +48 -8
- package/dist/panels/shapes-panel.js.map +1 -1
- package/dist/plugin.d.ts +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +47 -44
- package/dist/plugin.js.map +1 -1
- package/dist/sync-status-types.d.ts +14 -3
- package/dist/sync-status-types.d.ts.map +1 -1
- package/dist/sync-status-types.js +6 -2
- package/dist/sync-status-types.js.map +1 -1
- package/dist/visibility-store.d.ts +7 -0
- package/dist/visibility-store.d.ts.map +1 -0
- package/dist/visibility-store.js +34 -0
- package/dist/visibility-store.js.map +1 -0
- package/package.json +2 -2
package/dist/debug-hud.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { EventLogger } from "./event-logger.js";
|
|
|
3
3
|
import type { FpsCounter } from "./fps-counter.js";
|
|
4
4
|
import type { PointerTracker } from "./pointer-tracker.js";
|
|
5
5
|
import type { SyncStatusTrackerLike } from "./sync-status-types.js";
|
|
6
|
+
import type { VisibilityStore } from "./visibility-store.js";
|
|
6
7
|
interface DebugHudProps {
|
|
7
8
|
store: BoardStore;
|
|
8
9
|
fpsCounter: FpsCounter;
|
|
@@ -15,7 +16,8 @@ interface DebugHudProps {
|
|
|
15
16
|
syncStatus?: SyncStatusTrackerLike;
|
|
16
17
|
events: EventBus;
|
|
17
18
|
ctx: LayerRenderContext;
|
|
19
|
+
visibility: VisibilityStore;
|
|
18
20
|
}
|
|
19
|
-
export declare function DebugHud({ store, fpsCounter, eventLogger, pointerTracker, commands, tools, layers, shapes, syncStatus, events, ctx, }: DebugHudProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export declare function DebugHud({ store, fpsCounter, eventLogger, pointerTracker, commands, tools, layers, shapes, syncStatus, events, ctx, visibility, }: DebugHudProps): import("react/jsx-runtime").JSX.Element;
|
|
20
22
|
export {};
|
|
21
23
|
//# sourceMappingURL=debug-hud.d.ts.map
|
package/dist/debug-hud.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug-hud.d.ts","sourceRoot":"","sources":["../src/debug-hud.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,UAAU,EACV,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"debug-hud.d.ts","sourceRoot":"","sources":["../src/debug-hud.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,UAAU,EACV,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,UAAU,aAAa;IACtB,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,MAAM,EAAE,QAAQ,CAAC;IACjB,GAAG,EAAE,kBAAkB,CAAC;IACxB,UAAU,EAAE,eAAe,CAAC;CAC5B;AAQD,wBAAgB,QAAQ,CAAC,EACxB,KAAK,EACL,UAAU,EACV,WAAW,EACX,cAAc,EACd,QAAQ,EACR,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,MAAM,EACN,GAAG,EACH,UAAU,GACV,EAAE,aAAa,2CA0Gf"}
|
package/dist/debug-hud.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useState } from "react";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useState, useSyncExternalStore } from "react";
|
|
3
3
|
import { Minimap } from "./overlays/minimap.js";
|
|
4
4
|
import { ShapeBoundsOverlay } from "./overlays/shape-bounds-overlay.js";
|
|
5
5
|
import { EventsPanel } from "./panels/events-panel.js";
|
|
@@ -12,16 +12,10 @@ function isEditableTarget(target) {
|
|
|
12
12
|
const tag = target.tagName;
|
|
13
13
|
return tag === "INPUT" || tag === "TEXTAREA" || target.isContentEditable;
|
|
14
14
|
}
|
|
15
|
-
export function DebugHud({ store, fpsCounter, eventLogger, pointerTracker, commands, tools, layers, shapes, syncStatus, events, ctx, }) {
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
return localStorage.getItem(STORAGE_KEY) === "1";
|
|
20
|
-
}
|
|
21
|
-
catch {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
15
|
+
export function DebugHud({ store, fpsCounter, eventLogger, pointerTracker, commands, tools, layers, shapes, syncStatus, events, ctx, visibility, }) {
|
|
16
|
+
const subscribeVisibility = useCallback((cb) => visibility.subscribe(cb), [visibility]);
|
|
17
|
+
const getVisibility = useCallback(() => visibility.get(), [visibility]);
|
|
18
|
+
const visible = useSyncExternalStore(subscribeVisibility, getVisibility, getVisibility);
|
|
25
19
|
const [hoveredShapeId, setHoveredShapeId] = useState(null);
|
|
26
20
|
// Keyboard shortcut (backtick)
|
|
27
21
|
useEffect(() => {
|
|
@@ -31,24 +25,23 @@ export function DebugHud({ store, fpsCounter, eventLogger, pointerTracker, comma
|
|
|
31
25
|
if (e.key === "`" || e.code === "Backquote") {
|
|
32
26
|
if (!e.ctrlKey && !e.metaKey && !e.altKey && !e.shiftKey) {
|
|
33
27
|
e.preventDefault();
|
|
34
|
-
|
|
35
|
-
const next = !v;
|
|
36
|
-
try {
|
|
37
|
-
localStorage.setItem(STORAGE_KEY, next ? "1" : "0");
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
// ignore
|
|
41
|
-
}
|
|
42
|
-
return next;
|
|
43
|
-
});
|
|
28
|
+
visibility.set(!visibility.get());
|
|
44
29
|
}
|
|
45
30
|
}
|
|
46
31
|
};
|
|
47
32
|
window.addEventListener("keydown", handler);
|
|
48
33
|
return () => window.removeEventListener("keydown", handler);
|
|
49
|
-
}, []);
|
|
34
|
+
}, [visibility]);
|
|
50
35
|
const { viewport, shapes: shapeMap, selection } = ctx;
|
|
51
36
|
const activeToolId = store.getActiveToolId();
|
|
37
|
+
// Subscribe to sync status so the Shapes panel can highlight unconfirmed
|
|
38
|
+
// shape IDs. Snapshot is undefined when no sync layer is loaded. Stable
|
|
39
|
+
// callbacks avoid resubscribe churn during unrelated re-renders (HUD
|
|
40
|
+
// re-renders frequently due to FPS / pointer / event log updates).
|
|
41
|
+
const subscribeSync = useCallback((cb) => syncStatus?.subscribe(cb) ?? (() => { }), [syncStatus]);
|
|
42
|
+
const getSyncSnapshot = useCallback(() => syncStatus?.getSnapshot(), [syncStatus]);
|
|
43
|
+
const syncSnapshot = useSyncExternalStore(subscribeSync, getSyncSnapshot, getSyncSnapshot);
|
|
44
|
+
const unconfirmedShapeIdSet = useMemo(() => new Set(syncSnapshot?.unconfirmedShapeIds ?? []), [syncSnapshot?.unconfirmedShapeIds]);
|
|
52
45
|
const hoveredShape = hoveredShapeId ? shapeMap.get(hoveredShapeId) : undefined;
|
|
53
46
|
// Shortcut hint — bottom-center (always visible)
|
|
54
47
|
const hint = (_jsxs("div", { style: {
|
|
@@ -64,6 +57,6 @@ export function DebugHud({ store, fpsCounter, eventLogger, pointerTracker, comma
|
|
|
64
57
|
if (!visible) {
|
|
65
58
|
return hint;
|
|
66
59
|
}
|
|
67
|
-
return (_jsxs(_Fragment, { children: [hint, _jsx(ShapeBoundsOverlay, { shape: hoveredShape, store: store }), _jsx(GeneralPanel, { store: store, fpsCounter: fpsCounter, pointerTracker: pointerTracker, commands: commands, tools: tools, layers: layers, shapes: shapes, syncStatus: syncStatus, events: events, viewport: viewport, activeToolId: activeToolId }), _jsx(ShapesPanel, { store: store, commands: commands, shapes: shapeMap, selection: selection, onHoverShape: setHoveredShapeId }), _jsx(EventsPanel, { eventLogger: eventLogger }), _jsx(Minimap, { shapes: shapeMap, viewport: viewport, selection: selection })] }));
|
|
60
|
+
return (_jsxs(_Fragment, { children: [hint, _jsx(ShapeBoundsOverlay, { shape: hoveredShape, store: store }), _jsx(GeneralPanel, { store: store, fpsCounter: fpsCounter, pointerTracker: pointerTracker, commands: commands, tools: tools, layers: layers, shapes: shapes, syncStatus: syncStatus, events: events, viewport: viewport, activeToolId: activeToolId }), _jsx(ShapesPanel, { store: store, commands: commands, shapes: shapeMap, selection: selection, registry: shapes, onHoverShape: setHoveredShapeId, unconfirmedShapeIds: unconfirmedShapeIdSet }), _jsx(EventsPanel, { eventLogger: eventLogger }), _jsx(Minimap, { shapes: shapeMap, viewport: viewport, selection: selection })] }));
|
|
68
61
|
}
|
|
69
62
|
//# sourceMappingURL=debug-hud.js.map
|
package/dist/debug-hud.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug-hud.js","sourceRoot":"","sources":["../src/debug-hud.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"debug-hud.js","sourceRoot":"","sources":["../src/debug-hud.tsx"],"names":[],"mappings":"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"}
|
package/dist/event-logger.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export declare class EventLogger {
|
|
|
7
7
|
private entries;
|
|
8
8
|
private listeners;
|
|
9
9
|
private snapshotCache;
|
|
10
|
+
private rafId;
|
|
11
|
+
private dirty;
|
|
10
12
|
push(entry: {
|
|
11
13
|
event: string;
|
|
12
14
|
timestamp: number;
|
|
@@ -14,5 +16,7 @@ export declare class EventLogger {
|
|
|
14
16
|
clear(): void;
|
|
15
17
|
subscribe(listener: () => void): () => void;
|
|
16
18
|
getSnapshot(): readonly EventLogEntry[];
|
|
19
|
+
dispose(): void;
|
|
20
|
+
private scheduleFlush;
|
|
17
21
|
}
|
|
18
22
|
//# sourceMappingURL=event-logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-logger.d.ts","sourceRoot":"","sources":["../src/event-logger.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACd;AAID,qBAAa,WAAW;IACvB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,aAAa,CAAgC;
|
|
1
|
+
{"version":3,"file":"event-logger.d.ts","sourceRoot":"","sources":["../src/event-logger.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACd;AAID,qBAAa,WAAW;IACvB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,KAAK,CAAS;IAEtB,IAAI,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAiBvD,KAAK,IAAI,IAAI;IAWb,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAgB3C,WAAW,IAAI,SAAS,aAAa,EAAE;IAIvC,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,aAAa;CAYrB"}
|
package/dist/event-logger.js
CHANGED
|
@@ -3,6 +3,8 @@ export class EventLogger {
|
|
|
3
3
|
entries = [];
|
|
4
4
|
listeners = new Set();
|
|
5
5
|
snapshotCache = [];
|
|
6
|
+
rafId = null;
|
|
7
|
+
dirty = false;
|
|
6
8
|
push(entry) {
|
|
7
9
|
const last = this.entries[this.entries.length - 1];
|
|
8
10
|
if (last && last.event === entry.event) {
|
|
@@ -15,24 +17,61 @@ export class EventLogger {
|
|
|
15
17
|
this.entries.shift();
|
|
16
18
|
}
|
|
17
19
|
}
|
|
18
|
-
this.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
this.dirty = true;
|
|
21
|
+
// Avoid scheduling rAF when no one is listening — keeps drag/idle paths cheap.
|
|
22
|
+
if (this.listeners.size === 0)
|
|
23
|
+
return;
|
|
24
|
+
this.scheduleFlush();
|
|
22
25
|
}
|
|
23
26
|
clear() {
|
|
24
27
|
this.entries = [];
|
|
25
|
-
this.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
this.dirty = true;
|
|
29
|
+
if (this.listeners.size === 0) {
|
|
30
|
+
this.snapshotCache = [];
|
|
31
|
+
this.dirty = false;
|
|
32
|
+
return;
|
|
28
33
|
}
|
|
34
|
+
this.scheduleFlush();
|
|
29
35
|
}
|
|
30
36
|
subscribe(listener) {
|
|
37
|
+
// If entries accumulated while no one was listening, surface them to the
|
|
38
|
+
// new subscriber on the next frame instead of waiting for another push.
|
|
39
|
+
if (this.dirty && this.listeners.size === 0) {
|
|
40
|
+
this.scheduleFlush();
|
|
41
|
+
}
|
|
31
42
|
this.listeners.add(listener);
|
|
32
|
-
return () =>
|
|
43
|
+
return () => {
|
|
44
|
+
this.listeners.delete(listener);
|
|
45
|
+
if (this.listeners.size === 0 && this.rafId !== null) {
|
|
46
|
+
cancelAnimationFrame(this.rafId);
|
|
47
|
+
this.rafId = null;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
33
50
|
}
|
|
34
51
|
getSnapshot() {
|
|
35
52
|
return this.snapshotCache;
|
|
36
53
|
}
|
|
54
|
+
dispose() {
|
|
55
|
+
if (this.rafId !== null) {
|
|
56
|
+
cancelAnimationFrame(this.rafId);
|
|
57
|
+
this.rafId = null;
|
|
58
|
+
}
|
|
59
|
+
this.listeners.clear();
|
|
60
|
+
this.dirty = false;
|
|
61
|
+
}
|
|
62
|
+
scheduleFlush() {
|
|
63
|
+
if (this.rafId !== null)
|
|
64
|
+
return;
|
|
65
|
+
this.rafId = requestAnimationFrame(() => {
|
|
66
|
+
this.rafId = null;
|
|
67
|
+
if (!this.dirty)
|
|
68
|
+
return;
|
|
69
|
+
this.dirty = false;
|
|
70
|
+
this.snapshotCache = [...this.entries];
|
|
71
|
+
for (const listener of this.listeners) {
|
|
72
|
+
listener();
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
37
76
|
}
|
|
38
77
|
//# sourceMappingURL=event-logger.js.map
|
package/dist/event-logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-logger.js","sourceRoot":"","sources":["../src/event-logger.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,OAAO,WAAW;IACf,OAAO,GAAoB,EAAE,CAAC;IAC9B,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IAClC,aAAa,GAA6B,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"event-logger.js","sourceRoot":"","sources":["../src/event-logger.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { createDebugHudPlugin } from "./plugin.js";
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { createDebugHudPlugin } from "./plugin.js";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"general-panel.d.ts","sourceRoot":"","sources":["../../src/panels/general-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,UAAU,EACV,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAW5D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"general-panel.d.ts","sourceRoot":"","sources":["../../src/panels/general-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,UAAU,EACV,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAW5D,OAAO,KAAK,EAAsB,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAQzF,UAAU,iBAAiB;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACrB;AAmCD,wBAAgB,YAAY,CAAC,EAC5B,KAAK,EACL,UAAU,EACV,cAAc,EACd,QAAQ,EACR,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,MAAM,EACN,QAAQ,EACR,YAAY,GACZ,EAAE,iBAAiB,2CAkOnB"}
|
|
@@ -6,18 +6,24 @@ const DEFAULT_SYNC_SNAPSHOT = {
|
|
|
6
6
|
state: "loading",
|
|
7
7
|
shapeCount: 0,
|
|
8
8
|
lastSyncedAt: null,
|
|
9
|
+
firstServerSyncAt: null,
|
|
9
10
|
error: null,
|
|
11
|
+
unconfirmedShapeIds: [],
|
|
10
12
|
};
|
|
11
13
|
const SYNC_STATE_COLORS = {
|
|
12
14
|
loading: "#fbbf24",
|
|
15
|
+
connecting: "#fbbf24",
|
|
13
16
|
synced: "#4ade80",
|
|
14
17
|
syncing: "#60a5fa",
|
|
18
|
+
disconnected: "#9ca3af",
|
|
15
19
|
error: "#f87171",
|
|
16
20
|
};
|
|
17
21
|
const SYNC_STATE_LABELS = {
|
|
18
22
|
loading: "Loading…",
|
|
23
|
+
connecting: "Connecting…",
|
|
19
24
|
synced: "Synced",
|
|
20
25
|
syncing: "Syncing…",
|
|
26
|
+
disconnected: "Disconnected",
|
|
21
27
|
error: "Error",
|
|
22
28
|
};
|
|
23
29
|
function formatTimestamp(ts) {
|
|
@@ -70,6 +76,16 @@ export function GeneralPanel({ store, fpsCounter, pointerTracker, commands, tool
|
|
|
70
76
|
height: 7,
|
|
71
77
|
borderRadius: "50%",
|
|
72
78
|
background: SYNC_STATE_COLORS[syncSnapshot.state] ?? "#888",
|
|
73
|
-
} }), _jsx("span", { style: { color: SYNC_STATE_COLORS[syncSnapshot.state] ?? "#888" }, children: SYNC_STATE_LABELS[syncSnapshot.state] ?? syncSnapshot.state })] }), _jsxs("div", { children: ["Shapes: ", syncSnapshot.shapeCount, " \u00B7 Last: ", formatTimestamp(syncSnapshot.lastSyncedAt)] }), syncSnapshot.
|
|
79
|
+
} }), _jsx("span", { style: { color: SYNC_STATE_COLORS[syncSnapshot.state] ?? "#888" }, children: SYNC_STATE_LABELS[syncSnapshot.state] ?? syncSnapshot.state })] }), _jsxs("div", { children: ["Shapes: ", syncSnapshot.shapeCount, " \u00B7 Last: ", formatTimestamp(syncSnapshot.lastSyncedAt)] }), syncSnapshot.firstServerSyncAt != null &&
|
|
80
|
+
syncSnapshot.unconfirmedShapeIds &&
|
|
81
|
+
syncSnapshot.unconfirmedShapeIds.length > 0 && (_jsxs("div", { style: {
|
|
82
|
+
marginTop: 4,
|
|
83
|
+
padding: "3px 6px",
|
|
84
|
+
borderRadius: 3,
|
|
85
|
+
background: "#7f1d1d",
|
|
86
|
+
color: "#fecaca",
|
|
87
|
+
fontSize: 10,
|
|
88
|
+
fontWeight: 600,
|
|
89
|
+
}, title: "\u30B5\u30FC\u30D0\u306E Y.Doc \u306B\u5B58\u5728\u3057\u306A\u3044 Shape \u304C IndexedDB \u306B\u6B8B\u3063\u3066\u3044\u307E\u3059", children: ["\u26A0 \u30B5\u30FC\u30D0\u672A\u540C\u671F Shape: ", syncSnapshot.unconfirmedShapeIds.length, " \u4EF6"] })), syncSnapshot.error && (_jsx("div", { style: { color: "#f87171", fontSize: 10 }, children: syncSnapshot.error }))] }), _jsxs("div", { style: SECTION_STYLE, children: [_jsx("div", { style: LABEL_STYLE, children: "System" }), _jsxs("div", { children: ["Tools: ", toolCount, " \u00B7 Layers: ", layerCount, " \u00B7 Shape types: ", shapeTypeCount] })] }), _jsxs("div", { children: [_jsx("div", { style: LABEL_STYLE, children: "GPU Renderer" }), gpuStats ? (_jsxs("div", { children: [_jsx("div", { style: { color: "#4ade80" }, children: "Active" }), _jsxs("div", { children: ["GPU: ", gpuStats.gpuShapeCount, " (SDF: ", gpuStats.sdfCount, ", Lines:", " ", gpuStats.polylineCount, ")"] })] })) : (_jsx("div", { style: { color: "#888" }, children: "Inactive (DOM only)" }))] })] }));
|
|
74
90
|
}
|
|
75
91
|
//# sourceMappingURL=general-panel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"general-panel.js","sourceRoot":"","sources":["../../src/panels/general-panel.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAGtD,OAAO,EACN,GAAG,EACH,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,aAAa,GACb,MAAM,cAAc,CAAC;AAuBtB,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"general-panel.js","sourceRoot":"","sources":["../../src/panels/general-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import type { BoardStore, CommandRegistry, ShapeData } from "@edv4h/usketch-shared";
|
|
1
|
+
import type { BoardStore, CommandRegistry, ShapeData, ShapeRegistry } from "@edv4h/usketch-shared";
|
|
2
2
|
interface ShapesPanelProps {
|
|
3
3
|
store: BoardStore;
|
|
4
4
|
commands: CommandRegistry;
|
|
5
5
|
shapes: ReadonlyMap<string, ShapeData>;
|
|
6
6
|
selection: ReadonlySet<string>;
|
|
7
|
+
registry: ShapeRegistry;
|
|
7
8
|
onHoverShape: (id: string | null) => void;
|
|
9
|
+
/** Shapes that exist locally but the server hasn't acknowledged. Empty if the
|
|
10
|
+
* sync layer doesn't track divergence. */
|
|
11
|
+
unconfirmedShapeIds?: ReadonlySet<string>;
|
|
8
12
|
}
|
|
9
|
-
export declare function ShapesPanel({ store, commands, shapes, selection, onHoverShape, }: ShapesPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare function ShapesPanel({ store, commands, shapes, selection, registry, onHoverShape, unconfirmedShapeIds, }: ShapesPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
10
14
|
export {};
|
|
11
15
|
//# sourceMappingURL=shapes-panel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shapes-panel.d.ts","sourceRoot":"","sources":["../../src/panels/shapes-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"shapes-panel.d.ts","sourceRoot":"","sources":["../../src/panels/shapes-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAenG,UAAU,gBAAgB;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C;8CAC0C;IAC1C,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC1C;AA+DD,wBAAgB,WAAW,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,mBAAmB,GACnB,EAAE,gBAAgB,2CAqJlB"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useRef, useState } from "react";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
3
|
import { ACCENT_DIM, fmt, INLINE_INPUT, LABEL_STYLE, MINI_BUTTON, MINI_BUTTON_ACCENT, PANEL_BASE, SCROLLABLE_STYLE, shortId, TEXT_MUTED, } from "../styles.js";
|
|
4
|
+
// Keys rendered explicitly in the always-on portion of the panel. Anything
|
|
5
|
+
// not in this set (and not an `x-*` extension key) falls into the "custom"
|
|
6
|
+
// section so plugin-intrinsic and core-managed fields stay visible.
|
|
4
7
|
const KNOWN_KEYS = new Set(["id", "type", "x", "y", "width", "height", "style", "rotation"]);
|
|
5
8
|
function EditableField({ label, value, onCommit, }) {
|
|
6
9
|
const [editing, setEditing] = useState(false);
|
|
@@ -35,9 +38,20 @@ function EditableField({ label, value, onCommit, }) {
|
|
|
35
38
|
// biome-ignore lint/a11y/noStaticElementInteractions: debug tool
|
|
36
39
|
_jsxs("span", { onClick: start, style: { cursor: "text" }, title: "Click to edit", children: [label, ": ", fmt(value)] }));
|
|
37
40
|
}
|
|
38
|
-
export function ShapesPanel({ store, commands, shapes, selection, onHoverShape, }) {
|
|
41
|
+
export function ShapesPanel({ store, commands, shapes, selection, registry, onHoverShape, unconfirmedShapeIds, }) {
|
|
39
42
|
const [expandedId, setExpandedId] = useState(null);
|
|
40
|
-
const
|
|
43
|
+
const [filterUnconfirmed, setFilterUnconfirmed] = useState(false);
|
|
44
|
+
const unconfirmedCount = unconfirmedShapeIds?.size ?? 0;
|
|
45
|
+
// If divergence resolves while the filter is on, the toggle button
|
|
46
|
+
// disappears (its render is gated on `unconfirmedCount > 0`) — leaving
|
|
47
|
+
// the user stuck with an empty list. Auto-clear the filter so the full
|
|
48
|
+
// shape list returns.
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
if (unconfirmedCount === 0 && filterUnconfirmed) {
|
|
51
|
+
setFilterUnconfirmed(false);
|
|
52
|
+
}
|
|
53
|
+
}, [unconfirmedCount, filterUnconfirmed]);
|
|
54
|
+
const shapeEntries = Array.from(shapes.values()).filter((s) => filterUnconfirmed ? unconfirmedShapeIds?.has(s.id) : true);
|
|
41
55
|
const updateField = (id, field, value) => {
|
|
42
56
|
const shape = store.getShape(id);
|
|
43
57
|
if (!shape)
|
|
@@ -67,9 +81,21 @@ export function ShapesPanel({ store, commands, shapes, selection, onHoverShape,
|
|
|
67
81
|
height: 300,
|
|
68
82
|
display: "flex",
|
|
69
83
|
flexDirection: "column",
|
|
70
|
-
}, children: [_jsxs("div", { style:
|
|
84
|
+
}, children: [_jsxs("div", { style: {
|
|
85
|
+
...LABEL_STYLE,
|
|
86
|
+
display: "flex",
|
|
87
|
+
alignItems: "center",
|
|
88
|
+
justifyContent: "space-between",
|
|
89
|
+
gap: 6,
|
|
90
|
+
}, children: [_jsxs("span", { children: ["Shapes (", shapes.size, ")"] }), unconfirmedCount > 0 && (_jsxs("button", { type: "button", onClick: () => setFilterUnconfirmed((v) => !v), style: {
|
|
91
|
+
...MINI_BUTTON,
|
|
92
|
+
background: filterUnconfirmed ? "#7f1d1d" : "transparent",
|
|
93
|
+
color: filterUnconfirmed ? "#fecaca" : "#f87171",
|
|
94
|
+
border: "1px solid #7f1d1d",
|
|
95
|
+
}, title: "\u30B5\u30FC\u30D0\u672A\u540C\u671F Shape \u306E\u307F\u3092\u8868\u793A", children: ["\u26A0 ", unconfirmedCount] }))] }), _jsx("div", { style: { ...SCROLLABLE_STYLE, flexGrow: 1, maxHeight: "none" }, children: shapeEntries.length === 0 ? (_jsx("div", { style: { color: TEXT_MUTED }, children: "No shapes" })) : (shapeEntries.map((s) => {
|
|
71
96
|
const isSelected = selection.has(s.id);
|
|
72
97
|
const isExpanded = expandedId === s.id;
|
|
98
|
+
const isUnconfirmed = unconfirmedShapeIds?.has(s.id) ?? false;
|
|
73
99
|
return (
|
|
74
100
|
// biome-ignore lint/a11y/noStaticElementInteractions: debug tool
|
|
75
101
|
_jsxs("div", { onMouseEnter: () => onHoverShape(s.id), onMouseLeave: () => onHoverShape(null), children: [_jsxs("div", { onClick: () => setExpandedId(isExpanded ? null : s.id), style: {
|
|
@@ -80,11 +106,25 @@ export function ShapesPanel({ store, commands, shapes, selection, onHoverShape,
|
|
|
80
106
|
display: "flex",
|
|
81
107
|
justifyContent: "space-between",
|
|
82
108
|
alignItems: "center",
|
|
83
|
-
}, children: [_jsxs("span", { children: [isExpanded ? "▾" : "▸", " ", shortId(s.id), " ", _jsx("span", { style: { color: TEXT_MUTED }, children: s.type })
|
|
109
|
+
}, children: [_jsxs("span", { children: [isExpanded ? "▾" : "▸", " ", shortId(s.id), " ", _jsx("span", { style: { color: TEXT_MUTED }, children: s.type }), isUnconfirmed && (_jsx("span", { style: {
|
|
110
|
+
marginLeft: 4,
|
|
111
|
+
padding: "0 4px",
|
|
112
|
+
borderRadius: 2,
|
|
113
|
+
background: "#7f1d1d",
|
|
114
|
+
color: "#fecaca",
|
|
115
|
+
fontSize: 9,
|
|
116
|
+
fontWeight: 600,
|
|
117
|
+
}, title: "\u30B5\u30FC\u30D0\u306E Y.Doc \u306B\u5B58\u5728\u3057\u307E\u305B\u3093", children: "\u26A0 \u672A\u540C\u671F" }))] }), _jsxs("span", { style: { color: TEXT_MUTED, fontSize: 9 }, children: ["(", fmt(s.x), ", ", fmt(s.y), ")"] })] }), isExpanded && (_jsx(ShapeDetail, { shape: s, store: store, selection: selection, registry: registry, onUpdate: updateField, onDelete: deleteShape }))] }, s.id));
|
|
84
118
|
})) })] }));
|
|
85
119
|
}
|
|
86
|
-
function ShapeDetail({ shape, store, selection, onUpdate, onDelete, }) {
|
|
87
|
-
const
|
|
120
|
+
function ShapeDetail({ shape, store, selection, registry, onUpdate, onDelete, }) {
|
|
121
|
+
const def = registry.get(shape.type);
|
|
122
|
+
const customMap = def?.debugFields
|
|
123
|
+
? def.debugFields(shape)
|
|
124
|
+
: Object.fromEntries(Object.keys(shape)
|
|
125
|
+
.filter((k) => !KNOWN_KEYS.has(k) && !k.startsWith("x-"))
|
|
126
|
+
.map((k) => [k, shape[k]]));
|
|
127
|
+
const customKeys = Object.keys(customMap);
|
|
88
128
|
return (_jsxs("div", { style: {
|
|
89
129
|
padding: "4px 8px",
|
|
90
130
|
fontSize: 10,
|
|
@@ -96,6 +136,6 @@ function ShapeDetail({ shape, store, selection, onUpdate, onDelete, }) {
|
|
|
96
136
|
color: "#a0a0a0",
|
|
97
137
|
whiteSpace: "pre-wrap",
|
|
98
138
|
wordBreak: "break-all",
|
|
99
|
-
}, children: JSON.stringify(
|
|
139
|
+
}, children: JSON.stringify(customMap, null, 1) })] })), _jsxs("div", { style: { display: "flex", gap: 4, marginTop: 4 }, children: [!selection.has(shape.id) && (_jsx("button", { type: "button", style: MINI_BUTTON_ACCENT, onClick: () => store.setSelection([shape.id]), children: "Select" })), _jsx("button", { type: "button", style: { ...MINI_BUTTON, color: "#f87171" }, onClick: () => onDelete(shape.id), children: "Delete" })] })] }));
|
|
100
140
|
}
|
|
101
141
|
//# sourceMappingURL=shapes-panel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shapes-panel.js","sourceRoot":"","sources":["../../src/panels/shapes-panel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"shapes-panel.js","sourceRoot":"","sources":["../../src/panels/shapes-panel.tsx"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAqBzF,wBAAgB,oBAAoB,IAAI,aAAa,CAoEpD"}
|
package/dist/plugin.js
CHANGED
|
@@ -3,8 +3,10 @@ import { DebugHud } from "./debug-hud.js";
|
|
|
3
3
|
import { EventLogger } from "./event-logger.js";
|
|
4
4
|
import { FpsCounter } from "./fps-counter.js";
|
|
5
5
|
import { PointerTracker } from "./pointer-tracker.js";
|
|
6
|
+
import { createVisibilityStore } from "./visibility-store.js";
|
|
6
7
|
// Excluded from event log to avoid noise
|
|
7
8
|
const EXCLUDED_EVENTS = new Set(["canvas:pointermove"]);
|
|
9
|
+
const VISIBILITY_STORAGE_KEY = "usketch-debug-hud-visible";
|
|
8
10
|
function formatEventLabel(event, data) {
|
|
9
11
|
if (data == null || typeof data !== "object")
|
|
10
12
|
return event;
|
|
@@ -14,48 +16,49 @@ function formatEventLabel(event, data) {
|
|
|
14
16
|
}
|
|
15
17
|
return event;
|
|
16
18
|
}
|
|
17
|
-
export
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
};
|
|
19
|
+
export function createDebugHudPlugin() {
|
|
20
|
+
return {
|
|
21
|
+
id: "debug-hud",
|
|
22
|
+
name: "Debug HUD",
|
|
23
|
+
setup(ctx) {
|
|
24
|
+
const fpsCounter = new FpsCounter();
|
|
25
|
+
const eventLogger = new EventLogger();
|
|
26
|
+
const pointerTracker = new PointerTracker();
|
|
27
|
+
const visibility = createVisibilityStore(VISIBILITY_STORAGE_KEY);
|
|
28
|
+
// Start FPS counter
|
|
29
|
+
fpsCounter.start();
|
|
30
|
+
// Monkey-patch emit to capture events. Push is skipped while the HUD is hidden
|
|
31
|
+
// so the drag path stays free of EventLogger work when no UI is observing it.
|
|
32
|
+
const originalEmit = ctx.events.emit.bind(ctx.events);
|
|
33
|
+
ctx.events.emit = (event, data) => {
|
|
34
|
+
if (visibility.get() && !EXCLUDED_EVENTS.has(event)) {
|
|
35
|
+
const label = formatEventLabel(event, data);
|
|
36
|
+
eventLogger.push({ event: label, timestamp: Date.now() });
|
|
37
|
+
}
|
|
38
|
+
originalEmit(event, data);
|
|
39
|
+
};
|
|
40
|
+
// Track pointer coordinates
|
|
41
|
+
const unsubPointer = ctx.events.on("canvas:pointermove", (data) => {
|
|
42
|
+
pointerTracker.update(data.worldPoint, data.screenPoint);
|
|
43
|
+
});
|
|
44
|
+
// Pick up sync status tracker from window (set by app.tsx)
|
|
45
|
+
const syncStatus = globalThis.__usketchSyncStatus;
|
|
46
|
+
// Register the fixed layer — always renders, visibility toggled inside component
|
|
47
|
+
ctx.layers.register({
|
|
48
|
+
id: "debug-hud",
|
|
49
|
+
order: 9999,
|
|
50
|
+
fixed: true,
|
|
51
|
+
render: (renderCtx) => (_jsx(DebugHud, { store: ctx.store, fpsCounter: fpsCounter, eventLogger: eventLogger, pointerTracker: pointerTracker, commands: ctx.commands, tools: ctx.tools, layers: ctx.layers, shapes: ctx.shapes, syncStatus: syncStatus, events: ctx.events, ctx: renderCtx, visibility: visibility })),
|
|
52
|
+
});
|
|
53
|
+
return () => {
|
|
54
|
+
fpsCounter.stop();
|
|
55
|
+
pointerTracker.dispose();
|
|
56
|
+
eventLogger.dispose();
|
|
57
|
+
ctx.events.emit = originalEmit;
|
|
58
|
+
unsubPointer();
|
|
59
|
+
ctx.layers.unregister("debug-hud");
|
|
60
|
+
};
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
61
64
|
//# sourceMappingURL=plugin.js.map
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,yCAAyC;AACzC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAExD,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAE3D,SAAS,gBAAgB,CAAC,KAAa,EAAE,IAAa;IACrD,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3D,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,IAAI,IAAI,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC/C,OAAO,GAAG,KAAK,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB;IACnC,OAAO;QACN,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,WAAW;QAEjB,KAAK,CAAC,GAAG;YACR,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;YACtC,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;YAC5C,MAAM,UAAU,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,CAAC;YAEjE,oBAAoB;YACpB,UAAU,CAAC,KAAK,EAAE,CAAC;YAEnB,+EAA+E;YAC/E,8EAA8E;YAC9E,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrD,GAAG,CAAC,MAAqC,CAAC,IAAI,GAAG,CAAc,KAAa,EAAE,IAAO,EAAE,EAAE;gBACzF,IAAI,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrD,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC5C,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC3D,CAAC;gBACD,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC3B,CAAC,CAAC;YAEF,4BAA4B;YAC5B,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAqB,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE;gBACrF,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC;YAEH,2DAA2D;YAC3D,MAAM,UAAU,GAAI,UAAsC,CAAC,mBAE/C,CAAC;YAEb,iFAAiF;YACjF,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACnB,EAAE,EAAE,WAAW;gBACf,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CACtB,KAAC,QAAQ,IACR,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,GAAG,CAAC,QAAQ,EACtB,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,GAAG,EAAE,SAAS,EACd,UAAU,EAAE,UAAU,GACrB,CACF;aACD,CAAC,CAAC;YAEH,OAAO,GAAG,EAAE;gBACX,UAAU,CAAC,IAAI,EAAE,CAAC;gBAClB,cAAc,CAAC,OAAO,EAAE,CAAC;gBACzB,WAAW,CAAC,OAAO,EAAE,CAAC;gBACrB,GAAG,CAAC,MAAqC,CAAC,IAAI,GAAG,YAAY,CAAC;gBAC/D,YAAY,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACpC,CAAC,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC"}
|
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Structural types matching SyncStatusTracker from @edv4h/usketch-store
|
|
3
|
-
* Defined locally to avoid
|
|
2
|
+
* Structural types matching SyncStatusTracker from @edv4h/usketch-store
|
|
3
|
+
* and @edv4h/usketch-plugin-sync-ywebsocket. Defined locally to avoid taking
|
|
4
|
+
* a runtime dependency on either package.
|
|
5
|
+
*
|
|
6
|
+
* `unconfirmedShapeIds` is contributed by the ywebsocket tracker only —
|
|
7
|
+
* IndexedDB-only trackers leave it empty.
|
|
4
8
|
*/
|
|
5
|
-
export type SyncState = "loading" | "synced" | "syncing" | "error";
|
|
9
|
+
export type SyncState = "loading" | "connecting" | "synced" | "syncing" | "disconnected" | "error";
|
|
6
10
|
export interface SyncStatusSnapshot {
|
|
7
11
|
state: SyncState;
|
|
8
12
|
shapeCount: number;
|
|
9
13
|
lastSyncedAt: number | null;
|
|
14
|
+
/**
|
|
15
|
+
* Timestamp of the first successful server sync, or null if the client
|
|
16
|
+
* has not yet heard back from the server. Use this (not `lastSyncedAt`,
|
|
17
|
+
* which also moves on local edits) to gate divergence UI.
|
|
18
|
+
*/
|
|
19
|
+
firstServerSyncAt?: number | null;
|
|
10
20
|
error: string | null;
|
|
21
|
+
unconfirmedShapeIds?: readonly string[];
|
|
11
22
|
}
|
|
12
23
|
export interface SyncStatusTrackerLike {
|
|
13
24
|
getSnapshot(): SyncStatusSnapshot;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-status-types.d.ts","sourceRoot":"","sources":["../src/sync-status-types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sync-status-types.d.ts","sourceRoot":"","sources":["../src/sync-status-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,OAAO,CAAC;AAEnG,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,qBAAqB;IACrC,WAAW,IAAI,kBAAkB,CAAC;IAClC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC5C"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Structural types matching SyncStatusTracker from @edv4h/usketch-store
|
|
3
|
-
* Defined locally to avoid
|
|
2
|
+
* Structural types matching SyncStatusTracker from @edv4h/usketch-store
|
|
3
|
+
* and @edv4h/usketch-plugin-sync-ywebsocket. Defined locally to avoid taking
|
|
4
|
+
* a runtime dependency on either package.
|
|
5
|
+
*
|
|
6
|
+
* `unconfirmedShapeIds` is contributed by the ywebsocket tracker only —
|
|
7
|
+
* IndexedDB-only trackers leave it empty.
|
|
4
8
|
*/
|
|
5
9
|
export {};
|
|
6
10
|
//# sourceMappingURL=sync-status-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-status-types.js","sourceRoot":"","sources":["../src/sync-status-types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sync-status-types.js","sourceRoot":"","sources":["../src/sync-status-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibility-store.d.ts","sourceRoot":"","sources":["../src/visibility-store.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC/B,GAAG,IAAI,OAAO,CAAC;IACf,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC5C;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CA6BzE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export function createVisibilityStore(storageKey) {
|
|
2
|
+
let value = (() => {
|
|
3
|
+
try {
|
|
4
|
+
return localStorage.getItem(storageKey) === "1";
|
|
5
|
+
}
|
|
6
|
+
catch {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
})();
|
|
10
|
+
const listeners = new Set();
|
|
11
|
+
return {
|
|
12
|
+
get: () => value,
|
|
13
|
+
set: (next) => {
|
|
14
|
+
if (value === next)
|
|
15
|
+
return;
|
|
16
|
+
value = next;
|
|
17
|
+
try {
|
|
18
|
+
localStorage.setItem(storageKey, next ? "1" : "0");
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// localStorage unavailable (private mode, SSR) — silently keep in-memory state.
|
|
22
|
+
}
|
|
23
|
+
for (const listener of listeners)
|
|
24
|
+
listener();
|
|
25
|
+
},
|
|
26
|
+
subscribe: (listener) => {
|
|
27
|
+
listeners.add(listener);
|
|
28
|
+
return () => {
|
|
29
|
+
listeners.delete(listener);
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=visibility-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibility-store.js","sourceRoot":"","sources":["../src/visibility-store.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,qBAAqB,CAAC,UAAkB;IACvD,IAAI,KAAK,GAAG,CAAC,GAAG,EAAE;QACjB,IAAI,CAAC;YACJ,OAAO,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC,CAAC,EAAE,CAAC;IACL,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IAExC,OAAO;QACN,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK;QAChB,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;YACb,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO;YAC3B,KAAK,GAAG,IAAI,CAAC;YACb,IAAI,CAAC;gBACJ,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACpD,CAAC;YAAC,MAAM,CAAC;gBACR,gFAAgF;YACjF,CAAC;YACD,KAAK,MAAM,QAAQ,IAAI,SAAS;gBAAE,QAAQ,EAAE,CAAC;QAC9C,CAAC;QACD,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE;YACvB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE;gBACX,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC,CAAC;QACH,CAAC;KACD,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@edv4h/usketch-plugin-debug-hud",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@edv4h/usketch-shared": "
|
|
15
|
+
"@edv4h/usketch-shared": "3.0.0"
|
|
16
16
|
},
|
|
17
17
|
"peerDependencies": {
|
|
18
18
|
"react": ">=19"
|