@vitejs/devtools 0.0.0-alpha.8 → 0.1.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 (35) hide show
  1. package/dist/DockIcon-Jbdv1CYn.js +1720 -0
  2. package/dist/DockStandalone-Dd6Dcd5B.js +81 -0
  3. package/dist/LogItem-CfTxUV6A.js +204 -0
  4. package/dist/ToastOverlay-BVErqkif.js +1048 -0
  5. package/dist/ViewBuiltinLogs-DQLxnQ1c.js +427 -0
  6. package/dist/ViewBuiltinTerminals-B83FB-cT.js +10407 -0
  7. package/dist/cli-commands-DRp01A04.js +178 -0
  8. package/dist/cli-commands.d.ts +18 -0
  9. package/dist/cli-commands.js +3 -0
  10. package/dist/cli.js +5 -94
  11. package/dist/client/inject.js +170 -18
  12. package/dist/client/standalone/assets/DockStandalone-B8W-HO8N.js +1 -0
  13. package/dist/client/standalone/assets/LogItem-B-ayIBi6.js +1 -0
  14. package/dist/client/standalone/assets/ViewBuiltinLogs-B8M7lPbt.js +1 -0
  15. package/dist/client/standalone/assets/ViewBuiltinTerminals-Dkd5qdlN.js +36 -0
  16. package/dist/client/standalone/assets/dist-ZC9UAo6H.js +1 -0
  17. package/dist/client/standalone/assets/index-6F2y1lxr.css +1 -0
  18. package/dist/client/standalone/assets/index-odNIfapG.js +4 -0
  19. package/dist/client/standalone/index.html +5 -3
  20. package/dist/client/webcomponents.d.ts +21656 -30
  21. package/dist/client/webcomponents.js +305 -423
  22. package/dist/config.d.ts +25 -0
  23. package/dist/config.js +14 -0
  24. package/dist/dirs.js +7 -3
  25. package/dist/{dist-BuuUhVT5.js → dist-3NIYLDlS.js} +2261 -936
  26. package/dist/index.d.ts +256 -14
  27. package/dist/index.js +2 -4
  28. package/dist/plugins-6tW2SoNv.js +2115 -0
  29. package/dist/popup-EDv_a9nQ.js +358 -0
  30. package/dist/utils--qjmgani.js +6 -0
  31. package/package.json +51 -21
  32. package/dist/client/standalone/assets/index-DULlvzQC.css +0 -1
  33. package/dist/client/standalone/assets/index-Dpd5aqgb.js +0 -7
  34. package/dist/dirs-DcSK9l9L.js +0 -9
  35. package/dist/plugins-Cj9DSRH1.js +0 -1348
