@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
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useReducer, useState } from "react";
|
|
3
|
+
import { STOP_CANVAS_PROPAGATION } from "../stop-propagation.js";
|
|
4
|
+
import { ACCENT, INLINE_INPUT, MINI_BUTTON, MINI_BUTTON_ACCENT, PANEL_BASE, TEXT_LABEL, TEXT_MUTED, } from "../styles.js";
|
|
5
|
+
/** Expanded / collapsed dock widths (kept in sync with DebugHud's sibling offset). */
|
|
6
|
+
export const CONTROLS_DOCK_WIDTH = 248;
|
|
7
|
+
export const CONTROLS_DOCK_COLLAPSED = 30;
|
|
8
|
+
/**
|
|
9
|
+
* Universal control dock. Drives plugin operations without any demo-app UI: a
|
|
10
|
+
* tool palette (`tools.getOrdered()`), the declarative action registry, a raw
|
|
11
|
+
* event-emit fallback, and default-style controls. Full-height, collapsible,
|
|
12
|
+
* with collapsible sections.
|
|
13
|
+
*/
|
|
14
|
+
export function ControlsPanel({ store, tools, actions, events, activeToolId, collapsed, onToggleCollapsed, shapesSection, }) {
|
|
15
|
+
// Re-render when actions register/unregister at runtime.
|
|
16
|
+
const [, bump] = useReducer((n) => n + 1, 0);
|
|
17
|
+
useEffect(() => actions.subscribe(bump), [actions]);
|
|
18
|
+
// Filter over the action registry (label / group / id).
|
|
19
|
+
const [actionQuery, setActionQuery] = useState("");
|
|
20
|
+
if (collapsed) {
|
|
21
|
+
return (_jsx("button", { type: "button", ...STOP_CANVAS_PROPAGATION, onClick: (e) => {
|
|
22
|
+
e.stopPropagation();
|
|
23
|
+
onToggleCollapsed();
|
|
24
|
+
}, style: collapsedStripStyle, title: "Open controls", children: _jsx("span", { style: { writingMode: "vertical-rl", letterSpacing: 1 }, children: "Controls \u203A" }) }));
|
|
25
|
+
}
|
|
26
|
+
const toolList = tools.getOrdered();
|
|
27
|
+
const actionList = actions.getOrdered();
|
|
28
|
+
const q = actionQuery.trim().toLowerCase();
|
|
29
|
+
const filteredActions = q
|
|
30
|
+
? actionList.filter(({ action }) => `${action.label} ${action.group ?? ""} ${action.id}`.toLowerCase().includes(q))
|
|
31
|
+
: actionList;
|
|
32
|
+
const groups = groupActions(filteredActions);
|
|
33
|
+
return (_jsxs("div", { ...STOP_CANVAS_PROPAGATION, style: dockStyle, children: [_jsxs("div", { style: headerStyle, children: [_jsx("span", { style: { color: ACCENT, fontWeight: 700 }, children: "Controls" }), _jsx("button", { type: "button", onClick: onToggleCollapsed, style: MINI_BUTTON, title: "Collapse", children: "\u2039" })] }), _jsx("input", { value: actionQuery, onChange: (e) => setActionQuery(e.target.value), placeholder: "\u30A2\u30AF\u30B7\u30E7\u30F3\u3092\u691C\u7D22\u2026", style: { ...INLINE_INPUT, width: "100%", marginBottom: 6 } }), _jsx(Section, { title: "Tools", children: _jsx("div", { style: toolGridStyle, children: toolList.map(({ id, definition }) => (_jsx("button", { type: "button", title: id, onClick: () => store.setActiveToolId(id), style: {
|
|
34
|
+
...MINI_BUTTON,
|
|
35
|
+
display: "flex",
|
|
36
|
+
alignItems: "center",
|
|
37
|
+
justifyContent: "center",
|
|
38
|
+
width: 28,
|
|
39
|
+
height: 28,
|
|
40
|
+
background: id === activeToolId ? ACCENT : "rgba(255,255,255,0.1)",
|
|
41
|
+
}, children: _jsx(IconSlot, { render: definition.icon }) }, id))) }) }), groups.map(([group, items]) => (_jsx(Section, { title: group, children: items.map(({ id, action }) => (_jsx(ActionRow, { action: action, onAfterRun: bump }, id))) }, group))), filteredActions.length === 0 && (_jsx("div", { style: { color: TEXT_MUTED, fontSize: 10, marginBottom: 6 }, children: actionList.length === 0 ? (_jsxs(_Fragment, { children: ["No registered actions. Plugins expose operations via ", _jsx("code", { children: "ctx.actions.register" }), "."] })) : ("一致するアクションがありません") })), shapesSection && (_jsx(Section, { title: "Shapes", defaultOpen: false, children: shapesSection })), _jsx(Section, { title: "Emit event", defaultOpen: false, children: _jsx(EventConsole, { events: events }) }), _jsx(Section, { title: "Style", defaultOpen: false, children: _jsx(StyleControls, { store: store }) })] }));
|
|
42
|
+
}
|
|
43
|
+
/** Collapsible section with a clickable header. */
|
|
44
|
+
function Section({ title, defaultOpen = true, children, }) {
|
|
45
|
+
const [open, setOpen] = useState(defaultOpen);
|
|
46
|
+
return (_jsxs("div", { style: sectionStyle, children: [_jsxs("button", { type: "button", onClick: () => setOpen((o) => !o), style: sectionHeaderStyle, title: open ? "Collapse" : "Expand", children: [_jsx("span", { style: { color: ACCENT, marginRight: 6, fontSize: 8 }, children: open ? "▼" : "▶" }), title] }), open && _jsx("div", { style: sectionBodyStyle, children: children })] }));
|
|
47
|
+
}
|
|
48
|
+
function groupActions(list) {
|
|
49
|
+
const map = new Map();
|
|
50
|
+
for (const entry of list) {
|
|
51
|
+
const g = entry.action.group ?? "Actions";
|
|
52
|
+
const bucket = map.get(g) ?? [];
|
|
53
|
+
bucket.push(entry);
|
|
54
|
+
map.set(g, bucket);
|
|
55
|
+
}
|
|
56
|
+
return [...map.entries()];
|
|
57
|
+
}
|
|
58
|
+
function IconSlot({ render }) {
|
|
59
|
+
try {
|
|
60
|
+
return render();
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return _jsx("span", { children: "?" });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** One action: a button (no params) or inline param controls + Run. */
|
|
67
|
+
function ActionRow({ action, onAfterRun }) {
|
|
68
|
+
const [args, setArgs] = useState(() => defaultArgs(action.params));
|
|
69
|
+
const enabled = action.isEnabled ? action.isEnabled() : true;
|
|
70
|
+
const active = action.isActive?.() ?? false;
|
|
71
|
+
// アクション実行後に必ず親を再レンダーさせ、isActive/isEnabled を再評価する。
|
|
72
|
+
// これがないと、store を変えずプラグインローカル状態だけ更新する toggle 系で
|
|
73
|
+
// インジケータが次の無関係な再レンダーまで stale になる。
|
|
74
|
+
// run は void | Promise<void>。同期例外・非同期 reject を握りつぶさずログし、
|
|
75
|
+
// finally で onAfterRun を必ず呼んで UI 反映を保証する。
|
|
76
|
+
const run = (a) => {
|
|
77
|
+
try {
|
|
78
|
+
const result = action.run(a);
|
|
79
|
+
if (result && typeof result.then === "function") {
|
|
80
|
+
result.catch((err) => console.error(`Action "${action.id}" failed:`, err));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
console.error(`Action "${action.id}" failed:`, err);
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
onAfterRun();
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
if (!action.params || action.params.length === 0) {
|
|
91
|
+
return (_jsxs("button", { type: "button", disabled: !enabled, onClick: () => run({}), style: {
|
|
92
|
+
...(active ? MINI_BUTTON_ACCENT : MINI_BUTTON),
|
|
93
|
+
display: "block",
|
|
94
|
+
width: "100%",
|
|
95
|
+
textAlign: "left",
|
|
96
|
+
marginBottom: 3,
|
|
97
|
+
opacity: enabled ? 1 : 0.4,
|
|
98
|
+
}, children: [active ? "● " : "", action.label] }));
|
|
99
|
+
}
|
|
100
|
+
return (_jsxs("div", { style: { marginBottom: 4 }, children: [_jsx("div", { style: { color: TEXT_LABEL, fontSize: 10 }, children: action.label }), _jsxs("div", { style: { display: "flex", flexWrap: "wrap", gap: 4, alignItems: "center" }, children: [action.params.map((p) => (_jsx(ParamControl, { param: p, value: args[p.name], onChange: (v) => setArgs((prev) => ({ ...prev, [p.name]: v })) }, p.name))), _jsx("button", { type: "button", disabled: !enabled, onClick: () => run(args), style: { ...MINI_BUTTON_ACCENT, opacity: enabled ? 1 : 0.4 }, children: "Run" })] })] }));
|
|
101
|
+
}
|
|
102
|
+
function defaultArgs(params) {
|
|
103
|
+
const out = {};
|
|
104
|
+
for (const p of params ?? []) {
|
|
105
|
+
if (p.default !== undefined)
|
|
106
|
+
out[p.name] = p.default;
|
|
107
|
+
else if (p.type === "enum")
|
|
108
|
+
out[p.name] = p.options?.[0]?.value;
|
|
109
|
+
else if (p.type === "boolean")
|
|
110
|
+
out[p.name] = false;
|
|
111
|
+
else if (p.type === "number")
|
|
112
|
+
out[p.name] = p.min ?? 0;
|
|
113
|
+
else if (p.type === "color")
|
|
114
|
+
out[p.name] = "#000000";
|
|
115
|
+
else
|
|
116
|
+
out[p.name] = "";
|
|
117
|
+
}
|
|
118
|
+
return out;
|
|
119
|
+
}
|
|
120
|
+
function ParamControl({ param, value, onChange, }) {
|
|
121
|
+
switch (param.type) {
|
|
122
|
+
case "enum":
|
|
123
|
+
return (_jsx("select", { value: String(value ?? ""), onChange: (e) => onChange(e.target.value), style: { ...INLINE_INPUT, width: "auto" }, children: param.options?.map((o) => (_jsx("option", { value: o.value, children: o.label }, o.value))) }));
|
|
124
|
+
case "boolean":
|
|
125
|
+
return (_jsx("input", { type: "checkbox", checked: Boolean(value), onChange: (e) => onChange(e.target.checked) }));
|
|
126
|
+
case "color":
|
|
127
|
+
return (_jsx("input", { type: "color", value: String(value ?? "#000000"), onChange: (e) => onChange(e.target.value) }));
|
|
128
|
+
case "number":
|
|
129
|
+
return (_jsx("input", { type: "number", value: Number(value ?? 0), min: param.min, max: param.max, step: param.step, onChange: (e) => onChange(Number(e.target.value)), style: INLINE_INPUT }));
|
|
130
|
+
default:
|
|
131
|
+
return (_jsx("input", { type: "text", value: String(value ?? ""), onChange: (e) => onChange(e.target.value), style: INLINE_INPUT }));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/** Emit an arbitrary event with a JSON payload — the universal fallback. */
|
|
135
|
+
function EventConsole({ events }) {
|
|
136
|
+
const [name, setName] = useState("");
|
|
137
|
+
const [payload, setPayload] = useState("{}");
|
|
138
|
+
const [err, setErr] = useState(null);
|
|
139
|
+
const emit = () => {
|
|
140
|
+
if (!name.trim())
|
|
141
|
+
return;
|
|
142
|
+
let data = {};
|
|
143
|
+
if (payload.trim()) {
|
|
144
|
+
try {
|
|
145
|
+
data = JSON.parse(payload);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
setErr("invalid JSON");
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
setErr(null);
|
|
153
|
+
events.emit(name.trim(), data);
|
|
154
|
+
};
|
|
155
|
+
return (_jsxs("div", { children: [_jsx("input", { type: "text", value: name, placeholder: "event:name", onChange: (e) => setName(e.target.value), style: { ...INLINE_INPUT, width: "100%", marginBottom: 3 } }), _jsx("textarea", { value: payload, onChange: (e) => setPayload(e.target.value), spellCheck: false, style: {
|
|
156
|
+
...INLINE_INPUT,
|
|
157
|
+
width: "100%",
|
|
158
|
+
height: 36,
|
|
159
|
+
resize: "vertical",
|
|
160
|
+
marginBottom: 3,
|
|
161
|
+
} }), _jsxs("div", { style: { display: "flex", gap: 4, alignItems: "center" }, children: [_jsx("button", { type: "button", onClick: emit, style: MINI_BUTTON_ACCENT, children: "Emit" }), err && _jsx("span", { style: { color: "#f87171", fontSize: 10 }, children: err })] })] }));
|
|
162
|
+
}
|
|
163
|
+
/** Edit the default draw style (applies to new shapes via setStyleSettings). */
|
|
164
|
+
function StyleControls({ store }) {
|
|
165
|
+
const s = store.getStyleSettings();
|
|
166
|
+
// setStyleSettings はストア側で既存設定にマージする({ ...styleSettings, ...patch })。
|
|
167
|
+
// ここで render 時点の `s` と再マージすると stale な値を書き戻し、並行変更
|
|
168
|
+
// (fill 変更直後の stroke 変更など)を打ち消しかねないので patch だけ渡す。
|
|
169
|
+
const set = (patch) => store.setStyleSettings(patch);
|
|
170
|
+
const clearCanvas = () => {
|
|
171
|
+
const ids = [...store.getShapes().keys()];
|
|
172
|
+
if (ids.length === 0)
|
|
173
|
+
return;
|
|
174
|
+
// HUD が本番でも出るようになったため、誤爆防止に確認を挟む。
|
|
175
|
+
// deleteShape 直呼びは undo 履歴を通らない破壊的操作である点も明示する。
|
|
176
|
+
if (typeof window !== "undefined" &&
|
|
177
|
+
!window.confirm(`Delete all ${ids.length} shape(s)? This cannot be undone.`)) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
for (const id of ids)
|
|
181
|
+
store.deleteShape(id);
|
|
182
|
+
};
|
|
183
|
+
return (_jsxs("div", { children: [_jsxs("div", { style: { display: "flex", gap: 6, alignItems: "center", marginBottom: 4 }, children: [_jsxs("label", { style: swatchLabel, children: ["fill", _jsx("input", { type: "color", value: toHex(s.fill), onChange: (e) => set({ fill: e.target.value }) })] }), _jsxs("label", { style: swatchLabel, children: ["stroke", _jsx("input", { type: "color", value: toHex(s.stroke), onChange: (e) => set({ stroke: e.target.value }) })] })] }), _jsx("button", { type: "button", onClick: clearCanvas, style: { ...MINI_BUTTON, color: "#f87171", borderColor: "#f87171" }, children: "Clear canvas" })] }));
|
|
184
|
+
}
|
|
185
|
+
function toHex(color) {
|
|
186
|
+
return typeof color === "string" && /^#[0-9a-fA-F]{6}$/.test(color) ? color : "#000000";
|
|
187
|
+
}
|
|
188
|
+
const dockStyle = {
|
|
189
|
+
...PANEL_BASE,
|
|
190
|
+
// width must include padding so DebugHud's sibling offset (based on the
|
|
191
|
+
// nominal width) actually clears the dock — otherwise content-box padding
|
|
192
|
+
// makes the dock ~20px wider than expected and the minimap overlaps it.
|
|
193
|
+
boxSizing: "border-box",
|
|
194
|
+
position: "absolute",
|
|
195
|
+
left: 8,
|
|
196
|
+
top: 8,
|
|
197
|
+
bottom: 8,
|
|
198
|
+
width: CONTROLS_DOCK_WIDTH,
|
|
199
|
+
overflowY: "auto",
|
|
200
|
+
};
|
|
201
|
+
const collapsedStripStyle = {
|
|
202
|
+
...PANEL_BASE,
|
|
203
|
+
boxSizing: "border-box",
|
|
204
|
+
position: "absolute",
|
|
205
|
+
left: 8,
|
|
206
|
+
top: 8,
|
|
207
|
+
bottom: 8,
|
|
208
|
+
width: CONTROLS_DOCK_COLLAPSED,
|
|
209
|
+
display: "flex",
|
|
210
|
+
alignItems: "center",
|
|
211
|
+
justifyContent: "center",
|
|
212
|
+
cursor: "pointer",
|
|
213
|
+
border: "none",
|
|
214
|
+
color: ACCENT,
|
|
215
|
+
fontSize: 11,
|
|
216
|
+
fontWeight: 700,
|
|
217
|
+
};
|
|
218
|
+
const headerStyle = {
|
|
219
|
+
display: "flex",
|
|
220
|
+
alignItems: "center",
|
|
221
|
+
justifyContent: "space-between",
|
|
222
|
+
marginBottom: 2,
|
|
223
|
+
fontSize: 11,
|
|
224
|
+
};
|
|
225
|
+
// セクションごとに区切り線 + 上マージンを付けて境界を明確にする。
|
|
226
|
+
const sectionStyle = {
|
|
227
|
+
marginTop: 10,
|
|
228
|
+
paddingTop: 10,
|
|
229
|
+
borderTop: "1px solid rgba(255, 255, 255, 0.1)",
|
|
230
|
+
};
|
|
231
|
+
// ヘッダーは大文字 + トラッキング + やや明るい色でスキャンしやすくする。
|
|
232
|
+
const sectionHeaderStyle = {
|
|
233
|
+
display: "flex",
|
|
234
|
+
alignItems: "center",
|
|
235
|
+
width: "100%",
|
|
236
|
+
textAlign: "left",
|
|
237
|
+
background: "transparent",
|
|
238
|
+
border: "none",
|
|
239
|
+
cursor: "pointer",
|
|
240
|
+
padding: 0,
|
|
241
|
+
margin: 0,
|
|
242
|
+
fontFamily: "inherit",
|
|
243
|
+
color: "#c9c9d4",
|
|
244
|
+
fontSize: 10.5,
|
|
245
|
+
fontWeight: 600,
|
|
246
|
+
letterSpacing: 0.6,
|
|
247
|
+
textTransform: "uppercase",
|
|
248
|
+
};
|
|
249
|
+
// 本文はインデント + 左のレールで「ヘッダー配下」であることを視覚化する。
|
|
250
|
+
const sectionBodyStyle = {
|
|
251
|
+
marginTop: 8,
|
|
252
|
+
marginLeft: 3,
|
|
253
|
+
paddingLeft: 9,
|
|
254
|
+
borderLeft: "1px solid rgba(255, 255, 255, 0.08)",
|
|
255
|
+
};
|
|
256
|
+
const toolGridStyle = {
|
|
257
|
+
display: "flex",
|
|
258
|
+
flexWrap: "wrap",
|
|
259
|
+
gap: 4,
|
|
260
|
+
};
|
|
261
|
+
const swatchLabel = {
|
|
262
|
+
display: "flex",
|
|
263
|
+
alignItems: "center",
|
|
264
|
+
gap: 3,
|
|
265
|
+
color: TEXT_LABEL,
|
|
266
|
+
fontSize: 10,
|
|
267
|
+
};
|
|
268
|
+
//# sourceMappingURL=controls-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls-panel.js","sourceRoot":"","sources":["../../src/panels/controls-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-panel.d.ts","sourceRoot":"","sources":["../../src/panels/events-panel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"events-panel.d.ts","sourceRoot":"","sources":["../../src/panels/events-panel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIrE,UAAU,gBAAgB;IACzB,WAAW,EAAE,WAAW,CAAC;CACzB;AA4BD,wBAAgB,WAAW,CAAC,EAAE,WAAW,EAAE,EAAE,gBAAgB,+BAyE5D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useCallback, useState, useSyncExternalStore } from "react";
|
|
3
|
+
import { STOP_CANVAS_PROPAGATION } from "../stop-propagation.js";
|
|
3
4
|
import { LABEL_STYLE, MINI_BUTTON, PANEL_BASE, SCROLLABLE_STYLE, TEXT_MUTED } from "../styles.js";
|
|
4
5
|
const EVENT_COLORS = {
|
|
5
6
|
// canvas events — each action gets its own shade
|
|
@@ -30,7 +31,7 @@ export function EventsPanel({ eventLogger }) {
|
|
|
30
31
|
const filtered = filter
|
|
31
32
|
? events.filter((e) => e.event.toLowerCase().includes(filter.toLowerCase()))
|
|
32
33
|
: events;
|
|
33
|
-
return (_jsxs("div", { style: {
|
|
34
|
+
return (_jsxs("div", { ...STOP_CANVAS_PROPAGATION, style: {
|
|
34
35
|
...PANEL_BASE,
|
|
35
36
|
position: "absolute",
|
|
36
37
|
bottom: 8,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-panel.js","sourceRoot":"","sources":["../../src/panels/events-panel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAMlG,MAAM,YAAY,GAA2B;IAC5C,iDAAiD;IACjD,oBAAoB,EAAE,SAAS,EAAE,OAAO;IACxC,kBAAkB,EAAE,SAAS,EAAE,aAAa;IAC5C,oBAAoB,EAAE,SAAS,EAAE,eAAe;IAChD,cAAc,EAAE,SAAS,EAAE,YAAY;IACvC,oBAAoB,EAAE,SAAS,EAAE,cAAc;IAC/C,eAAe;IACf,KAAK,EAAE,SAAS,EAAE,QAAQ;IAC1B,cAAc;IACd,IAAI,EAAE,SAAS,EAAE,SAAS;IAC1B,mBAAmB;IACnB,SAAS,EAAE,SAAS,EAAE,SAAS;IAC/B,kBAAkB;IAClB,QAAQ,EAAE,SAAS,EAAE,OAAO;IAC5B,iBAAiB;IACjB,OAAO,EAAE,SAAS,EAAE,SAAS;CAC7B,CAAC;AAEF,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAEtC,SAAS,UAAU,CAAC,KAAa;IAChC,qCAAqC;IACrC,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,WAAW,EAAoB;IAC5D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,oBAAoB,CAClC,WAAW,CAAC,CAAC,EAAc,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EACzE,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,CAC/B,CAAC;IAEF,MAAM,QAAQ,GAA6B,MAAM;QAChD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5E,CAAC,CAAC,MAAM,CAAC;IAEV,OAAO,CACN,
|
|
1
|
+
{"version":3,"file":"events-panel.js","sourceRoot":"","sources":["../../src/panels/events-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { BoardStore, CommandRegistry, EventBus, LayerManager, ShapeRegistry, ToolRegistry, Viewport } from "@edv4h/usketch-shared";
|
|
2
|
+
import type { BoardMetaTrackerLike } from "../board-meta-types.js";
|
|
2
3
|
import type { FpsCounter } from "../fps-counter.js";
|
|
3
4
|
import type { PointerTracker } from "../pointer-tracker.js";
|
|
4
5
|
import type { SyncStatusTrackerLike } from "../sync-status-types.js";
|
|
@@ -11,10 +12,11 @@ interface GeneralPanelProps {
|
|
|
11
12
|
layers: LayerManager;
|
|
12
13
|
shapes: ShapeRegistry;
|
|
13
14
|
syncStatus?: SyncStatusTrackerLike;
|
|
15
|
+
boardMeta?: BoardMetaTrackerLike;
|
|
14
16
|
events: EventBus;
|
|
15
17
|
viewport: Viewport;
|
|
16
18
|
activeToolId: string;
|
|
17
19
|
}
|
|
18
|
-
export declare function GeneralPanel({ store, fpsCounter, pointerTracker, commands, tools, layers, shapes, syncStatus, events, viewport, activeToolId, }: GeneralPanelProps): import("react").JSX.Element;
|
|
20
|
+
export declare function GeneralPanel({ store, fpsCounter, pointerTracker, commands, tools, layers, shapes, syncStatus, boardMeta, events, viewport, activeToolId, }: GeneralPanelProps): import("react").JSX.Element;
|
|
19
21
|
export {};
|
|
20
22
|
//# sourceMappingURL=general-panel.d.ts.map
|
|
@@ -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;
|
|
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;AAE/B,OAAO,KAAK,EAAqB,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAY5D,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,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACrB;AAqCD,wBAAgB,YAAY,CAAC,EAC5B,KAAK,EACL,UAAU,EACV,cAAc,EACd,QAAQ,EACR,KAAK,EACL,MAAM,EACN,MAAM,EACN,UAAU,EACV,SAAS,EACT,MAAM,EACN,QAAQ,EACR,YAAY,GACZ,EAAE,iBAAiB,+BAoPnB"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useCallback, useEffect, useState, useSyncExternalStore } from "react";
|
|
3
3
|
import { FpsGraph } from "../components/fps-graph.js";
|
|
4
|
+
import { STOP_CANVAS_PROPAGATION } from "../stop-propagation.js";
|
|
4
5
|
import { fmt, fpsColor, INLINE_INPUT, LABEL_STYLE, MINI_BUTTON, MINI_BUTTON_ACCENT, PANEL_BASE, SECTION_STYLE, } from "../styles.js";
|
|
6
|
+
const DEFAULT_BOARD_META = { name: null, isCloud: false };
|
|
5
7
|
const DEFAULT_SYNC_SNAPSHOT = {
|
|
6
8
|
state: "loading",
|
|
7
9
|
shapeCount: 0,
|
|
@@ -32,10 +34,11 @@ function formatTimestamp(ts) {
|
|
|
32
34
|
const d = new Date(ts);
|
|
33
35
|
return `${d.getHours().toString().padStart(2, "0")}:${d.getMinutes().toString().padStart(2, "0")}:${d.getSeconds().toString().padStart(2, "0")}`;
|
|
34
36
|
}
|
|
35
|
-
export function GeneralPanel({ store, fpsCounter, pointerTracker, commands, tools, layers, shapes, syncStatus, events, viewport, activeToolId, }) {
|
|
37
|
+
export function GeneralPanel({ store, fpsCounter, pointerTracker, commands, tools, layers, shapes, syncStatus, boardMeta, events, viewport, activeToolId, }) {
|
|
36
38
|
const fps = useSyncExternalStore(useCallback((cb) => fpsCounter.subscribe(cb), [fpsCounter]), () => fpsCounter.getSnapshot());
|
|
37
39
|
const pointer = useSyncExternalStore(useCallback((cb) => pointerTracker.subscribe(cb), [pointerTracker]), () => pointerTracker.getSnapshot());
|
|
38
40
|
const syncSnapshot = useSyncExternalStore(useCallback((cb) => (syncStatus ? syncStatus.subscribe(cb) : () => { }), [syncStatus]), () => syncStatus?.getSnapshot() ?? DEFAULT_SYNC_SNAPSHOT);
|
|
41
|
+
const board = useSyncExternalStore(useCallback((cb) => (boardMeta ? boardMeta.subscribe(cb) : () => { }), [boardMeta]), () => boardMeta?.getSnapshot() ?? DEFAULT_BOARD_META);
|
|
39
42
|
const canUndo = commands.canUndo();
|
|
40
43
|
const canRedo = commands.canRedo();
|
|
41
44
|
const historySize = commands.getHistorySize();
|
|
@@ -64,13 +67,13 @@ export function GeneralPanel({ store, fpsCounter, pointerTracker, commands, tool
|
|
|
64
67
|
}
|
|
65
68
|
setEditingViewport(false);
|
|
66
69
|
};
|
|
67
|
-
return (_jsxs("div", { style: {
|
|
70
|
+
return (_jsxs("div", { ...STOP_CANVAS_PROPAGATION, style: {
|
|
68
71
|
...PANEL_BASE,
|
|
69
72
|
position: "absolute",
|
|
70
73
|
top: 8,
|
|
71
74
|
right: 8,
|
|
72
75
|
width: 220,
|
|
73
|
-
}, children: [_jsxs("div", { style: SECTION_STYLE, children: [_jsxs("span", { style: { color: fpsColor(fps), fontWeight: "bold" }, children: [fps, " FPS"] }), _jsx(FpsGraph, { fpsCounter: fpsCounter })] }), _jsxs("div", { style: SECTION_STYLE, children: [_jsxs("div", { style: LABEL_STYLE, children: ["Viewport", " ", !editingViewport && (_jsx("button", { type: "button", style: MINI_BUTTON, onClick: startEditViewport, children: "edit" }))] }), editingViewport ? (_jsxs("div", { style: { display: "flex", gap: 3, alignItems: "center" }, children: [_jsx("input", { style: INLINE_INPUT, value: vpDraft.x, onChange: (e) => setVpDraft((d) => ({ ...d, x: e.target.value })), onKeyDown: (e) => e.key === "Enter" && commitViewport() }), _jsx("input", { style: INLINE_INPUT, value: vpDraft.y, onChange: (e) => setVpDraft((d) => ({ ...d, y: e.target.value })), onKeyDown: (e) => e.key === "Enter" && commitViewport() }), _jsx("input", { style: { ...INLINE_INPUT, width: 36 }, value: vpDraft.zoom, onChange: (e) => setVpDraft((d) => ({ ...d, zoom: e.target.value })), onKeyDown: (e) => e.key === "Enter" && commitViewport() }), _jsx("button", { type: "button", style: MINI_BUTTON_ACCENT, onClick: commitViewport, children: "OK" })] })) : (_jsxs("div", { children: ["x: ", fmt(viewport.x), " y: ", fmt(viewport.y), " zoom: ", fmt(viewport.zoom)] }))] }), _jsxs("div", { style: SECTION_STYLE, children: [_jsx("div", { style: LABEL_STYLE, children: "Active Tool" }), _jsx("div", { children: activeToolId })] }), _jsxs("div", { style: SECTION_STYLE, children: [_jsx("div", { style: LABEL_STYLE, children: "Pointer" }), _jsxs("div", { children: ["world: (", fmt(pointer.world.x), ", ", fmt(pointer.world.y), ")"] }), _jsxs("div", { children: ["screen: (", fmt(pointer.screen.x), ", ", fmt(pointer.screen.y), ")"] })] }), _jsxs("div", { style: SECTION_STYLE, children: [_jsxs("div", { style: LABEL_STYLE, children: ["History (", historyCursor + 1, "/", historySize, ")"] }), _jsxs("div", { style: { display: "flex", gap: 4 }, children: [_jsx("button", { type: "button", style: { ...MINI_BUTTON, opacity: canUndo ? 1 : 0.3 }, disabled: !canUndo, onClick: () => commands.undo(), children: "\u27F5 Undo" }), _jsx("button", { type: "button", style: { ...MINI_BUTTON, opacity: canRedo ? 1 : 0.3 }, disabled: !canRedo, onClick: () => commands.redo(), children: "Redo \u27F6" })] })] }), _jsxs("div", { style: SECTION_STYLE, children: [_jsx("div", { style: LABEL_STYLE, children: "Persistence (Yjs + IndexedDB)" }), _jsxs("div", { style: { display: "flex", alignItems: "center", gap: 5 }, children: [_jsx("span", { style: {
|
|
76
|
+
}, children: [_jsxs("div", { style: SECTION_STYLE, children: [_jsx("div", { style: LABEL_STYLE, children: "Board" }), _jsx("div", { style: { fontWeight: 600, color: "#e5e7eb", wordBreak: "break-word" }, children: board.name ?? "(untitled)" }), _jsxs("div", { style: { color: "#888" }, children: [board.isCloud ? "☁ Cloud" : "🖥 Local", board.id ? ` · ${board.id}` : ""] })] }), _jsxs("div", { style: SECTION_STYLE, children: [_jsxs("span", { style: { color: fpsColor(fps), fontWeight: "bold" }, children: [fps, " FPS"] }), _jsx(FpsGraph, { fpsCounter: fpsCounter })] }), _jsxs("div", { style: SECTION_STYLE, children: [_jsxs("div", { style: LABEL_STYLE, children: ["Viewport", " ", !editingViewport && (_jsx("button", { type: "button", style: MINI_BUTTON, onClick: startEditViewport, children: "edit" }))] }), editingViewport ? (_jsxs("div", { style: { display: "flex", gap: 3, alignItems: "center" }, children: [_jsx("input", { style: INLINE_INPUT, value: vpDraft.x, onChange: (e) => setVpDraft((d) => ({ ...d, x: e.target.value })), onKeyDown: (e) => e.key === "Enter" && commitViewport() }), _jsx("input", { style: INLINE_INPUT, value: vpDraft.y, onChange: (e) => setVpDraft((d) => ({ ...d, y: e.target.value })), onKeyDown: (e) => e.key === "Enter" && commitViewport() }), _jsx("input", { style: { ...INLINE_INPUT, width: 36 }, value: vpDraft.zoom, onChange: (e) => setVpDraft((d) => ({ ...d, zoom: e.target.value })), onKeyDown: (e) => e.key === "Enter" && commitViewport() }), _jsx("button", { type: "button", style: MINI_BUTTON_ACCENT, onClick: commitViewport, children: "OK" })] })) : (_jsxs("div", { children: ["x: ", fmt(viewport.x), " y: ", fmt(viewport.y), " zoom: ", fmt(viewport.zoom)] }))] }), _jsxs("div", { style: SECTION_STYLE, children: [_jsx("div", { style: LABEL_STYLE, children: "Active Tool" }), _jsx("div", { children: activeToolId })] }), _jsxs("div", { style: SECTION_STYLE, children: [_jsx("div", { style: LABEL_STYLE, children: "Pointer" }), _jsxs("div", { children: ["world: (", fmt(pointer.world.x), ", ", fmt(pointer.world.y), ")"] }), _jsxs("div", { children: ["screen: (", fmt(pointer.screen.x), ", ", fmt(pointer.screen.y), ")"] })] }), _jsxs("div", { style: SECTION_STYLE, children: [_jsxs("div", { style: LABEL_STYLE, children: ["History (", historyCursor + 1, "/", historySize, ")"] }), _jsxs("div", { style: { display: "flex", gap: 4 }, children: [_jsx("button", { type: "button", style: { ...MINI_BUTTON, opacity: canUndo ? 1 : 0.3 }, disabled: !canUndo, onClick: () => commands.undo(), children: "\u27F5 Undo" }), _jsx("button", { type: "button", style: { ...MINI_BUTTON, opacity: canRedo ? 1 : 0.3 }, disabled: !canRedo, onClick: () => commands.redo(), children: "Redo \u27F6" })] })] }), _jsxs("div", { style: SECTION_STYLE, children: [_jsx("div", { style: LABEL_STYLE, children: "Persistence (Yjs + IndexedDB)" }), _jsxs("div", { style: { display: "flex", alignItems: "center", gap: 5 }, children: [_jsx("span", { style: {
|
|
74
77
|
display: "inline-block",
|
|
75
78
|
width: 7,
|
|
76
79
|
height: 7,
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"general-panel.js","sourceRoot":"","sources":["../../src/panels/general-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PresenceTrackerLike } from "../presence-types.js";
|
|
2
|
+
/**
|
|
3
|
+
* オンラインメンバーのアバター一覧。旧 TopBar の PresencePill を Control HUD の
|
|
4
|
+
* 独立パネルへ移したもの。`globalThis.__usketchPresence`(app.tsx が供給)を購読し、
|
|
5
|
+
* 他メンバーがいる時だけ表示する。General パネルの左隣(右上クラスタ)に配置。
|
|
6
|
+
*/
|
|
7
|
+
export declare function MembersPanel({ presence }: {
|
|
8
|
+
presence?: PresenceTrackerLike;
|
|
9
|
+
}): import("react").JSX.Element | null;
|
|
10
|
+
//# sourceMappingURL=members-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"members-panel.d.ts","sourceRoot":"","sources":["../../src/panels/members-panel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAiBlF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,mBAAmB,CAAA;CAAE,sCAqE5E"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useSyncExternalStore } from "react";
|
|
3
|
+
import { STOP_CANVAS_PROPAGATION } from "../stop-propagation.js";
|
|
4
|
+
import { PANEL_BASE, TEXT_MUTED } from "../styles.js";
|
|
5
|
+
const EMPTY = { members: [] };
|
|
6
|
+
const STATUS_DOT = {
|
|
7
|
+
active: "#22c55e",
|
|
8
|
+
away: "#eab308",
|
|
9
|
+
busy: "#ef4444",
|
|
10
|
+
presenting: "#3b82f6",
|
|
11
|
+
};
|
|
12
|
+
function initial(name) {
|
|
13
|
+
return name?.[0]?.toUpperCase() ?? "?";
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* オンラインメンバーのアバター一覧。旧 TopBar の PresencePill を Control HUD の
|
|
17
|
+
* 独立パネルへ移したもの。`globalThis.__usketchPresence`(app.tsx が供給)を購読し、
|
|
18
|
+
* 他メンバーがいる時だけ表示する。General パネルの左隣(右上クラスタ)に配置。
|
|
19
|
+
*/
|
|
20
|
+
export function MembersPanel({ presence }) {
|
|
21
|
+
const subscribe = useCallback((cb) => presence?.subscribe(cb) ?? (() => { }), [presence]);
|
|
22
|
+
const getSnapshot = useCallback(() => presence?.getSnapshot() ?? EMPTY, [presence]);
|
|
23
|
+
const snap = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
24
|
+
const members = snap.members;
|
|
25
|
+
// 他メンバーがいなければ非表示(solo 時は出さない)。
|
|
26
|
+
if (members.length === 0)
|
|
27
|
+
return null;
|
|
28
|
+
return (_jsxs("div", { ...STOP_CANVAS_PROPAGATION, style: {
|
|
29
|
+
...PANEL_BASE,
|
|
30
|
+
position: "absolute",
|
|
31
|
+
top: 8,
|
|
32
|
+
right: 238,
|
|
33
|
+
width: 180,
|
|
34
|
+
}, children: [_jsxs("div", { style: { color: TEXT_MUTED, marginBottom: 6 }, children: ["Members (", members.length, ")"] }), _jsx("div", { style: { display: "flex", flexDirection: "column", gap: 4 }, children: members.map((m) => (_jsxs("div", { style: { display: "flex", alignItems: "center", gap: 6 }, children: [_jsx("span", { style: {
|
|
35
|
+
width: 18,
|
|
36
|
+
height: 18,
|
|
37
|
+
borderRadius: "50%",
|
|
38
|
+
background: m.color,
|
|
39
|
+
color: "#fff",
|
|
40
|
+
fontSize: 10,
|
|
41
|
+
fontWeight: 700,
|
|
42
|
+
display: "inline-flex",
|
|
43
|
+
alignItems: "center",
|
|
44
|
+
justifyContent: "center",
|
|
45
|
+
flexShrink: 0,
|
|
46
|
+
}, children: initial(m.name) }), _jsx("span", { style: {
|
|
47
|
+
flex: 1,
|
|
48
|
+
overflow: "hidden",
|
|
49
|
+
textOverflow: "ellipsis",
|
|
50
|
+
whiteSpace: "nowrap",
|
|
51
|
+
}, children: m.name }), _jsx("span", { title: m.status ?? "active", style: {
|
|
52
|
+
width: 8,
|
|
53
|
+
height: 8,
|
|
54
|
+
borderRadius: "50%",
|
|
55
|
+
background: STATUS_DOT[m.status ?? "active"] ?? STATUS_DOT.active,
|
|
56
|
+
flexShrink: 0,
|
|
57
|
+
} })] }, m.clientId))) })] }));
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=members-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"members-panel.js","sourceRoot":"","sources":["../../src/panels/members-panel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,KAAK,GAAqB,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAEhD,MAAM,UAAU,GAA2B;IAC1C,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,UAAU,EAAE,SAAS;CACrB,CAAC;AAEF,SAAS,OAAO,CAAC,IAAY;IAC5B,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,EAAE,QAAQ,EAAsC;IAC5E,MAAM,SAAS,GAAG,WAAW,CAC5B,CAAC,EAAc,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,EACzD,CAAC,QAAQ,CAAC,CACV,CAAC;IACF,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAE7B,+BAA+B;IAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,OAAO,CACN,kBACK,uBAAuB,EAC3B,KAAK,EAAE;YACN,GAAG,UAAU;YACb,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,CAAC;YACN,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,GAAG;SACV,aAED,eAAK,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,EAAE,0BAAY,OAAO,CAAC,MAAM,SAAQ,EACpF,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,YAC9D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnB,eAAsB,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,aAC7E,eACC,KAAK,EAAE;gCACN,KAAK,EAAE,EAAE;gCACT,MAAM,EAAE,EAAE;gCACV,YAAY,EAAE,KAAK;gCACnB,UAAU,EAAE,CAAC,CAAC,KAAK;gCACnB,KAAK,EAAE,MAAM;gCACb,QAAQ,EAAE,EAAE;gCACZ,UAAU,EAAE,GAAG;gCACf,OAAO,EAAE,aAAa;gCACtB,UAAU,EAAE,QAAQ;gCACpB,cAAc,EAAE,QAAQ;gCACxB,UAAU,EAAE,CAAC;6BACb,YAEA,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GACV,EACP,eACC,KAAK,EAAE;gCACN,IAAI,EAAE,CAAC;gCACP,QAAQ,EAAE,QAAQ;gCAClB,YAAY,EAAE,UAAU;gCACxB,UAAU,EAAE,QAAQ;6BACpB,YAEA,CAAC,CAAC,IAAI,GACD,EACP,eACC,KAAK,EAAE,CAAC,CAAC,MAAM,IAAI,QAAQ,EAC3B,KAAK,EAAE;gCACN,KAAK,EAAE,CAAC;gCACR,MAAM,EAAE,CAAC;gCACT,YAAY,EAAE,KAAK;gCACnB,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,UAAU,CAAC,MAAM;gCACjE,UAAU,EAAE,CAAC;6BACb,GACA,KArCO,CAAC,CAAC,QAAQ,CAsCd,CACN,CAAC,GACG,IACD,CACN,CAAC;AACH,CAAC"}
|
|
@@ -9,7 +9,11 @@ interface ShapesPanelProps {
|
|
|
9
9
|
/** Shapes that exist locally but the server hasn't acknowledged. Empty if the
|
|
10
10
|
* sync layer doesn't track divergence. */
|
|
11
11
|
unconfirmedShapeIds?: ReadonlySet<string>;
|
|
12
|
+
/** Left offset so the panel clears the Controls dock. Default 8. */
|
|
13
|
+
offsetLeft?: number;
|
|
14
|
+
/** Render inline (inside the Controls dock section) instead of a floating panel. */
|
|
15
|
+
docked?: boolean;
|
|
12
16
|
}
|
|
13
|
-
export declare function ShapesPanel({ store, commands, shapes, selection, registry, onHoverShape, unconfirmedShapeIds, }: ShapesPanelProps): import("react").JSX.Element;
|
|
17
|
+
export declare function ShapesPanel({ store, commands, shapes, selection, registry, onHoverShape, unconfirmedShapeIds, offsetLeft, docked, }: ShapesPanelProps): import("react").JSX.Element;
|
|
14
18
|
export {};
|
|
15
19
|
//# 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,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;
|
|
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;IAC1C,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AA+DD,wBAAgB,WAAW,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,UAAc,EACd,MAAc,GACd,EAAE,gBAAgB,+BA8JlB"}
|