@surdeddd/wmkit 0.7.2 → 0.9.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 (91) hide show
  1. package/README.md +60 -3
  2. package/README.ru.md +60 -3
  3. package/dist/angular.cjs +4 -3
  4. package/dist/angular.cjs.map +1 -1
  5. package/dist/angular.d.cts +2 -1
  6. package/dist/angular.d.ts +2 -1
  7. package/dist/angular.js +2 -1
  8. package/dist/angular.js.map +1 -1
  9. package/dist/binder-DGoj0xG1.d.cts +13 -0
  10. package/dist/binder-Lo13iTVB.d.ts +13 -0
  11. package/dist/chrome.cjs +122 -0
  12. package/dist/chrome.cjs.map +1 -0
  13. package/dist/chrome.d.cts +25 -0
  14. package/dist/chrome.d.ts +25 -0
  15. package/dist/chrome.js +114 -0
  16. package/dist/chrome.js.map +1 -0
  17. package/dist/chunk-5XVIC5LH.js +140 -0
  18. package/dist/chunk-5XVIC5LH.js.map +1 -0
  19. package/dist/chunk-BDHFXEJN.cjs +149 -0
  20. package/dist/chunk-BDHFXEJN.cjs.map +1 -0
  21. package/dist/{chunk-NJAI5R4J.cjs → chunk-TUGQX3CX.js} +205 -175
  22. package/dist/chunk-TUGQX3CX.js.map +1 -0
  23. package/dist/{chunk-FOWW4LXS.js → chunk-ZWUVWRUS.cjs} +236 -178
  24. package/dist/chunk-ZWUVWRUS.cjs.map +1 -0
  25. package/dist/devtools.cjs +330 -0
  26. package/dist/devtools.cjs.map +1 -0
  27. package/dist/devtools.d.cts +43 -0
  28. package/dist/devtools.d.ts +43 -0
  29. package/dist/devtools.js +326 -0
  30. package/dist/devtools.js.map +1 -0
  31. package/dist/gestures.cjs +219 -0
  32. package/dist/gestures.cjs.map +1 -0
  33. package/dist/gestures.d.cts +19 -0
  34. package/dist/gestures.d.ts +19 -0
  35. package/dist/gestures.js +215 -0
  36. package/dist/gestures.js.map +1 -0
  37. package/dist/index.cjs +35 -34
  38. package/dist/index.d.cts +3 -2
  39. package/dist/index.d.ts +3 -2
  40. package/dist/index.js +2 -1
  41. package/dist/react.cjs +4 -3
  42. package/dist/react.cjs.map +1 -1
  43. package/dist/react.d.cts +2 -1
  44. package/dist/react.d.ts +2 -1
  45. package/dist/react.js +2 -1
  46. package/dist/react.js.map +1 -1
  47. package/dist/{binder-DvQFmO3K.d.ts → shared-BoHXlPCu.d.ts} +55 -8
  48. package/dist/{binder-_L3Iww0u.d.cts → shared-DdGFz3oy.d.cts} +55 -8
  49. package/dist/solid.cjs +4 -3
  50. package/dist/solid.cjs.map +1 -1
  51. package/dist/solid.d.cts +2 -1
  52. package/dist/solid.d.ts +2 -1
  53. package/dist/solid.js +2 -1
  54. package/dist/solid.js.map +1 -1
  55. package/dist/svelte.cjs +4 -3
  56. package/dist/svelte.cjs.map +1 -1
  57. package/dist/svelte.d.cts +2 -1
  58. package/dist/svelte.d.ts +2 -1
  59. package/dist/svelte.js +2 -1
  60. package/dist/svelte.js.map +1 -1
  61. package/dist/themes/amber.css +316 -0
  62. package/dist/themes/aqua.css +285 -0
  63. package/dist/themes/blueprint.css +303 -0
  64. package/dist/themes/brutalist.css +307 -0
  65. package/dist/themes/candy.css +277 -0
  66. package/dist/themes/carbon.css +297 -0
  67. package/dist/themes/forest.css +278 -0
  68. package/dist/themes/frost.css +279 -0
  69. package/dist/themes/glass.css +2 -1
  70. package/dist/themes/light.css +2 -1
  71. package/dist/themes/neon.css +289 -0
  72. package/dist/themes/noir.css +282 -0
  73. package/dist/themes/paper.css +258 -0
  74. package/dist/themes/retro.css +8 -0
  75. package/dist/themes/synth.css +283 -0
  76. package/dist/themes/terminal.css +273 -0
  77. package/dist/themes.cjs +8747 -0
  78. package/dist/themes.cjs.map +1 -0
  79. package/dist/themes.d.cts +12 -0
  80. package/dist/themes.d.ts +12 -0
  81. package/dist/themes.js +8742 -0
  82. package/dist/themes.js.map +1 -0
  83. package/dist/vue.cjs +4 -3
  84. package/dist/vue.cjs.map +1 -1
  85. package/dist/vue.d.cts +2 -1
  86. package/dist/vue.d.ts +2 -1
  87. package/dist/vue.js +2 -1
  88. package/dist/vue.js.map +1 -1
  89. package/package.json +80 -7
  90. package/dist/chunk-FOWW4LXS.js.map +0 -1
  91. package/dist/chunk-NJAI5R4J.cjs.map +0 -1