@@ -0,0 +1,358 @@
1
+ import { H as reactive, L as watch, V as markRaw, W as shallowRef } from "./dist-3NIYLDlS.js";
2
+ import { createEventEmitter } from "@vitejs/devtools-kit/utils/events";
3
+ //#region src/client/webcomponents/constants.ts
4
+ const BUILTIN_ENTRY_CLIENT_AUTH_NOTICE = Object.freeze({
5
+ type: "~builtin",
6
+ id: "~client-auth-notice",
7
+ title: "Unauthorized",
8
+ icon: "i-fluent-emoji-flat-warning"
9
+ });
10
+ const BUILTIN_ENTRIES = Object.freeze([BUILTIN_ENTRY_CLIENT_AUTH_NOTICE]);
11
+ const DEFAULT_CATEGORIES_ORDER = {
12
+ "~viteplus": -1e3,
13
+ "default": 0,
14
+ "app": 100,
15
+ "framework": 200,
16
+ "web": 300,
17
+ "advanced": 400,
18
+ "~builtin": 1e3
19
+ };
20
+ //#endregion
21
+ //#region src/client/webcomponents/state/dock-settings.ts
22
+ /**
23
+ * Group and sort dock entries based on user settings.
24
+ * Filters out hidden entries and categories, sorts by pinned status, custom order, and default order.
25
+ */
26
+ function docksGroupByCategories(entries, settings, options) {
27
+ const { docksHidden, docksCategoriesHidden, docksCustomOrder, docksPinned } = settings;
28
+ const { includeHidden = false } = options ?? {};
29
+ const map = /* @__PURE__ */ new Map();
30
+ for (const entry of entries) {
31
+ if (entry.isHidden && !includeHidden) continue;
32
+ if (!includeHidden && docksHidden.includes(entry.id)) continue;
33
+ const category = entry.category ?? "default";
34
+ if (!includeHidden && docksCategoriesHidden.includes(category)) continue;
35
+ if (!map.has(category)) map.set(category, []);
36
+ map.get(category).push(entry);
37
+ }
38
+ const grouped = Array.from(map.entries()).sort(([a], [b]) => {
39
+ const ia = DEFAULT_CATEGORIES_ORDER[a] || 0;
40
+ const ib = DEFAULT_CATEGORIES_ORDER[b] || 0;
41
+ return ib === ia ? b.localeCompare(a) : ia - ib;
42
+ });
43
+ grouped.forEach(([_, items]) => {
44
+ items.sort((a, b) => {
45
+ const aPinned = docksPinned.includes(a.id);
46
+ if (aPinned !== docksPinned.includes(b.id)) return aPinned ? -1 : 1;
47
+ const customOrderA = docksCustomOrder[a.id] ?? 0;
48
+ const customOrderB = docksCustomOrder[b.id] ?? 0;
49
+ if (customOrderA !== customOrderB) return customOrderA - customOrderB;
50
+ const ia = a.defaultOrder ?? 0;
51
+ const ib = b.defaultOrder ?? 0;
52
+ return ib === ia ? b.title.localeCompare(a.title) : ia - ib;
53
+ });
54
+ });
55
+ return grouped;
56
+ }
57
+ /**
58
+ * Split grouped entries into visible and overflow based on capacity.
59
+ */
60
+ function docksSplitGroupsWithCapacity(groups, capacity) {
61
+ const visible = [];
62
+ const overflow = [];
63
+ let left = capacity;
64
+ for (const [category, items] of groups) if (left <= 0) overflow.push([category, items]);
65
+ else if (items.length > left) {
66
+ visible.push([category, items.slice(0, left)]);
67
+ overflow.push([category, items.slice(left)]);
68
+ left = 0;
69
+ } else {
70
+ left -= items.length;
71
+ visible.push([category, items]);
72
+ }
73
+ return {
74
+ visible,
75
+ overflow
76
+ };
77
+ }
78
+ //#endregion
79
+ //#region src/client/webcomponents/state/docks.ts
80
+ function DEFAULT_DOCK_PANEL_STORE() {
81
+ return {
82
+ width: 80,
83
+ height: 80,
84
+ top: 0,
85
+ left: 10,
86
+ position: "bottom",
87
+ open: false,
88
+ inactiveTimeout: 3e3
89
+ };
90
+ }
91
+ function createDockEntryState(entry, selected) {
92
+ const events = createEventEmitter();
93
+ const state = reactive({
94
+ entryMeta: entry,
95
+ get isActive() {
96
+ return selected.value?.id === entry.id;
97
+ },
98
+ domElements: {},
99
+ events: markRaw(events)
100
+ });
101
+ watch(() => selected.value?.id, (newSelectedId) => {
102
+ if (newSelectedId === entry.id) events.emit("entry:activated");
103
+ else events.emit("entry:deactivated");
104
+ }, { immediate: true });
105
+ watch(() => state.domElements.iframe, (newIframe) => {
106
+ if (newIframe) events.emit("dom:iframe:mounted", newIframe);
107
+ }, { immediate: true });
108
+ watch(() => state.domElements.panel, (newPanel) => {
109
+ if (newPanel) events.emit("dom:panel:mounted", newPanel);
110
+ }, { immediate: true });
111
+ return state;
112
+ }
113
+ function sharedStateToRef(sharedState) {
114
+ const ref = shallowRef(sharedState.value());
115
+ sharedState.on("updated", (newState) => {
116
+ ref.value = newState;
117
+ });
118
+ return ref;
119
+ }
120
+ const docksEntriesRefByRpc = /* @__PURE__ */ new WeakMap();
121
+ async function useDocksEntries(rpc) {
122
+ if (docksEntriesRefByRpc.has(rpc)) return docksEntriesRefByRpc.get(rpc);
123
+ const docksEntriesRef = sharedStateToRef(await rpc.sharedState.get("devtoolskit:internal:docks", { initialValue: [] }));
124
+ docksEntriesRefByRpc.set(rpc, docksEntriesRef);
125
+ return docksEntriesRef;
126
+ }
127
+ //#endregion
128
+ //#region src/client/webcomponents/state/floating-tooltip.ts
129
+ const tooltip = shallowRef(null);
130
+ const docksOverflowPanel = shallowRef(null);
131
+ const dockContextMenu = shallowRef(null);
132
+ function setFloatingTooltip(info) {
133
+ tooltip.value = info;
134
+ }
135
+ function useFloatingTooltip() {
136
+ return tooltip;
137
+ }
138
+ function setDocksOverflowPanel(info) {
139
+ docksOverflowPanel.value = info;
140
+ }
141
+ function useDocksOverflowPanel() {
142
+ return docksOverflowPanel;
143
+ }
144
+ function setDockContextMenu(info) {
145
+ dockContextMenu.value = info;
146
+ }
147
+ function useDockContextMenu() {
148
+ return dockContextMenu;
149
+ }
150
+ //#endregion
151
+ //#region src/client/webcomponents/state/popup.ts
152
+ const PANEL_MIN_SIZE = 20;
153
+ const PANEL_MAX_SIZE = 100;
154
+ const POPUP_MIN_WIDTH = 320;
155
+ const POPUP_MIN_HEIGHT = 240;
156
+ const POPUP_DOCK_ID = "~popup";
157
+ const MAIN_FRAME_ACTION_HANDLER_KEY = "__VITE_DEVTOOLS_TRIGGER_DOCK_ACTION__";
158
+ const popupWindow = shallowRef(null);
159
+ const isPopupOpen = shallowRef(false);
160
+ const popupEvents = createEventEmitter();
161
+ let detachPopupListeners;
162
+ let detachColorModeSync;
163
+ let popupDockElement;
164
+ let loadDockStandalone = async () => {
165
+ return await import("./DockStandalone-Dd6Dcd5B.js").then((m) => m.DockStandalone);
166
+ };
167
+ popupEvents.on("popup:open-requested", (context) => {
168
+ openDockPopup(context);
169
+ });
170
+ function getDocumentPictureInPicture() {
171
+ if (typeof window === "undefined") return;
172
+ return window.documentPictureInPicture;
173
+ }
174
+ function clearListeners() {
175
+ detachPopupListeners?.();
176
+ detachPopupListeners = void 0;
177
+ detachColorModeSync?.();
178
+ detachColorModeSync = void 0;
179
+ }
180
+ function resolveColorMode() {
181
+ const sourceWindow = window;
182
+ const elements = [sourceWindow.document?.documentElement, sourceWindow.document?.body].filter(Boolean);
183
+ for (const element of elements) {
184
+ if (element?.classList?.contains("dark")) return "dark";
185
+ if (element?.classList?.contains("light")) return "light";
186
+ const dataTheme = element?.getAttribute?.("data-theme");
187
+ if (dataTheme === "dark" || dataTheme === "light") return dataTheme;
188
+ }
189
+ if (sourceWindow.matchMedia?.("(prefers-color-scheme: dark)").matches) return "dark";
190
+ return "light";
191
+ }
192
+ function applyPopupColorMode(popup, mode) {
193
+ popup.document.documentElement?.style.setProperty("color-scheme", mode);
194
+ }
195
+ function setupPopupColorModeSync(popup) {
196
+ const cleanups = [];
197
+ const update = () => applyPopupColorMode(popup, resolveColorMode());
198
+ update();
199
+ const sourceWindow = window;
200
+ const sourceDocument = sourceWindow.document;
201
+ if (typeof MutationObserver !== "undefined" && sourceDocument) {
202
+ const observer = new MutationObserver(update);
203
+ for (const element of [sourceDocument.documentElement, sourceDocument.body]) {
204
+ if (!element) continue;
205
+ observer.observe(element, {
206
+ attributes: true,
207
+ attributeFilter: [
208
+ "class",
209
+ "data-theme",
210
+ "style"
211
+ ]
212
+ });
213
+ }
214
+ cleanups.push(() => observer.disconnect());
215
+ }
216
+ if (sourceWindow.matchMedia) {
217
+ const darkQuery = sourceWindow.matchMedia("(prefers-color-scheme: dark)");
218
+ const lightQuery = sourceWindow.matchMedia("(prefers-color-scheme: light)");
219
+ darkQuery.addEventListener("change", update);
220
+ lightQuery.addEventListener("change", update);
221
+ cleanups.push(() => {
222
+ darkQuery.removeEventListener("change", update);
223
+ lightQuery.removeEventListener("change", update);
224
+ });
225
+ }
226
+ return () => {
227
+ cleanups.forEach((fn) => fn());
228
+ };
229
+ }
230
+ function unmountPopupElement() {
231
+ popupDockElement?.remove();
232
+ popupDockElement = void 0;
233
+ }
234
+ function clearPopupState() {
235
+ clearListeners();
236
+ unmountPopupElement();
237
+ popupWindow.value = null;
238
+ isPopupOpen.value = false;
239
+ }
240
+ function clamp(value, min, max) {
241
+ return Math.min(Math.max(value, min), max);
242
+ }
243
+ function syncPanelSizeFromPopup(context, popup) {
244
+ if (window.innerWidth <= 0 || window.innerHeight <= 0) return;
245
+ context.panel.store.width = clamp(Math.round(popup.innerWidth / window.innerWidth * 100), PANEL_MIN_SIZE, PANEL_MAX_SIZE);
246
+ context.panel.store.height = clamp(Math.round(popup.innerHeight / window.innerHeight * 100), PANEL_MIN_SIZE, PANEL_MAX_SIZE);
247
+ }
248
+ async function mountStandaloneApp(context, popup) {
249
+ const DockStandaloneElement = await loadDockStandalone();
250
+ const baseStyle = popup.document.createElement("style");
251
+ baseStyle.textContent = [
252
+ "html, body {",
253
+ " margin: 0;",
254
+ " padding: 0;",
255
+ " width: 100%;",
256
+ " height: 100%;",
257
+ " overflow: hidden;",
258
+ " background: transparent;",
259
+ "}",
260
+ "#vite-devtools-popup-root {",
261
+ " width: 100vw;",
262
+ " height: 100vh;",
263
+ "}",
264
+ "#vite-devtools-popup-root > vite-devtools-dock-standalone {",
265
+ " display: block;",
266
+ " width: 100%;",
267
+ " height: 100%;",
268
+ "}"
269
+ ].join("\n");
270
+ popup.document.title = "Vite DevTools";
271
+ popup.document.head?.appendChild(baseStyle);
272
+ popup.document.body.textContent = "";
273
+ const appRoot = popup.document.createElement("div");
274
+ appRoot.id = "vite-devtools-popup-root";
275
+ popup.document.body.appendChild(appRoot);
276
+ const dockElement = new DockStandaloneElement({ context });
277
+ popupDockElement = dockElement;
278
+ appRoot.appendChild(dockElement);
279
+ }
280
+ function isDockPopupSupported() {
281
+ return !!getDocumentPictureInPicture()?.requestWindow;
282
+ }
283
+ function registerMainFrameDockActionHandler(clientType, handler) {
284
+ if (typeof window === "undefined") return;
285
+ if (clientType === "standalone") return;
286
+ window[MAIN_FRAME_ACTION_HANDLER_KEY] = handler;
287
+ }
288
+ async function triggerMainFrameDockAction(clientType, entryId) {
289
+ if (typeof window === "undefined") return void 0;
290
+ if (clientType !== "standalone") return void 0;
291
+ try {
292
+ const opener = window.opener;
293
+ if (!opener || opener.closed) return void 0;
294
+ const handler = opener[MAIN_FRAME_ACTION_HANDLER_KEY];
295
+ if (typeof handler !== "function") return void 0;
296
+ return await handler(entryId);
297
+ } catch {
298
+ return;
299
+ }
300
+ }
301
+ function isDockPopupEntryVisible(clientType) {
302
+ return isDockPopupSupported() && !isPopupOpen.value && clientType !== "standalone";
303
+ }
304
+ function filterPopupDockEntry(groups) {
305
+ return groups.map(([category, entries]) => [category, entries.filter((entry) => entry.id !== POPUP_DOCK_ID)]).filter(([, entries]) => entries.length > 0);
306
+ }
307
+ function useIsDockPopupOpen() {
308
+ return isPopupOpen;
309
+ }
310
+ function requestDockPopupOpen(context) {
311
+ popupEvents.emit("popup:open-requested", context);
312
+ }
313
+ function closeDockPopup() {
314
+ const popup = popupWindow.value;
315
+ clearPopupState();
316
+ if (!popup || popup.closed) return;
317
+ popup.close();
318
+ }
319
+ async function openDockPopup(context) {
320
+ setDocksOverflowPanel(null);
321
+ const currentPopup = popupWindow.value;
322
+ if (currentPopup?.closed) clearPopupState();
323
+ else if (currentPopup) {
324
+ currentPopup.focus();
325
+ return currentPopup;
326
+ }
327
+ const documentPictureInPicture = getDocumentPictureInPicture();
328
+ if (!documentPictureInPicture?.requestWindow) return null;
329
+ let openedPopup;
330
+ try {
331
+ const popup = openedPopup = await documentPictureInPicture.requestWindow({
332
+ width: Math.max(POPUP_MIN_WIDTH, Math.round(window.innerWidth * context.panel.store.width / 100)),
333
+ height: Math.max(POPUP_MIN_HEIGHT, Math.round(window.innerHeight * context.panel.store.height / 100))
334
+ });
335
+ await mountStandaloneApp(context, popup);
336
+ detachColorModeSync = setupPopupColorModeSync(popup);
337
+ const onResize = () => syncPanelSizeFromPopup(context, popup);
338
+ const onPageHide = () => {
339
+ if (popupWindow.value !== popup) return;
340
+ clearPopupState();
341
+ };
342
+ popup.addEventListener("resize", onResize);
343
+ popup.addEventListener("pagehide", onPageHide);
344
+ detachPopupListeners = () => {
345
+ popup.removeEventListener("resize", onResize);
346
+ popup.removeEventListener("pagehide", onPageHide);
347
+ };
348
+ popupWindow.value = popup;
349
+ isPopupOpen.value = true;
350
+ return popup;
351
+ } catch {
352
+ if (openedPopup && !openedPopup.closed) openedPopup.close();
353
+ clearPopupState();
354
+ return null;
355
+ }
356
+ }
357
+ //#endregion
358
+ export { useDocksEntries as _, requestDockPopupOpen as a, BUILTIN_ENTRIES as b, setDockContextMenu as c, useDockContextMenu as d, useDocksOverflowPanel as f, sharedStateToRef as g, createDockEntryState as h, registerMainFrameDockActionHandler as i, setDocksOverflowPanel as l, DEFAULT_DOCK_PANEL_STORE as m, filterPopupDockEntry as n, triggerMainFrameDockAction as o, useFloatingTooltip as p, isDockPopupEntryVisible as r, useIsDockPopupOpen as s, closeDockPopup as t, setFloatingTooltip as u, docksGroupByCategories as v, BUILTIN_ENTRY_CLIENT_AUTH_NOTICE as x, docksSplitGroupsWithCapacity as y };
@@ -0,0 +1,6 @@
1
+ //#region src/node/utils.ts
2
+ function isObject(value) {
3
+ return Object.prototype.toString.call(value) === "[object Object]";
4
+ }
5
+ //#endregion
6
+ export { isObject as t };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vitejs/devtools",
3
3
  "type": "module",
