@edv4h/usketch-plugin-debug-hud 3.0.5 → 3.2.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/README.md +50 -0
- package/dist/board-meta-types.d.ts +19 -0
- package/dist/board-meta-types.d.ts.map +1 -0
- package/dist/board-meta-types.js +8 -0
- package/dist/board-meta-types.js.map +1 -0
- package/dist/debug-hud.d.ts +7 -2
- package/dist/debug-hud.d.ts.map +1 -1
- package/dist/debug-hud.js +28 -4
- package/dist/debug-hud.js.map +1 -1
- package/dist/event-logger.d.ts.map +1 -1
- package/dist/fps-counter.d.ts.map +1 -1
- package/dist/overlays/minimap.d.ts +5 -2
- package/dist/overlays/minimap.d.ts.map +1 -1
- package/dist/overlays/minimap.js +47 -25
- package/dist/overlays/minimap.js.map +1 -1
- package/dist/overlays/shape-bounds-overlay.js +1 -1
- package/dist/panels/controls-panel.d.ts +25 -0
- package/dist/panels/controls-panel.d.ts.map +1 -0
- package/dist/panels/controls-panel.js +268 -0
- package/dist/panels/controls-panel.js.map +1 -0
- package/dist/panels/events-panel.d.ts.map +1 -1
- package/dist/panels/events-panel.js +3 -2
- package/dist/panels/events-panel.js.map +1 -1
- package/dist/panels/general-panel.d.ts +3 -1
- package/dist/panels/general-panel.d.ts.map +1 -1
- package/dist/panels/general-panel.js +7 -4
- package/dist/panels/general-panel.js.map +1 -1
- package/dist/panels/members-panel.d.ts +10 -0
- package/dist/panels/members-panel.d.ts.map +1 -0
- package/dist/panels/members-panel.js +59 -0
- package/dist/panels/members-panel.js.map +1 -0
- package/dist/panels/shapes-panel.d.ts +5 -1
- package/dist/panels/shapes-panel.d.ts.map +1 -1
- package/dist/panels/shapes-panel.js +19 -20
- package/dist/panels/shapes-panel.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +5 -1
- package/dist/plugin.js.map +1 -1
- package/dist/pointer-tracker.d.ts.map +1 -1
- package/dist/presence-types.d.ts +23 -0
- package/dist/presence-types.d.ts.map +1 -0
- package/dist/presence-types.js +8 -0
- package/dist/presence-types.js.map +1 -0
- package/dist/stop-propagation.d.ts +27 -0
- package/dist/stop-propagation.d.ts.map +1 -0
- package/dist/stop-propagation.js +26 -0
- package/dist/stop-propagation.js.map +1 -0
- package/package.json +4 -4
package/README.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# @edv4h/usketch-plugin-debug-hud
|
|
2
|
+
|
|
3
|
+
A screen-fixed **control + debug panel**. Toggle with the backtick key (`` ` ``).
|
|
4
|
+
Beyond inspection (shapes, events, FPS, sync, minimap) it is a **universal
|
|
5
|
+
control surface**: every plugin operation can be driven from here, so a host app
|
|
6
|
+
does not need to add bespoke UI per plugin.
|
|
7
|
+
|
|
8
|
+
```ts
|
|
9
|
+
import { createDebugHudPlugin } from "@edv4h/usketch-plugin-debug-hud";
|
|
10
|
+
const plugins = [/* ... */, createDebugHudPlugin()];
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Hidden by default; press `` ` `` to open. Safe to ship in production (it only
|
|
14
|
+
appears on toggle).
|
|
15
|
+
|
|
16
|
+
## Controls panel
|
|
17
|
+
|
|
18
|
+
- **Tools** — one button per registered tool (`tools.getOrdered()`), click to
|
|
19
|
+
`store.setActiveToolId(id)`.
|
|
20
|
+
- **Actions** — every `PluginAction` a plugin registered (see below), grouped
|
|
21
|
+
and rendered as buttons / parameter forms automatically.
|
|
22
|
+
- **Emit event** — a raw fallback: type any event name + JSON payload and
|
|
23
|
+
`events.emit(...)`. Lets you drive operations a plugin hasn't (yet) exposed as
|
|
24
|
+
an action.
|
|
25
|
+
- **Default style / Clear canvas** — edit `store` default style; batch-delete.
|
|
26
|
+
|
|
27
|
+
## Exposing plugin operations to the HUD
|
|
28
|
+
|
|
29
|
+
Register actions in your plugin's `setup` via `ctx.actions` — the HUD renders a
|
|
30
|
+
control for each with no app-side UI. Example (freedraw):
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
const off = ctx.actions.register({
|
|
34
|
+
id: "freedraw:color",
|
|
35
|
+
label: "Color",
|
|
36
|
+
group: "Freedraw",
|
|
37
|
+
params: [{ name: "color", type: "color", default: "#1e1e1e" }],
|
|
38
|
+
run: ({ color }) => ctx.events.emit("freedraw:set-color", { color }),
|
|
39
|
+
});
|
|
40
|
+
// call off() in teardown
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
`PluginAction` fields: `id`, `label`, optional `group` / `icon` / `order`,
|
|
44
|
+
optional `params` (`ActionParam[]` — `string|number|boolean|color|enum`),
|
|
45
|
+
`run(args)`, and optional `isActive()` / `isEnabled()` for toggle / contextual
|
|
46
|
+
state. Parameterless actions render as a button; selection-contextual actions
|
|
47
|
+
(e.g. "Flip selected card") use `isEnabled()` to gate on the current selection.
|
|
48
|
+
|
|
49
|
+
Migrated so far: freedraw, snap, background, card, sticky. Others follow the
|
|
50
|
+
same one-liner pattern (emit the plugin's existing event from `run`).
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Board メタ情報(タイトル / Cloud か Local か / id)を HUD に供給するための
|
|
3
|
+
* 構造型。ホストアプリ(apps/web)が `globalThis.__usketchBoardMeta` に
|
|
4
|
+
* この形のトラッカーを載せ、General パネルが購読して表示する。
|
|
5
|
+
* `__usketchSyncStatus` と同じ「アプリ側が用意する外部データソース」パターン。
|
|
6
|
+
*/
|
|
7
|
+
export interface BoardMetaSnapshot {
|
|
8
|
+
/** ボード id(未確定なら undefined)。 */
|
|
9
|
+
id?: string;
|
|
10
|
+
/** 表示名(未取得なら null)。 */
|
|
11
|
+
name: string | null;
|
|
12
|
+
/** Cloud ボードなら true、ローカル保存なら false。 */
|
|
13
|
+
isCloud: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface BoardMetaTrackerLike {
|
|
16
|
+
getSnapshot(): BoardMetaSnapshot;
|
|
17
|
+
subscribe(listener: () => void): () => void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=board-meta-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-meta-types.d.ts","sourceRoot":"","sources":["../src/board-meta-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IACjC,+BAA+B;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACpC,WAAW,IAAI,iBAAiB,CAAC;IACjC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC5C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Board メタ情報(タイトル / Cloud か Local か / id)を HUD に供給するための
|
|
3
|
+
* 構造型。ホストアプリ(apps/web)が `globalThis.__usketchBoardMeta` に
|
|
4
|
+
* この形のトラッカーを載せ、General パネルが購読して表示する。
|
|
5
|
+
* `__usketchSyncStatus` と同じ「アプリ側が用意する外部データソース」パターン。
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=board-meta-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-meta-types.js","sourceRoot":"","sources":["../src/board-meta-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
package/dist/debug-hud.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import type { BoardStore, CommandRegistry, EventBus, LayerManager, LayerRenderContext, ShapeRegistry, ToolRegistry } from "@edv4h/usketch-shared";
|
|
1
|
+
import type { ActionRegistry, BoardStore, CommandRegistry, EventBus, LayerManager, LayerRenderContext, ShapeRegistry, ToolRegistry } from "@edv4h/usketch-shared";
|
|
2
|
+
import type { BoardMetaTrackerLike } from "./board-meta-types.js";
|
|
2
3
|
import type { EventLogger } from "./event-logger.js";
|
|
3
4
|
import type { FpsCounter } from "./fps-counter.js";
|
|
4
5
|
import type { PointerTracker } from "./pointer-tracker.js";
|
|
6
|
+
import type { PresenceTrackerLike } from "./presence-types.js";
|
|
5
7
|
import type { SyncStatusTrackerLike } from "./sync-status-types.js";
|
|
6
8
|
import type { VisibilityStore } from "./visibility-store.js";
|
|
7
9
|
interface DebugHudProps {
|
|
@@ -13,11 +15,14 @@ interface DebugHudProps {
|
|
|
13
15
|
tools: ToolRegistry;
|
|
14
16
|
layers: LayerManager;
|
|
15
17
|
shapes: ShapeRegistry;
|
|
18
|
+
actions: ActionRegistry;
|
|
16
19
|
syncStatus?: SyncStatusTrackerLike;
|
|
20
|
+
boardMeta?: BoardMetaTrackerLike;
|
|
21
|
+
presence?: PresenceTrackerLike;
|
|
17
22
|
events: EventBus;
|
|
18
23
|
ctx: LayerRenderContext;
|
|
19
24
|
visibility: VisibilityStore;
|
|
20
25
|
}
|
|
21
|
-
export declare function DebugHud({ store, fpsCounter, eventLogger, pointerTracker, commands, tools, layers, shapes, syncStatus, events, ctx, visibility, }: DebugHudProps): import("react").JSX.Element;
|
|
26
|
+
export declare function DebugHud({ store, fpsCounter, eventLogger, pointerTracker, commands, tools, layers, shapes, actions, syncStatus, boardMeta, presence, events, ctx, visibility, }: DebugHudProps): import("react").JSX.Element;
|
|
22
27
|
export {};
|
|
23
28
|
//# 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;
|
|
1
|
+
{"version":3,"file":"debug-hud.d.ts","sourceRoot":"","sources":["../src/debug-hud.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,cAAc,EACd,UAAU,EACV,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAYnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,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,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,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,OAAO,EACP,UAAU,EACV,SAAS,EACT,QAAQ,EACR,MAAM,EACN,GAAG,EACH,UAAU,GACV,EAAE,aAAa,+BAsJf"}
|
package/dist/debug-hud.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
2
|
-
import { useCallback, useEffect, useMemo, useState, useSyncExternalStore } from "react";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
3
3
|
import { Minimap } from "./overlays/minimap.js";
|
|
4
4
|
import { ShapeBoundsOverlay } from "./overlays/shape-bounds-overlay.js";
|
|
5
|
+
import { CONTROLS_DOCK_COLLAPSED, CONTROLS_DOCK_WIDTH, ControlsPanel, } from "./panels/controls-panel.js";
|
|
5
6
|
import { EventsPanel } from "./panels/events-panel.js";
|
|
6
7
|
import { GeneralPanel } from "./panels/general-panel.js";
|
|
8
|
+
import { MembersPanel } from "./panels/members-panel.js";
|
|
7
9
|
import { ShapesPanel } from "./panels/shapes-panel.js";
|
|
8
10
|
import { FONT_FAMILY, TEXT_MUTED } from "./styles.js";
|
|
9
11
|
function isEditableTarget(target) {
|
|
@@ -12,11 +14,14 @@ function isEditableTarget(target) {
|
|
|
12
14
|
const tag = target.tagName;
|
|
13
15
|
return tag === "INPUT" || tag === "TEXTAREA" || target.isContentEditable;
|
|
14
16
|
}
|
|
15
|
-
export function DebugHud({ store, fpsCounter, eventLogger, pointerTracker, commands, tools, layers, shapes, syncStatus, events, ctx, visibility, }) {
|
|
17
|
+
export function DebugHud({ store, fpsCounter, eventLogger, pointerTracker, commands, tools, layers, shapes, actions, syncStatus, boardMeta, presence, events, ctx, visibility, }) {
|
|
16
18
|
const subscribeVisibility = useCallback((cb) => visibility.subscribe(cb), [visibility]);
|
|
17
19
|
const getVisibility = useCallback(() => visibility.get(), [visibility]);
|
|
18
20
|
const visible = useSyncExternalStore(subscribeVisibility, getVisibility, getVisibility);
|
|
19
21
|
const [hoveredShapeId, setHoveredShapeId] = useState(null);
|
|
22
|
+
const [controlsCollapsed, setControlsCollapsed] = useState(false);
|
|
23
|
+
// Left offset for the Shapes panel / Minimap so they clear the Controls dock.
|
|
24
|
+
const leftOffset = 8 + (controlsCollapsed ? CONTROLS_DOCK_COLLAPSED : CONTROLS_DOCK_WIDTH) + 8;
|
|
20
25
|
// Keyboard shortcut (backtick)
|
|
21
26
|
useEffect(() => {
|
|
22
27
|
const handler = (e) => {
|
|
@@ -43,6 +48,25 @@ export function DebugHud({ store, fpsCounter, eventLogger, pointerTracker, comma
|
|
|
43
48
|
const syncSnapshot = useSyncExternalStore(subscribeSync, getSyncSnapshot, getSyncSnapshot);
|
|
44
49
|
const unconfirmedShapeIdSet = useMemo(() => new Set(syncSnapshot?.unconfirmedShapeIds ?? []), [syncSnapshot?.unconfirmedShapeIds]);
|
|
45
50
|
const hoveredShape = hoveredShapeId ? shapeMap.get(hoveredShapeId) : undefined;
|
|
51
|
+
// Canvas は自身のコンテナに native な wheel リスナ(passive:false)を張り、
|
|
52
|
+
// HUD パネル上のスクロールまで拾って zoom/pan してしまう。React の onWheel
|
|
53
|
+
// stopPropagation は Canvas コンテナより後(React root)で発火するため間に合わ
|
|
54
|
+
// ない。パネル群を包む本要素に native wheel リスナを張り、パネル由来の wheel
|
|
55
|
+
// が Canvas コンテナへバブリングする前に止める(パネル自身のスクロールは通す
|
|
56
|
+
// ので stopPropagation のみ、preventDefault はしない)。空き領域の wheel は
|
|
57
|
+
// pointerEvents:none によりこの要素を経由せず Canvas に直接届くため無影響。
|
|
58
|
+
const wheelGuardRef = useRef(null);
|
|
59
|
+
// visible はラッパーのマウント/アンマウントを切り替えるため、ref 再取得の
|
|
60
|
+
// トリガーとして依存に含める(body 内で直接参照しないので biome へ明示)。
|
|
61
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: re-attach on visibility toggle
|
|
62
|
+
useEffect(() => {
|
|
63
|
+
const el = wheelGuardRef.current;
|
|
64
|
+
if (!el)
|
|
65
|
+
return;
|
|
66
|
+
const stop = (e) => e.stopPropagation();
|
|
67
|
+
el.addEventListener("wheel", stop, { passive: false });
|
|
68
|
+
return () => el.removeEventListener("wheel", stop);
|
|
69
|
+
}, [visible]);
|
|
46
70
|
// Shortcut hint — bottom-center (always visible)
|
|
47
71
|
const hint = (_jsxs("div", { style: {
|
|
48
72
|
position: "absolute",
|
|
@@ -57,6 +81,6 @@ export function DebugHud({ store, fpsCounter, eventLogger, pointerTracker, comma
|
|
|
57
81
|
if (!visible) {
|
|
58
82
|
return hint;
|
|
59
83
|
}
|
|
60
|
-
return (_jsxs(
|
|
84
|
+
return (_jsxs("div", { ref: wheelGuardRef, style: { position: "absolute", inset: 0, pointerEvents: "none" }, 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, boardMeta: boardMeta, events: events, viewport: viewport, activeToolId: activeToolId }), _jsx(MembersPanel, { presence: presence }), _jsx(ControlsPanel, { store: store, tools: tools, actions: actions, events: events, activeToolId: activeToolId, collapsed: controlsCollapsed, onToggleCollapsed: () => setControlsCollapsed((c) => !c), shapesSection: _jsx(ShapesPanel, { store: store, commands: commands, shapes: shapeMap, selection: selection, registry: shapes, onHoverShape: setHoveredShapeId, unconfirmedShapeIds: unconfirmedShapeIdSet, docked: true }) }), _jsx(EventsPanel, { eventLogger: eventLogger }), _jsx(Minimap, { store: store, shapes: shapeMap, viewport: viewport, selection: selection, offsetLeft: leftOffset })] }));
|
|
61
85
|
}
|
|
62
86
|
//# 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":";
|
|
1
|
+
{"version":3,"file":"debug-hud.js","sourceRoot":"","sources":["../src/debug-hud.tsx"],"names":[],"mappings":"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"}
|
|
@@ -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;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;
|
|
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,CAetD;IAED,KAAK,IAAI,IAAI,CASZ;IAED,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAc1C;IAED,WAAW,IAAI,SAAS,aAAa,EAAE,CAEtC;IAED,OAAO,IAAI,IAAI,CAOd;IAED,OAAO,CAAC,aAAa;CAYrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fps-counter.d.ts","sourceRoot":"","sources":["../src/fps-counter.ts"],"names":[],"mappings":"AAEA,qBAAa,UAAU;IACtB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,aAAa,CAAgB;IAErC,KAAK,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"fps-counter.d.ts","sourceRoot":"","sources":["../src/fps-counter.ts"],"names":[],"mappings":"AAEA,qBAAa,UAAU;IACtB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,aAAa,CAAgB;IAErC,KAAK,IAAI,IAAI,CAIZ;IAED,IAAI,IAAI,IAAI,CAEX;IAED,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAG1C;IAED,WAAW,IAAI,MAAM,CAEpB;IAED,UAAU,IAAI,SAAS,MAAM,EAAE,CAE9B;IAED,OAAO,CAAC,IAAI,CAiBV;CACF"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import type { ShapeData, Viewport } from "@edv4h/usketch-shared";
|
|
1
|
+
import type { BoardStore, ShapeData, Viewport } from "@edv4h/usketch-shared";
|
|
2
2
|
interface MinimapProps {
|
|
3
|
+
store: BoardStore;
|
|
3
4
|
shapes: ReadonlyMap<string, ShapeData>;
|
|
4
5
|
viewport: Viewport;
|
|
5
6
|
selection: ReadonlySet<string>;
|
|
7
|
+
/** Left offset so the minimap clears the Controls dock. Default 8. */
|
|
8
|
+
offsetLeft?: number;
|
|
6
9
|
}
|
|
7
|
-
export declare function Minimap({ shapes, viewport, selection }: MinimapProps): import("react").JSX.Element;
|
|
10
|
+
export declare function Minimap({ store, shapes, viewport, selection, offsetLeft }: MinimapProps): import("react").JSX.Element;
|
|
8
11
|
export {};
|
|
9
12
|
//# sourceMappingURL=minimap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minimap.d.ts","sourceRoot":"","sources":["../../src/overlays/minimap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"minimap.d.ts","sourceRoot":"","sources":["../../src/overlays/minimap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAY7E,UAAU,YAAY;IACrB,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAc,EAAE,EAAE,YAAY,+BA4H3F"}
|
package/dist/overlays/minimap.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { computeMinimap } from "@edv4h/usketch-shared";
|
|
3
|
-
import {
|
|
3
|
+
import { STOP_CANVAS_PROPAGATION } from "../stop-propagation.js";
|
|
4
|
+
import { ACCENT_DIM, MINI_BUTTON, PANEL_BG, PANEL_BLUR, PANEL_BORDER_RADIUS, TEXT_COLOR, } from "../styles.js";
|
|
4
5
|
const MAP_W = 140;
|
|
5
6
|
const MAP_H = 90;
|
|
6
|
-
export function Minimap({ shapes, viewport, selection }) {
|
|
7
|
+
export function Minimap({ store, shapes, viewport, selection, offsetLeft = 8 }) {
|
|
7
8
|
const shapeArr = Array.from(shapes.values());
|
|
8
9
|
// viewport.x/y is a screen-space translate offset, not a world origin.
|
|
9
10
|
const vpWorldX = -viewport.x / viewport.zoom;
|
|
@@ -18,36 +19,57 @@ export function Minimap({ shapes, viewport, selection }) {
|
|
|
18
19
|
padding: 20,
|
|
19
20
|
minSize: 2,
|
|
20
21
|
});
|
|
21
|
-
|
|
22
|
+
// Zoom about the screen center, matching the old TopBar zoom controls.
|
|
23
|
+
const zoomAt = (factor) => store.zoomTo(viewport.zoom * factor, {
|
|
24
|
+
x: window.innerWidth / 2,
|
|
25
|
+
y: window.innerHeight / 2,
|
|
26
|
+
});
|
|
27
|
+
const resetZoom = () => store.setViewport({ x: 0, y: 0, zoom: 1 });
|
|
28
|
+
return (_jsxs("div", { ...STOP_CANVAS_PROPAGATION, style: {
|
|
22
29
|
position: "absolute",
|
|
23
30
|
bottom: 8,
|
|
24
|
-
left:
|
|
31
|
+
left: offsetLeft,
|
|
25
32
|
width: MAP_W,
|
|
26
|
-
height: MAP_H,
|
|
27
33
|
background: PANEL_BG,
|
|
28
34
|
borderRadius: PANEL_BORDER_RADIUS,
|
|
29
35
|
backdropFilter: PANEL_BLUR,
|
|
30
36
|
pointerEvents: "auto",
|
|
31
37
|
overflow: "hidden",
|
|
32
|
-
}, children: [result.rects.map((r) => (_jsx("div", { style: {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
38
|
+
}, children: [_jsxs("div", { style: { position: "relative", width: MAP_W, height: MAP_H, overflow: "hidden" }, children: [result.rects.map((r) => (_jsx("div", { style: {
|
|
39
|
+
position: "absolute",
|
|
40
|
+
left: r.x,
|
|
41
|
+
top: r.y,
|
|
42
|
+
width: r.width,
|
|
43
|
+
height: r.height,
|
|
44
|
+
background: selection.has(r.id)
|
|
45
|
+
? "rgba(99, 102, 241, 0.8)"
|
|
46
|
+
: "rgba(255, 255, 255, 0.4)",
|
|
47
|
+
borderRadius: 1,
|
|
48
|
+
} }, r.id))), result.viewportRect && (_jsx("div", { style: {
|
|
49
|
+
position: "absolute",
|
|
50
|
+
left: result.viewportRect.x,
|
|
51
|
+
top: result.viewportRect.y,
|
|
52
|
+
width: result.viewportRect.width,
|
|
53
|
+
height: result.viewportRect.height,
|
|
54
|
+
border: `1px solid ${ACCENT_DIM}`,
|
|
55
|
+
borderRadius: 2,
|
|
56
|
+
boxSizing: "border-box",
|
|
57
|
+
} }))] }), _jsxs("div", { style: {
|
|
58
|
+
display: "flex",
|
|
59
|
+
alignItems: "center",
|
|
60
|
+
justifyContent: "space-between",
|
|
61
|
+
gap: 4,
|
|
62
|
+
padding: "4px 6px",
|
|
63
|
+
borderTop: "1px solid rgba(255,255,255,0.08)",
|
|
64
|
+
}, children: [_jsx("button", { type: "button", title: "\u30BA\u30FC\u30E0\u30A2\u30A6\u30C8", style: { ...MINI_BUTTON, minWidth: 24 }, onClick: () => zoomAt(0.8), children: "\u2212" }), _jsxs("button", { type: "button", title: "100% \u306B\u30EA\u30BB\u30C3\u30C8", onClick: resetZoom, style: {
|
|
65
|
+
flex: 1,
|
|
66
|
+
background: "transparent",
|
|
67
|
+
border: "none",
|
|
68
|
+
color: TEXT_COLOR,
|
|
69
|
+
cursor: "pointer",
|
|
70
|
+
fontFamily: "inherit",
|
|
71
|
+
fontSize: 11,
|
|
72
|
+
fontVariantNumeric: "tabular-nums",
|
|
73
|
+
}, children: [Math.round(viewport.zoom * 100), "%"] }), _jsx("button", { type: "button", title: "\u30BA\u30FC\u30E0\u30A4\u30F3", style: { ...MINI_BUTTON, minWidth: 24 }, onClick: () => zoomAt(1.25), children: "+" })] })] }));
|
|
52
74
|
}
|
|
53
75
|
//# sourceMappingURL=minimap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minimap.js","sourceRoot":"","sources":["../../src/overlays/minimap.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAsB,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"minimap.js","sourceRoot":"","sources":["../../src/overlays/minimap.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { worldToScreen } from "@edv4h/usketch-shared";
|
|
3
3
|
import { useCallback, useSyncExternalStore } from "react";
|
|
4
4
|
export function ShapeBoundsOverlay({ shape, store }) {
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ActionRegistry, BoardStore, EventBus, ToolRegistry } from "@edv4h/usketch-shared";
|
|
2
|
+
import type React from "react";
|
|
3
|
+
/** Expanded / collapsed dock widths (kept in sync with DebugHud's sibling offset). */
|
|
4
|
+
export declare const CONTROLS_DOCK_WIDTH = 248;
|
|
5
|
+
export declare const CONTROLS_DOCK_COLLAPSED = 30;
|
|
6
|
+
interface ControlsPanelProps {
|
|
7
|
+
store: BoardStore;
|
|
8
|
+
tools: ToolRegistry;
|
|
9
|
+
actions: ActionRegistry;
|
|
10
|
+
events: EventBus;
|
|
11
|
+
activeToolId: string;
|
|
12
|
+
collapsed: boolean;
|
|
13
|
+
onToggleCollapsed: () => void;
|
|
14
|
+
/** The shapes inspector, rendered as a section inside the dock. */
|
|
15
|
+
shapesSection?: React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Universal control dock. Drives plugin operations without any demo-app UI: a
|
|
19
|
+
* tool palette (`tools.getOrdered()`), the declarative action registry, a raw
|
|
20
|
+
* event-emit fallback, and default-style controls. Full-height, collapsible,
|
|
21
|
+
* with collapsible sections.
|
|
22
|
+
*/
|
|
23
|
+
export declare function ControlsPanel({ store, tools, actions, events, activeToolId, collapsed, onToggleCollapsed, shapesSection, }: ControlsPanelProps): React.JSX.Element;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=controls-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls-panel.d.ts","sourceRoot":"","sources":["../../src/panels/controls-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,cAAc,EACd,UAAU,EACV,QAAQ,EAGR,YAAY,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,sFAAsF;AACtF,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,UAAU,kBAAkB;IAC3B,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,QAAQ,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,mEAAmE;IACnE,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,OAAO,EACP,MAAM,EACN,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,aAAa,GACb,EAAE,kBAAkB,qBA8GpB"}
|