@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.
Files changed (48) hide show
  1. package/README.md +50 -0
  2. package/dist/board-meta-types.d.ts +19 -0
  3. package/dist/board-meta-types.d.ts.map +1 -0
  4. package/dist/board-meta-types.js +8 -0
  5. package/dist/board-meta-types.js.map +1 -0
  6. package/dist/debug-hud.d.ts +7 -2
  7. package/dist/debug-hud.d.ts.map +1 -1
  8. package/dist/debug-hud.js +28 -4
  9. package/dist/debug-hud.js.map +1 -1
  10. package/dist/event-logger.d.ts.map +1 -1
  11. package/dist/fps-counter.d.ts.map +1 -1
  12. package/dist/overlays/minimap.d.ts +5 -2
  13. package/dist/overlays/minimap.d.ts.map +1 -1
  14. package/dist/overlays/minimap.js +47 -25
  15. package/dist/overlays/minimap.js.map +1 -1
  16. package/dist/overlays/shape-bounds-overlay.js +1 -1
  17. package/dist/panels/controls-panel.d.ts +25 -0
  18. package/dist/panels/controls-panel.d.ts.map +1 -0
  19. package/dist/panels/controls-panel.js +268 -0
  20. package/dist/panels/controls-panel.js.map +1 -0
  21. package/dist/panels/events-panel.d.ts.map +1 -1
  22. package/dist/panels/events-panel.js +3 -2
  23. package/dist/panels/events-panel.js.map +1 -1
  24. package/dist/panels/general-panel.d.ts +3 -1
  25. package/dist/panels/general-panel.d.ts.map +1 -1
  26. package/dist/panels/general-panel.js +7 -4
  27. package/dist/panels/general-panel.js.map +1 -1
  28. package/dist/panels/members-panel.d.ts +10 -0
  29. package/dist/panels/members-panel.d.ts.map +1 -0
  30. package/dist/panels/members-panel.js +59 -0
  31. package/dist/panels/members-panel.js.map +1 -0
  32. package/dist/panels/shapes-panel.d.ts +5 -1
  33. package/dist/panels/shapes-panel.d.ts.map +1 -1
  34. package/dist/panels/shapes-panel.js +19 -20
  35. package/dist/panels/shapes-panel.js.map +1 -1
  36. package/dist/plugin.d.ts.map +1 -1
  37. package/dist/plugin.js +5 -1
  38. package/dist/plugin.js.map +1 -1
  39. package/dist/pointer-tracker.d.ts.map +1 -1
  40. package/dist/presence-types.d.ts +23 -0
  41. package/dist/presence-types.d.ts.map +1 -0
  42. package/dist/presence-types.js +8 -0
  43. package/dist/presence-types.js.map +1 -0
  44. package/dist/stop-propagation.d.ts +27 -0
  45. package/dist/stop-propagation.d.ts.map +1 -0
  46. package/dist/stop-propagation.js +26 -0
  47. package/dist/stop-propagation.js.map +1 -0
  48. 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"}
@@ -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
@@ -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;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,+BA0Gf"}
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, Fragment as _Fragment } from "react/jsx-runtime";
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(_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 })] }));
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
@@ -1 +1 @@
1
- {"version":3,"file":"debug-hud.js","sourceRoot":"","sources":["../src/debug-hud.tsx"],"names":[],"mappings":"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"}
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;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"}
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;IAMb,IAAI,IAAI,IAAI;IAIZ,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAK3C,WAAW,IAAI,MAAM;IAIrB,UAAU,IAAI,SAAS,MAAM,EAAE;IAI/B,OAAO,CAAC,IAAI,CAiBV;CACF"}
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;AAIjE,UAAU,YAAY;IACrB,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC/B;AAKD,wBAAgB,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,YAAY,+BAmEpE"}
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"}
@@ -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 { ACCENT_DIM, PANEL_BG, PANEL_BLUR, PANEL_BORDER_RADIUS } from "../styles.js";
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
- return (_jsxs("div", { style: {
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: 8,
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
- position: "absolute",
34
- left: r.x,
35
- top: r.y,
36
- width: r.width,
37
- height: r.height,
38
- background: selection.has(r.id)
39
- ? "rgba(99, 102, 241, 0.8)"
40
- : "rgba(255, 255, 255, 0.4)",
41
- borderRadius: 1,
42
- } }, r.id))), result.viewportRect && (_jsx("div", { style: {
43
- position: "absolute",
44
- left: result.viewportRect.x,
45
- top: result.viewportRect.y,
46
- width: result.viewportRect.width,
47
- height: result.viewportRect.height,
48
- border: `1px solid ${ACCENT_DIM}`,
49
- borderRadius: 2,
50
- boxSizing: "border-box",
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,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAQrF,MAAM,KAAK,GAAG,GAAG,CAAC;AAClB,MAAM,KAAK,GAAG,EAAE,CAAC;AAEjB,MAAM,UAAU,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAgB;IACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7C,uEAAuE;IACvE,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC7C,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC;IACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC;IAEpD,MAAM,MAAM,GAAkB,cAAc,CAAC;QAC5C,MAAM,EAAE,QAAQ;QAChB,aAAa,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;QAC9E,QAAQ,EAAE,KAAK;QACf,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,CAAC;KACV,CAAC,CAAC;IAEH,OAAO,CACN,eACC,KAAK,EAAE;YACN,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,QAAQ;YACpB,YAAY,EAAE,mBAAmB;YACjC,cAAc,EAAE,UAAU;YAC1B,aAAa,EAAE,MAAM;YACrB,QAAQ,EAAE,QAAQ;SAClB,aAGA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACxB,cAEC,KAAK,EAAE;oBACN,QAAQ,EAAE,UAAU;oBACpB,IAAI,EAAE,CAAC,CAAC,CAAC;oBACT,GAAG,EAAE,CAAC,CAAC,CAAC;oBACR,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC9B,CAAC,CAAC,yBAAyB;wBAC3B,CAAC,CAAC,0BAA0B;oBAC7B,YAAY,EAAE,CAAC;iBACf,IAXI,CAAC,CAAC,EAAE,CAYR,CACF,CAAC,EAED,MAAM,CAAC,YAAY,IAAI,CACvB,cACC,KAAK,EAAE;oBACN,QAAQ,EAAE,UAAU;oBACpB,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;oBAC3B,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;oBAC1B,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK;oBAChC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;oBAClC,MAAM,EAAE,aAAa,UAAU,EAAE;oBACjC,YAAY,EAAE,CAAC;oBACf,SAAS,EAAE,YAAY;iBACvB,GACA,CACF,IACI,CACN,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"minimap.js","sourceRoot":"","sources":["../../src/overlays/minimap.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
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"}