4
- "version": "0.0.0-alpha.8",
4
+ "version": "0.1.0",
5
5
  "description": "Vite DevTools",
6
6
  "author": "VoidZero Inc.",
7
7
  "license": "MIT",
@@ -14,6 +14,7 @@
14
14
  "bugs": "https://github.com/vitejs/devtools/issues",
15
15
  "keywords": [
16
16
  "vite",
17
+ "vite-plugin",
17
18
  "devtools",
18
19
  "rpc"
19
20
  ],
@@ -21,13 +22,13 @@
21
22
  "exports": {
22
23
  ".": "./dist/index.js",
23
24
  "./cli": "./dist/cli.js",
25
+ "./cli-commands": "./dist/cli-commands.js",
24
26
  "./client/inject": "./dist/client/inject.js",
25
27
  "./client/webcomponents": "./dist/client/webcomponents.js",
28
+ "./config": "./dist/config.js",
26
29
  "./dirs": "./dist/dirs.js",
27
30
  "./package.json": "./package.json"
28
31
  },
29
- "main": "./dist/index.js",
30
- "module": "./dist/index.js",
31
32
  "types": "./dist/index.d.ts",
32
33
  "bin": {
33
34
  "vite-devtools": "./bin.js"
@@ -37,31 +38,59 @@
37
38
  "dist"
38
39
  ],