@@ -0,0 +1,330 @@
1
+ 'use strict';
2
+
3
+ // src/plugins/devtools/messages.ts
4
+ var EN_STAGES = {
5
+ normal: "normal",
6
+ minimized: "minimized",
7
+ maximized: "maximized",
8
+ snapped: "snapped"
9
+ };
10
+ var RU_STAGES = {
11
+ normal: "\u043E\u0431\u044B\u0447\u043D\u043E\u0435",
12
+ minimized: "\u0441\u0432\u0451\u0440\u043D\u0443\u0442\u043E",
13
+ maximized: "\u0440\u0430\u0437\u0432\u0451\u0440\u043D\u0443\u0442\u043E",
14
+ snapped: "\u043F\u0440\u0438\u043B\u0438\u043F\u043B\u043E"
15
+ };
16
+ var devtoolsMessages = {
17
+ title: "wmkit devtools",
18
+ windows: "windows",
19
+ events: "events",
20
+ empty: "no windows open",
21
+ quiet: "nothing has happened yet",
22
+ focus: "focus",
23
+ minimize: "minimize",
24
+ maximize: "maximize",
25
+ close: "close",
26
+ undo: "undo",
27
+ redo: "redo",
28
+ copyState: "copy state",
29
+ copied: "copied",
30
+ workspace: (index) => `workspace ${index + 1}`,
31
+ stage: (stage) => EN_STAGES[stage]
32
+ };
33
+ var devtoolsMessagesRu = {
34
+ title: "wmkit devtools",
35
+ windows: "\u043E\u043A\u043D\u0430",
36
+ events: "\u0441\u043E\u0431\u044B\u0442\u0438\u044F",
37
+ empty: "\u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0445 \u043E\u043A\u043E\u043D \u043D\u0435\u0442",
38
+ quiet: "\u043F\u043E\u043A\u0430 \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043F\u0440\u043E\u0438\u0441\u0445\u043E\u0434\u0438\u043B\u043E",
39
+ focus: "\u0444\u043E\u043A\u0443\u0441",
40
+ minimize: "\u0441\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
41
+ maximize: "\u0440\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
42
+ close: "\u0437\u0430\u043A\u0440\u044B\u0442\u044C",
43
+ undo: "\u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C",
44
+ redo: "\u0432\u0435\u0440\u043D\u0443\u0442\u044C",
45
+ copyState: "\u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435",
46
+ copied: "\u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E",
47
+ workspace: (index) => `\u0440\u0430\u0431\u043E\u0447\u0438\u0439 \u0441\u0442\u043E\u043B ${index + 1}`,
48
+ stage: (stage) => RU_STAGES[stage]
49
+ };
50
+
51
+ // src/plugins/devtools/view.ts
52
+ var STYLE_ID = "wm-devtools-style";
53
+ var CSS = `[data-wm-devtools]{position:fixed;right:16px;bottom:16px;z-index:2147483646;width:340px;max-width:calc(100vw - 32px);max-height:min(70vh,560px);display:flex;flex-direction:column;overflow:hidden;border-radius:10px;border:1px solid rgba(255,255,255,.14);background:#14161c;color:#e7e9f0;font:12px/1.5 ui-monospace,"SF Mono",Menlo,Consolas,monospace;box-shadow:0 18px 48px rgba(0,0,0,.45)}
54
+ [data-wm-devtools] h2{margin:0;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#9aa0b5}
55
+ [data-wm-devtools] header{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid rgba(255,255,255,.1)}
56
+ [data-wm-devtools] header h2{flex:1}
57
+ [data-wm-devtools] button{font:inherit;color:inherit;background:transparent;border:1px solid rgba(255,255,255,.18);border-radius:5px;padding:3px 7px;min-height:24px;cursor:pointer}
58
+ [data-wm-devtools] button:hover:not(:disabled){border-color:#7c6cff}
59
+ [data-wm-devtools] button:disabled{opacity:.45;cursor:not-allowed}
60
+ [data-wm-devtools] button:focus-visible{outline:2px solid #7c6cff;outline-offset:2px}
61
+ [data-wm-devtools] section{padding:10px 12px;overflow:auto}
62
+ [data-wm-devtools] section+section{border-top:1px solid rgba(255,255,255,.1)}
63
+ [data-wm-devtools] ul{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}
64
+ [data-wm-devtools] [data-wm-devtools-row]{display:grid;grid-template-columns:1fr auto;gap:4px 8px;padding:7px 8px;border:1px solid rgba(255,255,255,.1);border-radius:6px}
65
+ [data-wm-devtools] [data-wm-devtools-row][data-focused]{border-color:#7c6cff}
66
+ [data-wm-devtools] .wm-dt-id{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
67
+ [data-wm-devtools] .wm-dt-meta{grid-column:1/-1;color:#9aa0b5;font-size:11px}
68
+ [data-wm-devtools] .wm-dt-acts{display:flex;gap:4px}
69
+ [data-wm-devtools] .wm-dt-log{gap:2px}
70
+ [data-wm-devtools] .wm-dt-log li{display:flex;gap:8px;color:#9aa0b5}
71
+ [data-wm-devtools] .wm-dt-log b{color:#e7e9f0;font-weight:600;min-width:88px}
72
+ [data-wm-devtools] p{margin:6px 0 0;color:#9aa0b5}
73
+ @media (prefers-reduced-motion:reduce){[data-wm-devtools] *{transition:none!important}}`;
74
+ function acquireStyle(doc) {
75
+ const existing = doc.getElementById(STYLE_ID);
76
+ if (existing instanceof HTMLStyleElement) {
77
+ existing.dataset.owners = String(Number(existing.dataset.owners) + 1);
78
+ return existing;
79
+ }
80
+ const style = doc.createElement("style");
81
+ style.id = STYLE_ID;
82
+ style.dataset.owners = "1";
83
+ style.textContent = CSS;
84
+ doc.head.append(style);
85
+ return style;
86
+ }
87
+ function releaseStyle(style) {
88
+ const left = Number(style.dataset.owners) - 1;
89
+ if (left > 0) style.dataset.owners = String(left);
90
+ else style.remove();
91
+ }
92
+ function box(win) {
93
+ const { x, y, width, height } = win.bounds;
94
+ return `${Math.round(x)},${Math.round(y)} ${Math.round(width)}\xD7${Math.round(height)}`;
95
+ }
96
+ function createDevtoolsView(doc, messages) {
97
+ const style = acquireStyle(doc);
98
+ const root = doc.createElement("aside");
99
+ root.dataset.wmDevtools = "";
100
+ root.setAttribute("role", "complementary");
101
+ const heading = doc.createElement("h2");
102
+ heading.id = `wm-devtools-title-${Math.round(performance.now())}`;
103
+ heading.textContent = messages.title;
104
+ root.setAttribute("aria-labelledby", heading.id);
105
+ const undo = doc.createElement("button");
106
+ undo.type = "button";
107
+ undo.dataset.wmDevtoolsGlobal = "undo";
108
+ undo.textContent = messages.undo;
109
+ const redo = doc.createElement("button");
110
+ redo.type = "button";
111
+ redo.dataset.wmDevtoolsGlobal = "redo";
112
+ redo.textContent = messages.redo;
113
+ const copy = doc.createElement("button");
114
+ copy.type = "button";
115
+ copy.dataset.wmDevtoolsGlobal = "copy";
116
+ copy.textContent = messages.copyState;
117
+ const header = doc.createElement("header");
118
+ header.append(heading, undo, redo, copy);
119
+ const windowsHead = doc.createElement("h2");
120
+ windowsHead.textContent = messages.windows;
121
+ const windowList = doc.createElement("ul");
122
+ const windowsEmpty = doc.createElement("p");
123
+ windowsEmpty.textContent = messages.empty;
124
+ const windowsSection = doc.createElement("section");
125
+ windowsSection.append(windowsHead, windowsEmpty, windowList);
126
+ const eventsHead = doc.createElement("h2");
127
+ eventsHead.textContent = messages.events;
128
+ const logList = doc.createElement("ul");
129
+ logList.className = "wm-dt-log";
130
+ const logEmpty = doc.createElement("p");
131
+ logEmpty.textContent = messages.quiet;
132
+ const eventsSection = doc.createElement("section");
133
+ eventsSection.append(eventsHead, logEmpty, logList);
134
+ const status = doc.createElement("p");
135
+ status.setAttribute("role", "status");
136
+ status.setAttribute("aria-live", "polite");
137
+ eventsSection.append(status);
138
+ root.append(header, windowsSection, eventsSection);
139
+ let windowHandler = null;
140
+ let globalHandler = null;
141
+ const onClick = (event) => {
142
+ const target = event.target?.closest("button");
143
+ if (!target) return;
144
+ const global = target.dataset.wmDevtoolsGlobal;
145
+ if (global) {
146
+ globalHandler?.(global);
147
+ return;
148
+ }
149
+ const action = target.dataset.wmDevtoolsAction;
150
+ const id = target.dataset.wmDevtoolsId;
151
+ if (action && id) windowHandler?.(action, id);
152
+ };
153
+ root.addEventListener("click", onClick);
154
+ const rows = /* @__PURE__ */ new Map();
155
+ let listOrder = "";
156
+ function buildRow(win) {
157
+ const node = doc.createElement("li");
158
+ node.dataset.wmDevtoolsRow = win.id;
159
+ const id = doc.createElement("span");
160
+ id.className = "wm-dt-id";
161
+ const acts = doc.createElement("span");
162
+ acts.className = "wm-dt-acts";
163
+ const buttons = [
164
+ ["focus", messages.focus],
165
+ ["minimize", messages.minimize],
166
+ ["maximize", messages.maximize],
167
+ ["close", messages.close]
168
+ ];
169
+ for (const [action, label] of buttons) {
170
+ const button = doc.createElement("button");
171
+ button.type = "button";
172
+ button.dataset.wmDevtoolsAction = action;
173
+ button.dataset.wmDevtoolsId = win.id;
174
+ button.textContent = label.slice(0, 1);
175
+ button.setAttribute("aria-label", `${label} ${win.id}`);
176
+ acts.append(button);
177
+ }
178
+ const meta = doc.createElement("span");
179
+ meta.className = "wm-dt-meta";
180
+ node.append(id, acts, meta);
181
+ return { node, id, meta };
182
+ }
183
+ function paintRow(row, win, focused) {
184
+ const label = win.title ? `${win.id} \xB7 ${win.title}` : win.id;
185
+ if (row.id.textContent !== label) row.id.textContent = label;
186
+ const meta = `${messages.stage(win.stage)} \xB7 ${win.layer} \xB7 ${messages.workspace(
187
+ win.workspace
188
+ )} \xB7 ${box(win)}`;
189
+ if (row.meta.textContent !== meta) row.meta.textContent = meta;
190
+ if (focused) row.node.dataset.focused = "";
191
+ else delete row.node.dataset.focused;
192
+ }
193
+ return {
194
+ root,
195
+ onWindowAction(handler) {
196
+ windowHandler = handler;
197
+ },
198
+ onGlobalAction(handler) {
199
+ globalHandler = handler;
200
+ },
201
+ render(state, log, history) {
202
+ const windows = state.order.map((id) => state.windows[id]).filter(Boolean);
203
+ windowsEmpty.hidden = windows.length > 0;
204
+ const ordered = [];
205
+ const live = /* @__PURE__ */ new Set();
206
+ for (let index = windows.length - 1; index >= 0; index -= 1) {
207
+ const win = windows[index];
208
+ live.add(win.id);
209
+ let entry = rows.get(win.id);
210
+ if (!entry) {
211
+ entry = buildRow(win);
212
+ rows.set(win.id, entry);
213
+ }
214
+ paintRow(entry, win, win.id === state.focusedId);
215
+ ordered.push(entry.node);
216
+ }
217
+ for (const [id, entry] of rows) {
218
+ if (live.has(id)) continue;
219
+ entry.node.remove();
220
+ rows.delete(id);
221
+ }
222
+ const key = ordered.map((node) => node.dataset.wmDevtoolsRow).join("|");
223
+ if (key !== listOrder) {
224
+ listOrder = key;
225
+ windowList.replaceChildren(...ordered);
226
+ }
227
+ logEmpty.hidden = log.length > 0;
228
+ logList.replaceChildren(
229
+ ...[...log].reverse().map((entry) => {
230
+ const item = doc.createElement("li");
231
+ const type = doc.createElement("b");
232
+ type.textContent = entry.type;
233
+ const detail = doc.createElement("span");
234
+ detail.textContent = entry.detail;
235
+ item.append(type, detail);
236
+ return item;
237
+ })
238
+ );
239
+ undo.disabled = !history.canUndo;
240
+ redo.disabled = !history.canRedo;
241
+ },
242
+ flash(message) {
243
+ status.textContent = message;
244
+ },
245
+ destroy() {
246
+ root.removeEventListener("click", onClick);
247
+ root.remove();
248
+ releaseStyle(style);
249
+ }
250
+ };
251
+ }
252
+
253
+ // src/plugins/devtools/index.ts
254
+ var DEFAULT_EVENTS = [
255
+ "open",
256
+ "close",
257
+ "focus",
258
+ "stage",
259
+ "workspace",
260
+ "group",
261
+ "modalblocked"
262
+ ];
263
+ function detailOf(type, payload) {
264
+ const data = payload;
265
+ const win = data.window;
266
+ if (win?.id) return type === "stage" ? `${win.id} \u2192 ${win.stage}` : win.id;
267
+ if (typeof data.workspace === "number") return String(data.workspace + 1);
268
+ if (typeof data.groupId === "string") return data.groupId;
269
+ return "";
270
+ }
271
+ function createDevtools(wm, options = {}) {
272
+ const container = options.container ?? document.body;
273
+ const doc = container.ownerDocument;
274
+ const messages = { ...devtoolsMessages, ...options.messages };
275
+ const limit = Math.max(1, options.logLimit ?? 50);
276
+ const watched = options.events ?? DEFAULT_EVENTS;
277
+ const view = createDevtoolsView(doc, messages);
278
+ const log = [];
279
+ let seq = 0;
280
+ function draw() {
281
+ view.render(wm.getState(), log, { canUndo: wm.canUndo(), canRedo: wm.canRedo() });
282
+ }
283
+ function record(type, payload) {
284
+ seq += 1;
285
+ log.push({ seq, type, detail: detailOf(type, payload) });
286
+ if (log.length > limit) log.shift();
287
+ draw();
288
+ }
289
+ const stops = watched.map(
290
+ (type) => wm.on(type, (payload) => {
291
+ record(type, payload);
292
+ })
293
+ );
294
+ stops.push(wm.subscribe(() => draw()));
295
+ view.onWindowAction((action, id) => {
296
+ if (action === "focus") wm.focus(id);
297
+ else if (action === "minimize") wm.minimize(id);
298
+ else if (action === "maximize") wm.toggleMaximize(id);
299
+ else wm.close(id);
300
+ });
301
+ view.onGlobalAction((action) => {
302
+ if (action === "undo") {
303
+ wm.undo();
304
+ return;
305
+ }
306
+ if (action === "redo") {
307
+ wm.redo();
308
+ return;
309
+ }
310
+ const json = JSON.stringify(wm.serialize());
311
+ const clipboard = doc.defaultView?.navigator.clipboard;
312
+ if (clipboard) void clipboard.writeText(json);
313
+ view.flash(clipboard ? messages.copied : json);
314
+ });
315
+ container.append(view.root);
316
+ draw();
317
+ return {
318
+ element: view.root,
319
+ destroy() {
320
+ for (const stop of stops) stop();
321
+ view.destroy();
322
+ }
323
+ };
324
+ }
325
+
326
+ exports.createDevtools = createDevtools;
327
+ exports.devtoolsMessages = devtoolsMessages;
328
+ exports.devtoolsMessagesRu = devtoolsMessagesRu;
329
+ //# sourceMappingURL=devtools.cjs.map
330
+ //# sourceMappingURL=devtools.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugins/devtools/messages.ts","../src/plugins/devtools/view.ts","../src/plugins/devtools/index.ts"],"names":[],"mappings":"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","file":"devtools.cjs","sourcesContent":["import type { WindowStage } from '../../core/types'\n\nexport interface DevtoolsMessages {\n title: string\n windows: string\n events: string\n empty: string\n quiet: string\n focus: string\n minimize: string\n maximize: string\n close: string\n undo: string\n redo: string\n copyState: string\n copied: string\n workspace(index: number): string\n stage(stage: WindowStage): string\n}\n\nconst EN_STAGES: Record<WindowStage, string> = {\n normal: 'normal',\n minimized: 'minimized',\n maximized: 'maximized',\n snapped: 'snapped',\n}\n\nconst RU_STAGES: Record<WindowStage, string> = {\n normal: 'обычное',\n minimized: 'свёрнуто',\n maximized: 'развёрнуто',\n snapped: 'прилипло',\n}\n\nexport const devtoolsMessages: DevtoolsMessages = {\n title: 'wmkit devtools',\n windows: 'windows',\n events: 'events',\n empty: 'no windows open',\n quiet: 'nothing has happened yet',\n focus: 'focus',\n minimize: 'minimize',\n maximize: 'maximize',\n close: 'close',\n undo: 'undo',\n redo: 'redo',\n copyState: 'copy state',\n copied: 'copied',\n workspace: (index) => `workspace ${index + 1}`,\n stage: (stage) => EN_STAGES[stage],\n}\n\nexport const devtoolsMessagesRu: DevtoolsMessages = {\n title: 'wmkit devtools',\n windows: 'окна',\n events: 'события',\n empty: 'открытых окон нет',\n quiet: 'пока ничего не происходило',\n focus: 'фокус',\n minimize: 'свернуть',\n maximize: 'развернуть',\n close: 'закрыть',\n undo: 'отменить',\n redo: 'вернуть',\n copyState: 'скопировать состояние',\n copied: 'скопировано',\n workspace: (index) => `рабочий стол ${index + 1}`,\n stage: (stage) => RU_STAGES[stage],\n}\n","import type { ManagerState, WindowState } from '../../core/types'\nimport type { DevtoolsMessages } from './messages'\n\nexport type DevtoolsAction = 'focus' | 'minimize' | 'maximize' | 'close'\n\nexport type DevtoolsGlobal = 'undo' | 'redo' | 'copy'\n\nexport interface DevtoolsHistory {\n canUndo: boolean\n canRedo: boolean\n}\n\nexport interface DevtoolsLogEntry {\n seq: number\n type: string\n detail: string\n}\n\nexport interface DevtoolsView {\n root: HTMLElement\n onWindowAction(handler: (action: DevtoolsAction, id: string) => void): void\n onGlobalAction(handler: (action: DevtoolsGlobal) => void): void\n render(state: ManagerState, log: readonly DevtoolsLogEntry[], history: DevtoolsHistory): void\n flash(message: string): void\n destroy(): void\n}\n\nconst STYLE_ID = 'wm-devtools-style'\n\nconst CSS = `[data-wm-devtools]{position:fixed;right:16px;bottom:16px;z-index:2147483646;width:340px;max-width:calc(100vw - 32px);max-height:min(70vh,560px);display:flex;flex-direction:column;overflow:hidden;border-radius:10px;border:1px solid rgba(255,255,255,.14);background:#14161c;color:#e7e9f0;font:12px/1.5 ui-monospace,\"SF Mono\",Menlo,Consolas,monospace;box-shadow:0 18px 48px rgba(0,0,0,.45)}\n[data-wm-devtools] h2{margin:0;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#9aa0b5}\n[data-wm-devtools] header{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid rgba(255,255,255,.1)}\n[data-wm-devtools] header h2{flex:1}\n[data-wm-devtools] button{font:inherit;color:inherit;background:transparent;border:1px solid rgba(255,255,255,.18);border-radius:5px;padding:3px 7px;min-height:24px;cursor:pointer}\n[data-wm-devtools] button:hover:not(:disabled){border-color:#7c6cff}\n[data-wm-devtools] button:disabled{opacity:.45;cursor:not-allowed}\n[data-wm-devtools] button:focus-visible{outline:2px solid #7c6cff;outline-offset:2px}\n[data-wm-devtools] section{padding:10px 12px;overflow:auto}\n[data-wm-devtools] section+section{border-top:1px solid rgba(255,255,255,.1)}\n[data-wm-devtools] ul{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}\n[data-wm-devtools] [data-wm-devtools-row]{display:grid;grid-template-columns:1fr auto;gap:4px 8px;padding:7px 8px;border:1px solid rgba(255,255,255,.1);border-radius:6px}\n[data-wm-devtools] [data-wm-devtools-row][data-focused]{border-color:#7c6cff}\n[data-wm-devtools] .wm-dt-id{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n[data-wm-devtools] .wm-dt-meta{grid-column:1/-1;color:#9aa0b5;font-size:11px}\n[data-wm-devtools] .wm-dt-acts{display:flex;gap:4px}\n[data-wm-devtools] .wm-dt-log{gap:2px}\n[data-wm-devtools] .wm-dt-log li{display:flex;gap:8px;color:#9aa0b5}\n[data-wm-devtools] .wm-dt-log b{color:#e7e9f0;font-weight:600;min-width:88px}\n[data-wm-devtools] p{margin:6px 0 0;color:#9aa0b5}\n@media (prefers-reduced-motion:reduce){[data-wm-devtools] *{transition:none!important}}`\n\nfunction acquireStyle(doc: Document): HTMLStyleElement {\n const existing = doc.getElementById(STYLE_ID)\n if (existing instanceof HTMLStyleElement) {\n existing.dataset.owners = String(Number(existing.dataset.owners) + 1)\n return existing\n }\n const style = doc.createElement('style')\n style.id = STYLE_ID\n style.dataset.owners = '1'\n style.textContent = CSS\n doc.head.append(style)\n return style\n}\n\nfunction releaseStyle(style: HTMLStyleElement): void {\n const left = Number(style.dataset.owners) - 1\n if (left > 0) style.dataset.owners = String(left)\n else style.remove()\n}\n\nfunction box(win: WindowState): string {\n const { x, y, width, height } = win.bounds\n return `${Math.round(x)},${Math.round(y)} ${Math.round(width)}×${Math.round(height)}`\n}\n\nexport function createDevtoolsView(doc: Document, messages: DevtoolsMessages): DevtoolsView {\n const style = acquireStyle(doc)\n\n const root = doc.createElement('aside')\n root.dataset.wmDevtools = ''\n root.setAttribute('role', 'complementary')\n\n const heading = doc.createElement('h2')\n heading.id = `wm-devtools-title-${Math.round(performance.now())}`\n heading.textContent = messages.title\n root.setAttribute('aria-labelledby', heading.id)\n\n const undo = doc.createElement('button')\n undo.type = 'button'\n undo.dataset.wmDevtoolsGlobal = 'undo'\n undo.textContent = messages.undo\n\n const redo = doc.createElement('button')\n redo.type = 'button'\n redo.dataset.wmDevtoolsGlobal = 'redo'\n redo.textContent = messages.redo\n\n const copy = doc.createElement('button')\n copy.type = 'button'\n copy.dataset.wmDevtoolsGlobal = 'copy'\n copy.textContent = messages.copyState\n\n const header = doc.createElement('header')\n header.append(heading, undo, redo, copy)\n\n const windowsHead = doc.createElement('h2')\n windowsHead.textContent = messages.windows\n const windowList = doc.createElement('ul')\n const windowsEmpty = doc.createElement('p')\n windowsEmpty.textContent = messages.empty\n const windowsSection = doc.createElement('section')\n windowsSection.append(windowsHead, windowsEmpty, windowList)\n\n const eventsHead = doc.createElement('h2')\n eventsHead.textContent = messages.events\n const logList = doc.createElement('ul')\n logList.className = 'wm-dt-log'\n const logEmpty = doc.createElement('p')\n logEmpty.textContent = messages.quiet\n const eventsSection = doc.createElement('section')\n eventsSection.append(eventsHead, logEmpty, logList)\n\n const status = doc.createElement('p')\n status.setAttribute('role', 'status')\n status.setAttribute('aria-live', 'polite')\n eventsSection.append(status)\n\n root.append(header, windowsSection, eventsSection)\n\n let windowHandler: ((action: DevtoolsAction, id: string) => void) | null = null\n let globalHandler: ((action: DevtoolsGlobal) => void) | null = null\n\n const onClick = (event: MouseEvent) => {\n const target = (event.target as Element | null)?.closest<HTMLElement>('button')\n if (!target) return\n const global = target.dataset.wmDevtoolsGlobal\n if (global) {\n globalHandler?.(global as DevtoolsGlobal)\n return\n }\n const action = target.dataset.wmDevtoolsAction\n const id = target.dataset.wmDevtoolsId\n if (action && id) windowHandler?.(action as DevtoolsAction, id)\n }\n root.addEventListener('click', onClick)\n\n interface Row {\n node: HTMLElement\n id: HTMLElement\n meta: HTMLElement\n }\n\n const rows = new Map<string, Row>()\n let listOrder = ''\n\n function buildRow(win: WindowState): Row {\n const node = doc.createElement('li')\n node.dataset.wmDevtoolsRow = win.id\n\n const id = doc.createElement('span')\n id.className = 'wm-dt-id'\n\n const acts = doc.createElement('span')\n acts.className = 'wm-dt-acts'\n const buttons: Array<[DevtoolsAction, string]> = [\n ['focus', messages.focus],\n ['minimize', messages.minimize],\n ['maximize', messages.maximize],\n ['close', messages.close],\n ]\n for (const [action, label] of buttons) {\n const button = doc.createElement('button')\n button.type = 'button'\n button.dataset.wmDevtoolsAction = action\n button.dataset.wmDevtoolsId = win.id\n button.textContent = label.slice(0, 1)\n button.setAttribute('aria-label', `${label} ${win.id}`)\n acts.append(button)\n }\n\n const meta = doc.createElement('span')\n meta.className = 'wm-dt-meta'\n\n node.append(id, acts, meta)\n return { node, id, meta }\n }\n\n function paintRow(row: Row, win: WindowState, focused: boolean): void {\n const label = win.title ? `${win.id} · ${win.title}` : win.id\n if (row.id.textContent !== label) row.id.textContent = label\n const meta = `${messages.stage(win.stage)} · ${win.layer} · ${messages.workspace(\n win.workspace,\n )} · ${box(win)}`\n if (row.meta.textContent !== meta) row.meta.textContent = meta\n if (focused) row.node.dataset.focused = ''\n else delete row.node.dataset.focused\n }\n\n return {\n root,\n onWindowAction(handler) {\n windowHandler = handler\n },\n onGlobalAction(handler) {\n globalHandler = handler\n },\n render(state, log, history) {\n const windows = state.order.map((id) => state.windows[id]).filter(Boolean) as WindowState[]\n windowsEmpty.hidden = windows.length > 0\n\n const ordered: HTMLElement[] = []\n const live = new Set<string>()\n for (let index = windows.length - 1; index >= 0; index -= 1) {\n const win = windows[index] as WindowState\n live.add(win.id)\n let entry = rows.get(win.id)\n if (!entry) {\n entry = buildRow(win)\n rows.set(win.id, entry)\n }\n paintRow(entry, win, win.id === state.focusedId)\n ordered.push(entry.node)\n }\n for (const [id, entry] of rows) {\n if (live.has(id)) continue\n entry.node.remove()\n rows.delete(id)\n }\n const key = ordered.map((node) => node.dataset.wmDevtoolsRow).join('|')\n if (key !== listOrder) {\n listOrder = key\n windowList.replaceChildren(...ordered)\n }\n logEmpty.hidden = log.length > 0\n logList.replaceChildren(\n ...[...log].reverse().map((entry) => {\n const item = doc.createElement('li')\n const type = doc.createElement('b')\n type.textContent = entry.type\n const detail = doc.createElement('span')\n detail.textContent = entry.detail\n item.append(type, detail)\n return item\n }),\n )\n undo.disabled = !history.canUndo\n redo.disabled = !history.canRedo\n },\n flash(message) {\n status.textContent = message\n },\n destroy() {\n root.removeEventListener('click', onClick)\n root.remove()\n releaseStyle(style)\n },\n }\n}\n","import type { ManagerEvents, WindowManager } from '../../core/types'\nimport { type DevtoolsMessages, devtoolsMessages } from './messages'\nimport { createDevtoolsView, type DevtoolsLogEntry } from './view'\n\nexport type { DevtoolsMessages } from './messages'\nexport { devtoolsMessages, devtoolsMessagesRu } from './messages'\nexport type { DevtoolsAction, DevtoolsLogEntry } from './view'\n\nexport type DevtoolsEvent = keyof ManagerEvents\n\nexport interface DevtoolsOptions {\n container?: HTMLElement\n messages?: Partial<DevtoolsMessages>\n logLimit?: number\n events?: readonly DevtoolsEvent[]\n}\n\nexport interface DevtoolsController {\n element: HTMLElement\n destroy(): void\n}\n\nconst DEFAULT_EVENTS: readonly DevtoolsEvent[] = [\n 'open',\n 'close',\n 'focus',\n 'stage',\n 'workspace',\n 'group',\n 'modalblocked',\n]\n\nfunction detailOf(type: DevtoolsEvent, payload: unknown): string {\n const data = payload as Record<string, unknown>\n const win = data.window as { id?: string; stage?: string } | undefined\n if (win?.id) return type === 'stage' ? `${win.id} → ${win.stage}` : win.id\n if (typeof data.workspace === 'number') return String(data.workspace + 1)\n if (typeof data.groupId === 'string') return data.groupId\n return ''\n}\n\nexport function createDevtools(\n wm: WindowManager,\n options: DevtoolsOptions = {},\n): DevtoolsController {\n const container = options.container ?? document.body\n const doc = container.ownerDocument\n const messages: DevtoolsMessages = { ...devtoolsMessages, ...options.messages }\n const limit = Math.max(1, options.logLimit ?? 50)\n const watched = options.events ?? DEFAULT_EVENTS\n\n const view = createDevtoolsView(doc, messages)\n const log: DevtoolsLogEntry[] = []\n let seq = 0\n\n function draw(): void {\n view.render(wm.getState(), log, { canUndo: wm.canUndo(), canRedo: wm.canRedo() })\n }\n\n function record(type: DevtoolsEvent, payload: unknown): void {\n seq += 1\n log.push({ seq, type, detail: detailOf(type, payload) })\n if (log.length > limit) log.shift()\n draw()\n }\n\n const stops = watched.map((type) =>\n wm.on(type, (payload: unknown) => {\n record(type, payload)\n }),\n )\n stops.push(wm.subscribe(() => draw()))\n\n view.onWindowAction((action, id) => {\n if (action === 'focus') wm.focus(id)\n else if (action === 'minimize') wm.minimize(id)\n else if (action === 'maximize') wm.toggleMaximize(id)\n else wm.close(id)\n })\n\n view.onGlobalAction((action) => {\n if (action === 'undo') {\n wm.undo()\n return\n }\n if (action === 'redo') {\n wm.redo()\n return\n }\n const json = JSON.stringify(wm.serialize())\n const clipboard = doc.defaultView?.navigator.clipboard\n if (clipboard) void clipboard.writeText(json)\n view.flash(clipboard ? messages.copied : json)\n })\n\n container.append(view.root)\n draw()\n\n return {\n element: view.root,\n destroy() {\n for (const stop of stops) stop()\n view.destroy()\n },\n }\n}\n"]}
@@ -0,0 +1,43 @@
1
+ import { k as WindowStage, c as ManagerEvents, W as WindowManager } from './types-jG2lHGcA.cjs';
2
+
3
+ interface DevtoolsMessages {
4
+ title: string;
5
+ windows: string;
6
+ events: string;
7
+ empty: string;
8
+ quiet: string;
9
+ focus: string;
10
+ minimize: string;
11
+ maximize: string;
12
+ close: string;
13
+ undo: string;
14
+ redo: string;
15
+ copyState: string;
16
+ copied: string;
17
+ workspace(index: number): string;
18
+ stage(stage: WindowStage): string;
19
+ }
20
+ declare const devtoolsMessages: DevtoolsMessages;
21
+ declare const devtoolsMessagesRu: DevtoolsMessages;
22
+
23
+ type DevtoolsAction = 'focus' | 'minimize' | 'maximize' | 'close';
24
+ interface DevtoolsLogEntry {
25
+ seq: number;
26
+ type: string;
27
+ detail: string;
28
+ }
29
+
30
+ type DevtoolsEvent = keyof ManagerEvents;
31
+ interface DevtoolsOptions {
32
+ container?: HTMLElement;
33
+ messages?: Partial<DevtoolsMessages>;
34
+ logLimit?: number;
35
+ events?: readonly DevtoolsEvent[];
36
+ }
37
+ interface DevtoolsController {
38
+ element: HTMLElement;
39
+ destroy(): void;
40
+ }
41
+ declare function createDevtools(wm: WindowManager, options?: DevtoolsOptions): DevtoolsController;
42
+
43
+ export { type DevtoolsAction, type DevtoolsController, type DevtoolsEvent, type DevtoolsLogEntry, type DevtoolsMessages, type DevtoolsOptions, createDevtools, devtoolsMessages, devtoolsMessagesRu };
@@ -0,0 +1,43 @@
1
+ import { k as WindowStage, c as ManagerEvents, W as WindowManager } from './types-jG2lHGcA.js';
2
+
3
+ interface DevtoolsMessages {
4
+ title: string;
5
+ windows: string;
6
+ events: string;
7
+ empty: string;
8
+ quiet: string;
9
+ focus: string;
10
+ minimize: string;
11
+ maximize: string;
12
+ close: string;
13
+ undo: string;
14
+ redo: string;
15
+ copyState: string;
16
+ copied: string;
17
+ workspace(index: number): string;
18
+ stage(stage: WindowStage): string;
19
+ }
20
+ declare const devtoolsMessages: DevtoolsMessages;
21
+ declare const devtoolsMessagesRu: DevtoolsMessages;
22
+
23
+ type DevtoolsAction = 'focus' | 'minimize' | 'maximize' | 'close';
24
+ interface DevtoolsLogEntry {
25
+ seq: number;
26
+ type: string;
27
+ detail: string;
28
+ }
29
+
30
+ type DevtoolsEvent = keyof ManagerEvents;
31
+ interface DevtoolsOptions {
32
+ container?: HTMLElement;
33
+ messages?: Partial<DevtoolsMessages>;
34
+ logLimit?: number;
35
+ events?: readonly DevtoolsEvent[];
36
+ }
37
+ interface DevtoolsController {
38
+ element: HTMLElement;
39
+ destroy(): void;
40
+ }
41
+ declare function createDevtools(wm: WindowManager, options?: DevtoolsOptions): DevtoolsController;
42
+
43
+ export { type DevtoolsAction, type DevtoolsController, type DevtoolsEvent, type DevtoolsLogEntry, type DevtoolsMessages, type DevtoolsOptions, createDevtools, devtoolsMessages, devtoolsMessagesRu };