39
40
  "peerDependencies": {
40
- "vite": "npm:rolldown-vite@^7.1.20"
41
+ "vite": "*"
41
42
  },
42
43
  "dependencies": {
43
- "cac": "^6.7.14",
44
- "debug": "^4.4.3",
45
- "launch-editor": "^2.12.0",
46
- "mlly": "^1.8.0",
47
- "open": "^10.2.0",
44
+ "birpc": "^4.0.0",
45
+ "cac": "^7.0.0",
46
+ "h3": "^1.15.6",
47
+ "immer": "^11.1.4",
48
+ "launch-editor": "^2.13.1",
49
+ "mlly": "^1.8.1",
50
+ "obug": "^2.1.1",
51
+ "open": "^11.0.0",
48
52
  "pathe": "^2.0.3",
53
+ "perfect-debounce": "^2.1.0",
49
54
  "sirv": "^3.0.2",
50
- "ws": "^8.18.3",
51
- "@vitejs/devtools-kit": "0.0.0-alpha.8",
52
- "@vitejs/devtools-rpc": "0.0.0-alpha.8",
53
- "@vitejs/devtools-vite": "0.0.0-alpha.8"
55
+ "tinyexec": "^1.0.2",
56
+ "ws": "^8.19.0",
57
+ "@vitejs/devtools-kit": "0.1.0",
58
+ "@vitejs/devtools-rpc": "0.1.0",
59
+ "@vitejs/devtools-rolldown": "0.1.0"
54
60
  },
55
61
  "devDependencies": {
56
- "@vitejs/plugin-vue": "^6.0.1",
57
- "tsdown": "^0.15.12",
62
+ "@clack/prompts": "^1.1.0",
63
+ "@vitejs/plugin-vue": "^6.0.5",
64
+ "@xterm/addon-fit": "^0.11.0",
65
+ "@xterm/xterm": "^6.0.0",
66
+ "dompurify": "^3.3.3",
67
+ "tsdown": "^0.21.2",
58
68
  "typescript": "^5.9.3",
59
- "unplugin-vue": "^7.0.4",
60
- "vite": "npm:rolldown-vite@^7.1.20",
61
- "vue": "^3.5.22",
62
- "vue-tsc": "^3.1.2",
63
- "@vitejs/devtools": "0.0.0-alpha.8",
64
- "@vitejs/devtools-vite": "0.0.0-alpha.8"
69
+ "unplugin-vue": "^7.1.1",
70
+ "unplugin-vue-router": "^0.19.2",
71
+ "vite": "^8.0.0",
72
+ "vue": "^3.5.30",
73
+ "vue-router": "^5.0.3",
74
+ "vue-tsc": "^3.2.5",
75
+ "@vitejs/devtools-rolldown": "0.1.0"
76
+ },
77
+ "inlinedDependencies": {
78
+ "@vue/shared": "3.5.30",
79
+ "@vue/reactivity": "3.5.30",
80
+ "@vue/runtime-core": "3.5.30",
81
+ "csstype": "3.2.3",
82
+ "@vue/runtime-dom": "3.5.30",
83
+ "vue": "3.5.30",
84
+ "dompurify": "3.3.3",
85
+ "@xterm/addon-fit": "0.11.0",
86
+ "@xterm/xterm": "6.0.0",
87
+ "@vueuse/shared": "14.2.1",
88
+ "@vueuse/core": "14.2.1",
89
+ "sisteransi": "1.0.5",
90
+ "@clack/core": "1.1.0",
91
+ "@clack/prompts": "1.1.0",
92
+ "ansis": "4.2.0",
93
+ "get-port-please": "3.2.0"
65
94
  },
66
95
  "scripts": {
67
96
  "build": "pnpm build:js && pnpm build:standalone",
@@ -70,6 +99,7 @@
70
99
  "watch": "tsdown --watch --config-loader=tsx",
71
100
  "dev:standalone": "cd src/client/standalone && vite dev",
72
101
  "play": "DEBUG='vite:devtools:*' pnpm -C playground run dev",
102
+ "play:standalone": "DEBUG='vite:devtools:*' pnpm -C playground run dev:standalone",
73
103
  "cli": "DEBUG='vite:devtools:*' tsx src/node/cli.ts",
74
104
  "play:build": "pnpm -C playground run build"
75
105
  }
@@ -1 +0,0 @@
1
- *,:before,:after{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:before,:after{--un-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}html,body,#app{height:100%;margin:0;padding:0}html.dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:root{--un-text-opacity:100%}.vite-devtools-resize-handle-horizontal{cursor:ns-resize;border-radius:.375rem;height:10px;margin-top:-5px;margin-bottom:-5px;position:absolute;left:6px;right:6px}.vite-devtools-resize-handle-vertical{cursor:ew-resize;border-radius:.375rem;width:10px;margin-left:-5px;margin-right:-5px;position:absolute;top:6px;bottom:0}.vite-devtools-resize-handle-corner{border-radius:.375rem;width:14px;height:14px;margin:-6px;position:absolute}.vite-devtools-resize-handle{z-index:2147483645}.vite-devtools-resize-handle:hover{background-color:#9ca3af1a}#vite-devtools-anchor{z-index:2147483645;box-sizing:border-box;transform-origin:50%;width:0;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:15px;position:fixed;transform:translate(-50%,-50%)rotate(0)}#vite-devtools-anchor #vite-devtools-dock-container{width:max-content;min-width:100px;height:44px;position:absolute;top:0;left:0;transform:translate(-50%,-50%)}#vite-devtools-anchor.vite-devtools-vertical #vite-devtools-dock-container{transition:all .6s,max-width .6s,padding .5s,transform .4s,opacity .2s;transform:translate(-50%,-50%)rotate(90deg)}#vite-devtools-anchor #vite-devtools-dock{touch-action:none;-webkit-user-select:none;user-select:none;--vdt-border-opacity:.13;border-width:1px;border-color:rgb(136 136 136/var(--vdt-border-opacity));--vdt-backdrop-blur:blur(5px);min-width:100%;height:100%;-webkit-backdrop-filter:var(--vdt-backdrop-blur)var(--vdt-backdrop-brightness)var(--vdt-backdrop-contrast)var(--vdt-backdrop-grayscale)var(--vdt-backdrop-hue-rotate)var(--vdt-backdrop-invert)var(--vdt-backdrop-opacity)var(--vdt-backdrop-saturate)var(--vdt-backdrop-sepia);backdrop-filter:var(--vdt-backdrop-blur)var(--vdt-backdrop-brightness)var(--vdt-backdrop-contrast)var(--vdt-backdrop-grayscale)var(--vdt-backdrop-hue-rotate)var(--vdt-backdrop-invert)var(--vdt-backdrop-opacity)var(--vdt-backdrop-saturate)var(--vdt-backdrop-sepia);--vdt-text-opacity:1;color:rgb(255 255 255/var(--vdt-text-opacity));--vdt-shadow:var(--vdt-shadow-inset)0 1px 3px 0 var(--vdt-shadow-color,#0000001a),var(--vdt-shadow-inset)0 1px 2px -1px var(--vdt-shadow-color,#0000001a);box-shadow:var(--vdt-ring-offset-shadow),var(--vdt-ring-shadow),var(--vdt-shadow);background-color:#ffffffbf;border-radius:9999px;padding-left:1rem;padding-right:1rem;transition:all .6s,max-width .6s,padding .5s,transform .4s,opacity .2s}@media (prefers-color-scheme:dark){#vite-devtools-anchor #vite-devtools-dock{background-color:#111111bf}}#vite-devtools-anchor.vite-devtools-minimized #vite-devtools-dock{width:52px;height:8px;padding:2px 0}#vite-devtools-anchor:hover #vite-devtools-glowing{opacity:.6}#vite-devtools-anchor #vite-devtools-glowing{pointer-events:none;z-index:-1;opacity:0;--vdt-blur:blur(60px);width:160px;height:160px;filter:var(--vdt-blur)var(--vdt-brightness)var(--vdt-contrast)var(--vdt-drop-shadow)var(--vdt-grayscale)var(--vdt-hue-rotate)var(--vdt-invert)var(--vdt-saturate)var(--vdt-sepia);background-image:linear-gradient(45deg,#61d9ff,#7a23a1,#715ebd);border-radius:9999px;transition-property:all;transition-duration:1s;transition-timing-function:cubic-bezier(0,0,.2,1);position:absolute;top:0;left:0;transform:translate(-50%,-50%)}@media print{#vite-devtools-anchor{display:none}}.vite-devtools-dock-label{--vdt-translate-x:-50%;transform:translateX(var(--vdt-translate-x))translateY(var(--vdt-translate-y))translateZ(var(--vdt-translate-z))rotate(var(--vdt-rotate))rotateX(var(--vdt-rotate-x))rotateY(var(--vdt-rotate-y))rotateZ(var(--vdt-rotate-z))skewX(var(--vdt-skew-x))skewY(var(--vdt-skew-y))scaleX(var(--vdt-scale-x))scaleY(var(--vdt-scale-y))scaleZ(var(--vdt-scale-z));bottom:-1.75rem;left:50%}.vite-devtools-vertical .vite-devtools-dock-label{--vdt-rotate-x:0;--vdt-rotate-y:0;--vdt-rotate-z:0;--vdt-rotate:270deg;transform:translateX(var(--vdt-translate-x))translateY(var(--vdt-translate-y))translateZ(var(--vdt-translate-z))rotate(var(--vdt-rotate))rotateX(var(--vdt-rotate-x))rotateY(var(--vdt-rotate-y))rotateZ(var(--vdt-rotate-z))skewX(var(--vdt-skew-x))skewY(var(--vdt-skew-y))scaleX(var(--vdt-scale-x))scaleY(var(--vdt-scale-y))scaleZ(var(--vdt-scale-z));bottom:-2.5rem}*,:before,:after,::backdrop{--vdt-rotate:0;--vdt-rotate-x:0;--vdt-rotate-y:0;--vdt-rotate-z:0;--vdt-scale-x:1;--vdt-scale-y:1;--vdt-scale-z:1;--vdt-skew-x:0;--vdt-skew-y:0;--vdt-translate-x:0;--vdt-translate-y:0;--vdt-translate-z:0;--vdt-pan-x: ;--vdt-pan-y: ;--vdt-pinch-zoom: ;--vdt-scroll-snap-strictness:proximity;--vdt-ordinal: ;--vdt-slashed-zero: ;--vdt-numeric-figure: ;--vdt-numeric-spacing: ;--vdt-numeric-fraction: ;--vdt-border-spacing-x:0;--vdt-border-spacing-y:0;--vdt-ring-offset-shadow:0 0 #0000;--vdt-ring-shadow:0 0 #0000;--vdt-shadow-inset: ;--vdt-shadow:0 0 #0000;--vdt-ring-inset: ;--vdt-ring-offset-width:0px;--vdt-ring-offset-color:#fff;--vdt-ring-width:0px;--vdt-ring-color:#93c5fd80;--vdt-blur: ;--vdt-brightness: ;--vdt-contrast: ;--vdt-drop-shadow: ;--vdt-grayscale: ;--vdt-hue-rotate: ;--vdt-invert: ;--vdt-saturate: ;--vdt-sepia: ;--vdt-backdrop-blur: ;--vdt-backdrop-brightness: ;--vdt-backdrop-contrast: ;--vdt-backdrop-grayscale: ;--vdt-backdrop-hue-rotate: ;--vdt-backdrop-invert: ;--vdt-backdrop-opacity: ;--vdt-backdrop-saturate: ;--vdt-backdrop-sepia: }.border-base{--vdt-border-opacity:.13;border-color:rgb(136 136 136/var(--vdt-border-opacity))}.bg-glass{--vdt-backdrop-blur:blur(5px);-webkit-backdrop-filter:var(--vdt-backdrop-blur)var(--vdt-backdrop-brightness)var(--vdt-backdrop-contrast)var(--vdt-backdrop-grayscale)var(--vdt-backdrop-hue-rotate)var(--vdt-backdrop-invert)var(--vdt-backdrop-opacity)var(--vdt-backdrop-saturate)var(--vdt-backdrop-sepia);backdrop-filter:var(--vdt-backdrop-blur)var(--vdt-backdrop-brightness)var(--vdt-backdrop-contrast)var(--vdt-backdrop-grayscale)var(--vdt-backdrop-hue-rotate)var(--vdt-backdrop-invert)var(--vdt-backdrop-opacity)var(--vdt-backdrop-saturate)var(--vdt-backdrop-sepia);background-color:#ffffffbf}@media (prefers-color-scheme:dark){.bg-glass{background-color:#111111bf}}.absolute{position:absolute}.relative{position:relative}.z--1{z-index:-1}.z-10{z-index:10}.h-5{height:1.25rem}.h-full{height:100%}.w-5{width:1.25rem}.w-full{width:100%}.w-max{width:max-content}.flex{display:flex}.rotate-270{--vdt-rotate-x:0;--vdt-rotate-y:0;--vdt-rotate-z:0;--vdt-rotate:270deg;transform:translateX(var(--vdt-translate-x))translateY(var(--vdt-translate-y))translateZ(var(--vdt-translate-z))rotate(var(--vdt-rotate))rotateX(var(--vdt-rotate-x))rotateY(var(--vdt-rotate-y))rotateZ(var(--vdt-rotate-z))skewX(var(--vdt-skew-x))skewY(var(--vdt-skew-y))scaleX(var(--vdt-scale-x))scaleY(var(--vdt-scale-y))scaleZ(var(--vdt-scale-z))}.scale-120,.hover\:scale-120:hover{--vdt-scale-x:1.2;--vdt-scale-y:1.2;transform:translateX(var(--vdt-translate-x))translateY(var(--vdt-translate-y))translateZ(var(--vdt-translate-z))rotate(var(--vdt-rotate))rotateX(var(--vdt-rotate-x))rotateY(var(--vdt-rotate-y))rotateZ(var(--vdt-rotate-z))skewX(var(--vdt-skew-x))skewY(var(--vdt-skew-y))scaleX(var(--vdt-scale-x))scaleY(var(--vdt-scale-y))scaleZ(var(--vdt-scale-z))}.transform{transform:translateX(var(--vdt-translate-x))translateY(var(--vdt-translate-y))translateZ(var(--vdt-translate-z))rotate(var(--vdt-rotate))rotateX(var(--vdt-rotate-x))rotateY(var(--vdt-rotate-y))rotateZ(var(--vdt-rotate-z))skewX(var(--vdt-skew-x))skewY(var(--vdt-skew-y))scaleX(var(--vdt-scale-x))scaleY(var(--vdt-scale-y))scaleZ(var(--vdt-scale-z))}.select-none{-webkit-user-select:none;user-select:none}.resize{resize:both}.items-center{align-items:center}.justify-center{justify-content:center}.border{border-width:1px}.rounded{border-radius:.25rem}.rounded-xl{border-radius:.75rem}.hover\:bg-\[\#8881\]:hover{--vdt-bg-opacity:.07;background-color:rgb(136 136 136/var(--vdt-bg-opacity))}.p1{padding:.25rem}.p1\.5{padding:.375rem}.px{padding-left:1rem;padding-right:1rem}.px2{padding-left:.5rem;padding-right:.5rem}.text-xs{font-size:.75rem;line-height:1rem}.font-sans{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.op50{opacity:.5}.opacity-0{opacity:0}.opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.saturate-0{--vdt-saturate:saturate(0);filter:var(--vdt-blur)var(--vdt-brightness)var(--vdt-contrast)var(--vdt-drop-shadow)var(--vdt-grayscale)var(--vdt-hue-rotate)var(--vdt-invert)var(--vdt-saturate)var(--vdt-sepia)}.transition-all{transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-property:opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-300{transition-duration:.3s}@media (prefers-color-scheme:dark){.dark\:bg-hex-121212{--vdt-bg-opacity:1;background-color:rgb(18 18 18/var(--vdt-bg-opacity))}.dark\:text-white{--vdt-text-opacity:1;color:rgb(255 255 255/var(--vdt-text-opacity))}}