tokmon 0.22.6 → 0.23.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 (57) hide show
  1. package/README.md +5 -5
  2. package/dist/{bootstrap-ink-CHJWH5XC.js → bootstrap-ink-UD3KDTOB.js} +1113 -934
  3. package/dist/{chunk-FO7IUYCM.js → chunk-AON6GE7D.js} +368 -280
  4. package/dist/{chunk-QTHCHB7S.js → chunk-DJPUYMZM.js} +52 -18
  5. package/dist/chunk-HV6AYQDB.js +192 -0
  6. package/dist/chunk-HXDAOOSI.js +154 -0
  7. package/dist/{chunk-AQNFQRWV.js → chunk-PGQK7MOE.js} +2583 -1711
  8. package/dist/cli.js +93 -54
  9. package/dist/{config-64N7KBZ7.js → config-5CNJN3P7.js} +1 -1
  10. package/dist/daemon-AW3YHFSJ.js +193 -0
  11. package/dist/daemon-handle-EYAXNNKZ.js +126 -0
  12. package/dist/server-4CDZMLH6.js +10 -0
  13. package/dist/web/assets/Area-DGo9K-U3.js +2 -0
  14. package/dist/web/assets/analytics-BOhbhV5Z.js +2 -0
  15. package/dist/web/assets/breakdown-CO04nSN-.js +4 -0
  16. package/dist/web/assets/chart-bNxdfXxA.js +69 -0
  17. package/dist/web/assets/explore-sZnmjzAj.js +22 -0
  18. package/dist/web/assets/index-DSj-Bxov.css +1 -0
  19. package/dist/web/assets/index-DnDr1VUr.js +83 -0
  20. package/dist/web/assets/models-Cl6D8VVF.js +2 -0
  21. package/dist/web/assets/overview-C18nvaAK.js +2 -0
  22. package/dist/web/assets/panel-DTjMnHaz.js +1 -0
  23. package/dist/web/assets/primitives-Dj_9YxTF.js +1 -0
  24. package/dist/web/assets/settings-sheet-0BGb5Ahv.js +1 -0
  25. package/dist/web/assets/share-sheet-BHtt-OmT.js +2 -0
  26. package/dist/web/assets/timeline-DmzB8Z3W.js +1 -0
  27. package/dist/web/assets/use-dialog-trap-DeXFtxx8.js +1 -0
  28. package/dist/web/index.html +3 -2
  29. package/package.json +10 -6
  30. package/dist/daemon-ATXHNYTK.js +0 -213
  31. package/dist/daemon-handle-HLSKLMWU.js +0 -142
  32. package/dist/server-56C7MMEZ.js +0 -9
  33. package/dist/web/assets/breakdown-Bj0BAVYf.js +0 -4
  34. package/dist/web/assets/index-BCaPGYQA.css +0 -1
  35. package/dist/web/assets/index-Dziiggw_.js +0 -173
  36. package/dist/web/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  37. package/dist/web/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  38. package/dist/web/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
  39. package/dist/web/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2 +0 -0
  40. package/dist/web/assets/jetbrains-mono-cyrillic-700-normal-BWTpRfYl.woff2 +0 -0
  41. package/dist/web/assets/jetbrains-mono-cyrillic-700-normal-CEoEElIJ.woff +0 -0
  42. package/dist/web/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  43. package/dist/web/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  44. package/dist/web/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
  45. package/dist/web/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2 +0 -0
  46. package/dist/web/assets/jetbrains-mono-greek-700-normal-C6CZE3T8.woff2 +0 -0
  47. package/dist/web/assets/jetbrains-mono-greek-700-normal-DEigVDxa.woff +0 -0
  48. package/dist/web/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  49. package/dist/web/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  50. package/dist/web/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2 +0 -0
  51. package/dist/web/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
  52. package/dist/web/assets/jetbrains-mono-latin-ext-700-normal-CZipNAKV.woff2 +0 -0
  53. package/dist/web/assets/jetbrains-mono-latin-ext-700-normal-CxPITLHs.woff +0 -0
  54. package/dist/web/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  55. package/dist/web/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
  56. package/dist/web/assets/jetbrains-mono-vietnamese-700-normal-BDLVIk2r.woff +0 -0
  57. package/dist/web/assets/timeline-BQpqTU-a.js +0 -1
package/dist/cli.js CHANGED
@@ -2,8 +2,20 @@
2
2
 
3
3
  // src/cli.tsx
4
4
  import { EventEmitter } from "events";
5
- process.on("unhandledRejection", () => {
6
- });
5
+ function describeError(error) {
6
+ if (error instanceof Error) return error.message || error.name;
7
+ if (typeof error === "string") return error;
8
+ try {
9
+ return JSON.stringify(error) ?? String(error);
10
+ } catch {
11
+ return String(error);
12
+ }
13
+ }
14
+ function reportFatalError(context, error) {
15
+ console.error(`tokmon: ${context}: ${describeError(error)}`);
16
+ if (error instanceof Error && error.stack && error.stack !== error.message) console.error(error.stack);
17
+ process.exitCode = 1;
18
+ }
7
19
  EventEmitter.defaultMaxListeners = 100;
8
20
  var emitWarning = process.emitWarning.bind(process);
9
21
  process.emitWarning = ((warning, ...rest) => {
@@ -13,60 +25,87 @@ process.emitWarning = ((warning, ...rest) => {
13
25
  });
14
26
  var args = process.argv.slice(2);
15
27
  var subcommand = args[0]?.toLowerCase();
16
- if (subcommand === "__daemon") {
17
- const { runDaemon } = await import("./daemon-ATXHNYTK.js");
18
- await runDaemon(args.slice(1), { foreground: false });
19
- process.exit(typeof process.exitCode === "number" ? process.exitCode : 0);
28
+ function parsePort(value) {
29
+ const port = value === void 0 ? Number.NaN : Number(value);
30
+ if (!Number.isInteger(port) || port < 0 || port > 65535) {
31
+ throw new Error("--port must be an integer between 0 and 65535");
32
+ }
33
+ return port;
20
34
  }
21
- if (subcommand === "serve" || subcommand === "web") {
22
- const { runDaemon } = await import("./daemon-ATXHNYTK.js");
23
- await runDaemon(args.slice(1), { foreground: true });
24
- process.exit(typeof process.exitCode === "number" ? process.exitCode : 0);
35
+ function validateServeArgs(serveArgs) {
36
+ for (let i = 0; i < serveArgs.length; i++) {
37
+ const arg = serveArgs[i];
38
+ if (arg === "--port" || arg === "-p") parsePort(serveArgs[++i]);
39
+ else if (arg.startsWith("--port=")) parsePort(arg.slice("--port=".length));
40
+ }
25
41
  }
26
- var interval;
27
- var asciiFlag = null;
28
- for (let i = 0; i < args.length; i++) {
29
- if ((args[i] === "--interval" || args[i] === "-i") && args[i + 1]) {
30
- interval = Math.max(500, Number(args[i + 1]) * 1e3);
31
- i++;
42
+ async function main() {
43
+ if (subcommand === "__daemon") {
44
+ const { runDaemon } = await import("./daemon-AW3YHFSJ.js");
45
+ await runDaemon(args.slice(1), { foreground: false });
46
+ process.exitCode ??= 0;
47
+ return;
32
48
  }
33
- if (args[i] === "--ascii") asciiFlag = "on";
34
- if (args[i] === "--no-ascii") asciiFlag = "off";
35
- if (args[i] === "--help" || args[i] === "-h") {
36
- console.log("tokmon - Terminal usage dashboard for your AI coding tools\n");
37
- console.log(" Claude \xB7 Codex \xB7 Cursor \xB7 Copilot \xB7 opencode \xB7 pi \xB7 Antigravity \xB7 Gemini\n");
38
- console.log("Usage: tokmon [options]");
39
- console.log(" tokmon serve [--port <n>] [--no-open] Launch the web dashboard\n");
40
- console.log("Options:");
41
- console.log(" -i, --interval <seconds> Refresh interval (default: from config or 2)");
42
- console.log(" --ascii Force ASCII glyphs (also: TOKMON_ASCII=1)");
43
- console.log(" --no-ascii Force Unicode glyphs");
44
- console.log(" -h, --help Show this help\n");
45
- console.log("Keybindings:");
46
- console.log(" Tab Switch Dashboard / Table");
47
- console.log(" p / P Cycle table provider");
48
- console.log(" a / A Cycle account focus");
49
- console.log(" 0-9 Jump to account focus");
50
- console.log(" \u2191\u2193 Scroll table");
51
- console.log(" w / W Toggle web dashboard");
52
- console.log(" s Settings");
53
- console.log(" q Quit");
54
- process.exit(0);
49
+ if (subcommand === "serve" || subcommand === "web") {
50
+ validateServeArgs(args.slice(1));
51
+ const { runDaemon } = await import("./daemon-AW3YHFSJ.js");
52
+ await runDaemon(args.slice(1), { foreground: true });
53
+ process.exitCode ??= 0;
54
+ return;
55
55
  }
56
+ let interval;
57
+ let asciiFlag = null;
58
+ for (let i = 0; i < args.length; i++) {
59
+ if (args[i] === "--interval" || args[i] === "-i") {
60
+ const seconds = Number(args[i + 1]);
61
+ if (!Number.isFinite(seconds) || seconds <= 0) {
62
+ throw new Error("--interval must be a positive number of seconds");
63
+ }
64
+ interval = Math.max(500, seconds * 1e3);
65
+ i++;
66
+ }
67
+ if (args[i] === "--ascii") asciiFlag = "on";
68
+ if (args[i] === "--no-ascii") asciiFlag = "off";
69
+ if (args[i] === "--help" || args[i] === "-h") {
70
+ console.log("tokmon - Terminal usage dashboard for your AI coding tools\n");
71
+ console.log(" Claude \xB7 Codex \xB7 Cursor \xB7 Copilot \xB7 opencode \xB7 pi \xB7 Antigravity \xB7 Gemini \xB7 Grok\n");
72
+ console.log("Usage: tokmon [options]");
73
+ console.log(" tokmon serve [--port <n>] [--no-open] Launch the web dashboard\n");
74
+ console.log("Options:");
75
+ console.log(" -i, --interval <seconds> Refresh interval (default: from config or 2)");
76
+ console.log(" --ascii Force ASCII glyphs (also: TOKMON_ASCII=1)");
77
+ console.log(" --no-ascii Force Unicode glyphs");
78
+ console.log(" -h, --help Show this help\n");
79
+ console.log("Keybindings:");
80
+ console.log(" Tab Switch Dashboard / Table");
81
+ console.log(" p / P Cycle table provider");
82
+ console.log(" a / A Cycle account focus");
83
+ console.log(" 0-9 Jump to account focus");
84
+ console.log(" \u2191\u2193 Scroll table");
85
+ console.log(" w / W Toggle web dashboard");
86
+ console.log(" r / R Refresh all data");
87
+ console.log(" s Settings");
88
+ console.log(" q Quit");
89
+ process.exitCode = 0;
90
+ return;
91
+ }
92
+ }
93
+ const { loadConfig } = await import("./config-5CNJN3P7.js");
94
+ const { resolveGlyphs, setGlyphs } = await import("./glyphs-NKCSZLGO.js");
95
+ const { attachOrSpawn } = await import("./daemon-handle-EYAXNNKZ.js");
96
+ const config = await loadConfig();
97
+ setGlyphs(resolveGlyphs({
98
+ flag: asciiFlag,
99
+ env: process.env,
100
+ config: config.ascii,
101
+ isTTY: !!process.stdout.isTTY,
102
+ platform: process.platform
103
+ }));
104
+ const daemon = await attachOrSpawn();
105
+ const mode = daemon.kind === "spawned" ? "connected" : "degraded";
106
+ const { bootstrapInk } = await import("./bootstrap-ink-UD3KDTOB.js");
107
+ await bootstrapInk({ interval, config, daemon, mode });
56
108
  }
57
- var { loadConfig } = await import("./config-64N7KBZ7.js");
58
- var { resolveGlyphs, setGlyphs } = await import("./glyphs-NKCSZLGO.js");
59
- var { attachOrSpawn } = await import("./daemon-handle-HLSKLMWU.js");
60
- var config = await loadConfig();
61
- var isTTY = process.stdout.isTTY === true;
62
- setGlyphs(resolveGlyphs({
63
- flag: asciiFlag,
64
- env: process.env,
65
- config: config.ascii,
66
- isTTY: !!process.stdout.isTTY,
67
- platform: process.platform
68
- }));
69
- var daemon = await attachOrSpawn();
70
- var mode = daemon.kind === "spawned" ? "connected" : "degraded";
71
- var { bootstrapInk } = await import("./bootstrap-ink-CHJWH5XC.js");
72
- await bootstrapInk({ interval, config, daemon, mode });
109
+ void main().catch((error) => {
110
+ reportFatalError("fatal error", error);
111
+ });
@@ -24,7 +24,7 @@ import {
24
24
  saveConfigSync,
25
25
  slugify,
26
26
  snapshotCacheFile
27
- } from "./chunk-QTHCHB7S.js";
27
+ } from "./chunk-DJPUYMZM.js";
28
28
  export {
29
29
  ACCENT_COLORS,
30
30
  COLOR_PALETTE,
@@ -0,0 +1,193 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ startWebServer
4
+ } from "./chunk-AON6GE7D.js";
5
+ import {
6
+ acquireLock,
7
+ isAlive,
8
+ readLock,
9
+ reclaimAbandonedLock,
10
+ reclaimDeadLock,
11
+ unlinkLock,
12
+ verifyLock,
13
+ writeLock
14
+ } from "./chunk-HV6AYQDB.js";
15
+ import {
16
+ appVersion,
17
+ browserUrl,
18
+ openBrowser
19
+ } from "./chunk-HXDAOOSI.js";
20
+ import {
21
+ flushDisk
22
+ } from "./chunk-PGQK7MOE.js";
23
+ import {
24
+ loadConfig
25
+ } from "./chunk-DJPUYMZM.js";
26
+
27
+ // src/web/daemon.ts
28
+ import { randomBytes } from "crypto";
29
+ function parseDaemonArgs(args) {
30
+ let port;
31
+ let open = true;
32
+ let help = false;
33
+ for (let i = 0; i < args.length; i++) {
34
+ const arg = args[i];
35
+ if ((arg === "--port" || arg === "-p") && args[i + 1]) port = Number(args[++i]);
36
+ else if (arg.startsWith("--port=")) port = Number(arg.slice("--port=".length));
37
+ else if (arg === "--no-open") open = false;
38
+ else if (arg === "--help" || arg === "-h") help = true;
39
+ }
40
+ if (port !== void 0 && (!Number.isInteger(port) || port < 0 || port > 65535)) port = void 0;
41
+ return { port, open, help };
42
+ }
43
+ var SERVE_HELP = `tokmon serve - Launch the tokmon web dashboard (local, loopback only)
44
+
45
+ Usage: tokmon serve [options]
46
+
47
+ Options:
48
+ -p, --port <n> Port to listen on (default: 4317, auto-falls back if taken)
49
+ --no-open Don't open the browser automatically
50
+ -h, --help Show this help
51
+ `;
52
+ function handshake(lock) {
53
+ process.stdout.write(JSON.stringify({ ready: 1, url: lock.url, port: lock.port, wsToken: lock.wsToken, version: lock.version }) + "\n");
54
+ }
55
+ function describeExisting(lock, open) {
56
+ const displayUrl = open ? lock.url : browserUrl(lock.url, lock.wsToken);
57
+ process.stdout.write(`
58
+ \u25C6 tokmon web \u2192 ${displayUrl}
59
+ `);
60
+ process.stdout.write(" reusing the live singleton daemon\n\n");
61
+ if (open) {
62
+ openBrowser(lock.url, lock.wsToken);
63
+ process.stdout.write(" opening browser\u2026\n");
64
+ }
65
+ }
66
+ async function runDaemon(args, opts) {
67
+ const { port, open, help } = parseDaemonArgs(args);
68
+ if (help && opts.foreground) {
69
+ process.stdout.write(SERVE_HELP);
70
+ return;
71
+ }
72
+ const version = appVersion();
73
+ let current = readLock();
74
+ if (!current && reclaimAbandonedLock()) current = readLock();
75
+ const live = await verifyLock(current, version);
76
+ if (live) {
77
+ if (opts.foreground) describeExisting(live, open);
78
+ else handshake(live);
79
+ return;
80
+ }
81
+ if (current?.state === "starting" && current.version === version && isAlive(current.pid)) {
82
+ for (let attempt = 0; attempt < 60; attempt++) {
83
+ await new Promise((resolve) => setTimeout(resolve, 50));
84
+ const winner = await verifyLock(readLock(), version, 250);
85
+ if (winner) {
86
+ if (opts.foreground) describeExisting(winner, open);
87
+ else handshake(winner);
88
+ return;
89
+ }
90
+ }
91
+ }
92
+ if (current && isAlive(current.pid)) {
93
+ const message = "tokmon: another daemon owns the lock but could not be verified (version/token mismatch)";
94
+ if (opts.foreground) {
95
+ process.stderr.write(message + "\n");
96
+ process.exitCode = 1;
97
+ }
98
+ return;
99
+ }
100
+ if (current) reclaimDeadLock();
101
+ const ownerId = randomBytes(32).toString("base64url");
102
+ const token = randomBytes(32).toString("base64url");
103
+ const reservation = {
104
+ pid: process.pid,
105
+ port: 0,
106
+ url: "",
107
+ wsToken: token,
108
+ version,
109
+ startedAt: Date.now(),
110
+ ownerId,
111
+ state: "starting"
112
+ };
113
+ if (!acquireLock(reservation)) {
114
+ for (let attempt = 0; attempt < 60; attempt++) {
115
+ await new Promise((resolve) => setTimeout(resolve, 50));
116
+ const winner = await verifyLock(readLock(), version, 250);
117
+ if (winner) {
118
+ if (opts.foreground) describeExisting(winner, open);
119
+ else handshake(winner);
120
+ return;
121
+ }
122
+ }
123
+ if (opts.foreground) {
124
+ process.stderr.write("tokmon: daemon startup is already in progress\n");
125
+ process.exitCode = 1;
126
+ }
127
+ return;
128
+ }
129
+ let controller = null;
130
+ try {
131
+ const config = await loadConfig();
132
+ controller = await startWebServer({ config, port, log: opts.foreground, wsToken: token });
133
+ const ready = {
134
+ ...reservation,
135
+ port: controller.port,
136
+ url: controller.url,
137
+ state: "ready"
138
+ };
139
+ if (!writeLock(ready)) throw new Error("lost daemon lock ownership during startup");
140
+ let shuttingDown = false;
141
+ const shutdown = async (exitCode = 0) => {
142
+ if (shuttingDown) return;
143
+ shuttingDown = true;
144
+ if (opts.foreground) process.stdout.write("\n stopping tokmon web\u2026\n");
145
+ try {
146
+ await controller?.stop();
147
+ } catch {
148
+ }
149
+ await flushDisk().catch(() => {
150
+ });
151
+ unlinkLock(ownerId);
152
+ process.exit(exitCode);
153
+ };
154
+ process.once("exit", () => {
155
+ unlinkLock(ownerId);
156
+ });
157
+ process.once("SIGINT", () => {
158
+ void shutdown(0);
159
+ });
160
+ process.once("SIGTERM", () => {
161
+ void shutdown(0);
162
+ });
163
+ if (opts.foreground) {
164
+ const displayUrl = open ? controller.url : controller.browserUrl;
165
+ process.stdout.write(`
166
+ \u25C6 tokmon web \u2192 ${displayUrl}
167
+ `);
168
+ process.stdout.write(" live dashboard \xB7 Ctrl-C to stop\n\n");
169
+ if (open) {
170
+ openBrowser(controller.url, token);
171
+ process.stdout.write(" opening browser\u2026\n");
172
+ }
173
+ } else {
174
+ handshake(ready);
175
+ }
176
+ await new Promise(() => {
177
+ });
178
+ } catch (error) {
179
+ try {
180
+ await controller?.stop();
181
+ } catch {
182
+ }
183
+ unlinkLock(ownerId);
184
+ const message = `tokmon: failed to start web server: ${error.message}`;
185
+ if (opts.foreground) {
186
+ process.stderr.write(message + "\n");
187
+ process.exitCode = 1;
188
+ }
189
+ }
190
+ }
191
+ export {
192
+ runDaemon
193
+ };
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ readLock,
4
+ verifyLock
5
+ } from "./chunk-HV6AYQDB.js";
6
+ import {
7
+ appVersion,
8
+ browserUrl
9
+ } from "./chunk-HXDAOOSI.js";
10
+ import "./chunk-DJPUYMZM.js";
11
+
12
+ // src/client/daemon-handle.ts
13
+ import { spawn } from "child_process";
14
+ import { extname } from "path";
15
+ var HANDSHAKE_TIMEOUT_MS = process.platform === "win32" ? 15e3 : 1e4;
16
+ function runtimeExecArgv(entry, override) {
17
+ if (override) return override;
18
+ const ext = extname(entry).toLowerCase();
19
+ if (ext !== ".ts" && ext !== ".tsx" && ext !== ".mts" && ext !== ".cts") return [];
20
+ const keepFlags = ["--require", "--import", "--loader"];
21
+ const out = [];
22
+ for (let i = 0; i < process.execArgv.length; i++) {
23
+ const arg = process.execArgv[i];
24
+ if (arg.startsWith("--experimental-")) {
25
+ out.push(arg);
26
+ continue;
27
+ }
28
+ const matched = keepFlags.find((flag) => arg === flag || arg.startsWith(`${flag}=`));
29
+ if (!matched) continue;
30
+ out.push(arg);
31
+ if (arg === matched && i + 1 < process.execArgv.length) out.push(process.execArgv[++i]);
32
+ }
33
+ return out;
34
+ }
35
+ function parseHandshake(line) {
36
+ try {
37
+ const value = JSON.parse(line);
38
+ return value?.ready === 1 && typeof value.url === "string" && typeof value.wsToken === "string" && typeof value.version === "string" ? value : null;
39
+ } catch {
40
+ return null;
41
+ }
42
+ }
43
+ function connected(url, wsToken) {
44
+ return { kind: "spawned", baseUrl: browserUrl(url, wsToken), wsToken, stop: () => {
45
+ } };
46
+ }
47
+ async function attach(opts) {
48
+ const lock = await verifyLock(readLock(opts), appVersion());
49
+ return lock ? connected(lock.url, lock.wsToken) : null;
50
+ }
51
+ async function attachOrSpawn(opts = {}) {
52
+ const existing = await attach(opts);
53
+ if (existing) return existing;
54
+ const entry = opts.entry ?? process.argv[1];
55
+ if (!entry) return degraded();
56
+ const execPath = opts.execPath ?? process.execPath;
57
+ const timeoutMs = opts.timeoutMs ?? HANDSHAKE_TIMEOUT_MS;
58
+ const args = ["__daemon", "--port", "0", "--no-open"];
59
+ const env = opts.cachePath ? { ...process.env, TOKMON_DAEMON_CACHE_DIR: opts.cachePath } : process.env;
60
+ return new Promise((resolve) => {
61
+ let child;
62
+ try {
63
+ child = spawn(execPath, [...runtimeExecArgv(entry, opts.execArgv), entry, ...args], {
64
+ stdio: ["ignore", "pipe", "ignore"],
65
+ detached: process.platform !== "win32",
66
+ env
67
+ });
68
+ } catch {
69
+ resolve(degraded());
70
+ return;
71
+ }
72
+ let settled = false;
73
+ let stdout = "";
74
+ let pollTimer = null;
75
+ const finish = (handle) => {
76
+ if (settled) return;
77
+ settled = true;
78
+ clearTimeout(timer);
79
+ if (pollTimer) clearTimeout(pollTimer);
80
+ child.stdout?.destroy();
81
+ child.unref();
82
+ resolve(handle);
83
+ };
84
+ const tryAttach = (final = false) => {
85
+ void attach(opts).then((found) => {
86
+ if (found) {
87
+ finish(found);
88
+ return;
89
+ }
90
+ if (final) {
91
+ finish(degraded());
92
+ return;
93
+ }
94
+ if (!settled && !pollTimer) {
95
+ pollTimer = setTimeout(() => {
96
+ pollTimer = null;
97
+ tryAttach();
98
+ }, 100);
99
+ }
100
+ });
101
+ };
102
+ const timer = setTimeout(() => tryAttach(true), timeoutMs);
103
+ child.stdout?.setEncoding("utf-8");
104
+ child.stdout?.on("data", (chunk) => {
105
+ stdout += chunk;
106
+ let newline;
107
+ while ((newline = stdout.indexOf("\n")) !== -1) {
108
+ const line = stdout.slice(0, newline).trim();
109
+ stdout = stdout.slice(newline + 1);
110
+ const handshake = parseHandshake(line);
111
+ if (!handshake || handshake.version !== appVersion()) continue;
112
+ tryAttach();
113
+ return;
114
+ }
115
+ });
116
+ child.once("error", () => tryAttach());
117
+ child.once("exit", () => tryAttach());
118
+ });
119
+ }
120
+ function degraded() {
121
+ return { kind: "degraded", baseUrl: null, wsToken: null, stop: () => {
122
+ } };
123
+ }
124
+ export {
125
+ attachOrSpawn
126
+ };
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ startWebServer
4
+ } from "./chunk-AON6GE7D.js";
5
+ import "./chunk-HXDAOOSI.js";
6
+ import "./chunk-PGQK7MOE.js";
7
+ import "./chunk-DJPUYMZM.js";
8
+ export {
9
+ startWebServer
10
+ };
@@ -0,0 +1,2 @@
1
+ import{R as v,r as ht}from"./index-DnDr1VUr.js";import{j as J,c as Q,D as vt,J as jt,W as kt,L as F,d as I,q as G,w as dt,y as N,z as nt,t as U,$ as yt,E as mt,v as Z,F as bt,H as gt,_ as tt,a0 as q,B as V,a1 as Lt}from"./chart-bNxdfXxA.js";var $t=["type","layout","connectNulls","ref"],Nt=["key"];function K(t){"@babel/helpers - typeof";return K=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(r){return typeof r}:function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},K(t)}function lt(t,r){if(t==null)return{};var n=It(t,r),e,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a<o.length;a++)e=o[a],!(r.indexOf(e)>=0)&&Object.prototype.propertyIsEnumerable.call(t,e)&&(n[e]=t[e])}return n}function It(t,r){if(t==null)return{};var n={};for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)){if(r.indexOf(e)>=0)continue;n[e]=t[e]}return n}function Y(){return Y=Object.assign?Object.assign.bind():function(t){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var e in n)Object.prototype.hasOwnProperty.call(n,e)&&(t[e]=n[e])}return t},Y.apply(this,arguments)}function ut(t,r){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(t);r&&(e=e.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),n.push.apply(n,e)}return n}function j(t){for(var r=1;r<arguments.length;r++){var n=arguments[r]!=null?arguments[r]:{};r%2?ut(Object(n),!0).forEach(function(e){$(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ut(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function z(t){return Ct(t)||Tt(t)||Rt(t)||Bt()}function Bt(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
2
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Rt(t,r){if(t){if(typeof t=="string")return at(t,r);var n=Object.prototype.toString.call(t).slice(8,-1);if(n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set")return Array.from(t);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return at(t,r)}}function Tt(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function Ct(t){if(Array.isArray(t))return at(t)}function at(t,r){(r==null||r>t.length)&&(r=t.length);for(var n=0,e=new Array(r);n<r;n++)e[n]=t[n];return e}function Wt(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}function ct(t,r){for(var n=0;n<r.length;n++){var e=r[n];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(t,xt(e.key),e)}}function Ft(t,r,n){return r&&ct(t.prototype,r),n&&ct(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function Mt(t,r,n){return r=et(r),zt(t,At()?Reflect.construct(r,n||[],et(t).constructor):r.apply(t,n))}function zt(t,r){if(r&&(K(r)==="object"||typeof r=="function"))return r;if(r!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Vt(t)}function Vt(t){if(t===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function At(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(At=function(){return!!t})()}function et(t){return et=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},et(t)}function Kt(t,r){if(typeof r!="function"&&r!==null)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(r&&r.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),r&&it(t,r)}function it(t,r){return it=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,a){return e.__proto__=a,e},it(t,r)}function $(t,r,n){return r=xt(r),r in t?Object.defineProperty(t,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[r]=n,t}function xt(t){var r=Ht(t,"string");return K(r)=="symbol"?r:r+""}function Ht(t,r){if(K(t)!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var e=n.call(t,r);if(K(e)!="object")return e;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}var st=(function(t){function r(){var n;Wt(this,r);for(var e=arguments.length,a=new Array(e),o=0;o<e;o++)a[o]=arguments[o];return n=Mt(this,r,[].concat(a)),$(n,"state",{isAnimationFinished:!0,totalLength:0}),$(n,"generateSimpleStrokeDasharray",function(i,s){return"".concat(s,"px ").concat(i-s,"px")}),$(n,"getStrokeDasharray",function(i,s,l){var u=l.reduce(function(x,A){return x+A});if(!u)return n.generateSimpleStrokeDasharray(s,i);for(var f=Math.floor(i/u),c=i%u,p=s-i,d=[],h=0,y=0;h<l.length;y+=l[h],++h)if(y+l[h]>c){d=[].concat(z(l.slice(0,h)),[c-y]);break}var b=d.length%2===0?[0,p]:[p];return[].concat(z(r.repeat(l,f)),z(d),b).map(function(x){return"".concat(x,"px")}).join(", ")}),$(n,"id",bt("recharts-line-")),$(n,"pathRef",function(i){n.mainCurve=i}),$(n,"handleAnimationEnd",function(){n.setState({isAnimationFinished:!0}),n.props.onAnimationEnd&&n.props.onAnimationEnd()}),$(n,"handleAnimationStart",function(){n.setState({isAnimationFinished:!1}),n.props.onAnimationStart&&n.props.onAnimationStart()}),n}return Kt(r,t),Ft(r,[{key:"componentDidMount",value:function(){if(this.props.isAnimationActive){var e=this.getTotalLength();this.setState({totalLength:e})}}},{key:"componentDidUpdate",value:function(){if(this.props.isAnimationActive){var e=this.getTotalLength();e!==this.state.totalLength&&this.setState({totalLength:e})}}},{key:"getTotalLength",value:function(){var e=this.mainCurve;try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch{return 0}}},{key:"renderErrorBar",value:function(e,a){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var o=this.props,i=o.points,s=o.xAxis,l=o.yAxis,u=o.layout,f=o.children,c=jt(f,kt);if(!c)return null;var p=function(y,b){return{x:y.x,y:y.y,value:y.value,errorVal:Z(y.payload,b)}},d={clipPath:e?"url(#clipPath-".concat(a,")"):null};return v.createElement(F,d,c.map(function(h){return v.cloneElement(h,{key:"bar-".concat(h.props.dataKey),data:i,xAxis:s,yAxis:l,layout:u,dataPointFormatter:p})}))}},{key:"renderDots",value:function(e,a,o){var i=this.props.isAnimationActive;if(i&&!this.state.isAnimationFinished)return null;var s=this.props,l=s.dot,u=s.points,f=s.dataKey,c=I(this.props,!1),p=I(l,!0),d=u.map(function(y,b){var x=j(j(j({key:"dot-".concat(b),r:3},c),p),{},{index:b,cx:y.x,cy:y.y,value:y.value,dataKey:f,payload:y.payload,points:u});return r.renderDotItem(l,x)}),h={clipPath:e?"url(#clipPath-".concat(a?"":"dots-").concat(o,")"):null};return v.createElement(F,Y({className:"recharts-line-dots",key:"dots"},h),d)}},{key:"renderCurveStatically",value:function(e,a,o,i){var s=this.props,l=s.type,u=s.layout,f=s.connectNulls;s.ref;var c=lt(s,$t),p=j(j(j({},I(c,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:a?"url(#clipPath-".concat(o,")"):null,points:e},i),{},{type:l,layout:u,connectNulls:f});return v.createElement(G,Y({},p,{pathRef:this.pathRef}))}},{key:"renderCurveWithAnimation",value:function(e,a){var o=this,i=this.props,s=i.points,l=i.strokeDasharray,u=i.isAnimationActive,f=i.animationBegin,c=i.animationDuration,p=i.animationEasing,d=i.animationId,h=i.animateNewValues,y=i.width,b=i.height,x=this.state,A=x.prevPoints,_=x.totalLength;return v.createElement(dt,{begin:f,duration:c,isActive:u,easing:p,from:{t:0},to:{t:1},key:"line-".concat(d),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(g){var m=g.t;if(A){var P=A.length/s.length,w=s.map(function(O,R){var T=Math.floor(R*P);if(A[T]){var C=A[T],L=N(C.x,O.x),_t=N(C.y,O.y);return j(j({},O),{},{x:L(m),y:_t(m)})}if(h){var Et=N(y*2,O.x),Dt=N(b/2,O.y);return j(j({},O),{},{x:Et(m),y:Dt(m)})}return j(j({},O),{},{x:O.x,y:O.y})});return o.renderCurveStatically(w,e,a)}var S=N(0,_),k=S(m),E;if(l){var D="".concat(l).split(/[,\s]+/gim).map(function(O){return parseFloat(O)});E=o.getStrokeDasharray(k,_,D)}else E=o.generateSimpleStrokeDasharray(_,k);return o.renderCurveStatically(s,e,a,{strokeDasharray:E})})}},{key:"renderCurve",value:function(e,a){var o=this.props,i=o.points,s=o.isAnimationActive,l=this.state,u=l.prevPoints,f=l.totalLength;return s&&i&&i.length&&(!u&&f>0||!nt(u,i))?this.renderCurveWithAnimation(e,a):this.renderCurveStatically(i,e,a)}},{key:"render",value:function(){var e,a=this.props,o=a.hide,i=a.dot,s=a.points,l=a.className,u=a.xAxis,f=a.yAxis,c=a.top,p=a.left,d=a.width,h=a.height,y=a.isAnimationActive,b=a.id;if(o||!s||!s.length)return null;var x=this.state.isAnimationFinished,A=s.length===1,_=Q("recharts-line",l),g=u&&u.allowDataOverflow,m=f&&f.allowDataOverflow,P=g||m,w=U(b)?this.id:b,S=(e=I(i,!1))!==null&&e!==void 0?e:{r:3,strokeWidth:2},k=S.r,E=k===void 0?3:k,D=S.strokeWidth,O=D===void 0?2:D,R=yt(i)?i:{},T=R.clipDot,C=T===void 0?!0:T,L=E*2+O;return v.createElement(F,{className:_},g||m?v.createElement("defs",null,v.createElement("clipPath",{id:"clipPath-".concat(w)},v.createElement("rect",{x:g?p:p-d/2,y:m?c:c-h/2,width:g?d:d*2,height:m?h:h*2})),!C&&v.createElement("clipPath",{id:"clipPath-dots-".concat(w)},v.createElement("rect",{x:p-L/2,y:c-L/2,width:d+L,height:h+L}))):null,!A&&this.renderCurve(P,w),this.renderErrorBar(P,w),(A||i)&&this.renderDots(P,C,w),(!y||x)&&mt.renderCallByParent(this.props,s))}}],[{key:"getDerivedStateFromProps",value:function(e,a){return e.animationId!==a.prevAnimationId?{prevAnimationId:e.animationId,curPoints:e.points,prevPoints:a.curPoints}:e.points!==a.curPoints?{curPoints:e.points}:null}},{key:"repeat",value:function(e,a){for(var o=e.length%2!==0?[].concat(z(e),[0]):e,i=[],s=0;s<a;++s)i=[].concat(z(i),z(o));return i}},{key:"renderDotItem",value:function(e,a){var o;if(v.isValidElement(e))o=v.cloneElement(e,a);else if(J(e))o=e(a);else{var i=a.key,s=lt(a,Nt),l=Q("recharts-line-dot",typeof e!="boolean"?e.className:"");o=v.createElement(vt,Y({key:i},s,{className:l}))}return o}}])})(ht.PureComponent);$(st,"displayName","Line");$(st,"defaultProps",{xAxisId:0,yAxisId:0,connectNulls:!1,activeDot:!0,dot:!0,legendType:"line",stroke:"#3182bd",strokeWidth:1,fill:"#fff",points:[],isAnimationActive:!gt.isSsr,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",hide:!1,label:!1});$(st,"getComposedData",function(t){var r=t.props,n=t.xAxis,e=t.yAxis,a=t.xAxisTicks,o=t.yAxisTicks,i=t.dataKey,s=t.bandSize,l=t.displayedData,u=t.offset,f=r.layout,c=l.map(function(p,d){var h=Z(p,i);return f==="horizontal"?{x:tt({axis:n,ticks:a,bandSize:s,entry:p,index:d}),y:U(h)?null:e.scale(h),value:h,payload:p}:{x:U(h)?null:n.scale(h),y:tt({axis:e,ticks:o,bandSize:s,entry:p,index:d}),value:h,payload:p}});return j({points:c,layout:f},u)});var Xt=["layout","type","stroke","connectNulls","isRange","ref"],Yt=["key"],Pt;function H(t){"@babel/helpers - typeof";return H=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(r){return typeof r}:function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},H(t)}function Ot(t,r){if(t==null)return{};var n=Ut(t,r),e,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a<o.length;a++)e=o[a],!(r.indexOf(e)>=0)&&Object.prototype.propertyIsEnumerable.call(t,e)&&(n[e]=t[e])}return n}function Ut(t,r){if(t==null)return{};var n={};for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)){if(r.indexOf(e)>=0)continue;n[e]=t[e]}return n}function M(){return M=Object.assign?Object.assign.bind():function(t){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var e in n)Object.prototype.hasOwnProperty.call(n,e)&&(t[e]=n[e])}return t},M.apply(this,arguments)}function ft(t,r){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(t);r&&(e=e.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),n.push.apply(n,e)}return n}function W(t){for(var r=1;r<arguments.length;r++){var n=arguments[r]!=null?arguments[r]:{};r%2?ft(Object(n),!0).forEach(function(e){B(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ft(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function qt(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}function pt(t,r){for(var n=0;n<r.length;n++){var e=r[n];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(t,St(e.key),e)}}function Gt(t,r,n){return r&&pt(t.prototype,r),n&&pt(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function Jt(t,r,n){return r=rt(r),Qt(t,wt()?Reflect.construct(r,n||[],rt(t).constructor):r.apply(t,n))}function Qt(t,r){if(r&&(H(r)==="object"||typeof r=="function"))return r;if(r!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Zt(t)}function Zt(t){if(t===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function wt(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(wt=function(){return!!t})()}function rt(t){return rt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},rt(t)}function te(t,r){if(typeof r!="function"&&r!==null)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(r&&r.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),r&&ot(t,r)}function ot(t,r){return ot=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,a){return e.__proto__=a,e},ot(t,r)}function B(t,r,n){return r=St(r),r in t?Object.defineProperty(t,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[r]=n,t}function St(t){var r=ee(t,"string");return H(r)=="symbol"?r:r+""}function ee(t,r){if(H(t)!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var e=n.call(t,r);if(H(e)!="object")return e;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}var X=(function(t){function r(){var n;qt(this,r);for(var e=arguments.length,a=new Array(e),o=0;o<e;o++)a[o]=arguments[o];return n=Jt(this,r,[].concat(a)),B(n,"state",{isAnimationFinished:!0}),B(n,"id",bt("recharts-area-")),B(n,"handleAnimationEnd",function(){var i=n.props.onAnimationEnd;n.setState({isAnimationFinished:!0}),J(i)&&i()}),B(n,"handleAnimationStart",function(){var i=n.props.onAnimationStart;n.setState({isAnimationFinished:!1}),J(i)&&i()}),n}return te(r,t),Gt(r,[{key:"renderDots",value:function(e,a,o){var i=this.props.isAnimationActive,s=this.state.isAnimationFinished;if(i&&!s)return null;var l=this.props,u=l.dot,f=l.points,c=l.dataKey,p=I(this.props,!1),d=I(u,!0),h=f.map(function(b,x){var A=W(W(W({key:"dot-".concat(x),r:3},p),d),{},{index:x,cx:b.x,cy:b.y,dataKey:c,value:b.value,payload:b.payload,points:f});return r.renderDotItem(u,A)}),y={clipPath:e?"url(#clipPath-".concat(a?"":"dots-").concat(o,")"):null};return v.createElement(F,M({className:"recharts-area-dots"},y),h)}},{key:"renderHorizontalRect",value:function(e){var a=this.props,o=a.baseLine,i=a.points,s=a.strokeWidth,l=i[0].x,u=i[i.length-1].x,f=e*Math.abs(l-u),c=q(i.map(function(p){return p.y||0}));return V(o)&&typeof o=="number"?c=Math.max(o,c):o&&Array.isArray(o)&&o.length&&(c=Math.max(q(o.map(function(p){return p.y||0})),c)),V(c)?v.createElement("rect",{x:l<u?l:l-f,y:0,width:f,height:Math.floor(c+(s?parseInt("".concat(s),10):1))}):null}},{key:"renderVerticalRect",value:function(e){var a=this.props,o=a.baseLine,i=a.points,s=a.strokeWidth,l=i[0].y,u=i[i.length-1].y,f=e*Math.abs(l-u),c=q(i.map(function(p){return p.x||0}));return V(o)&&typeof o=="number"?c=Math.max(o,c):o&&Array.isArray(o)&&o.length&&(c=Math.max(q(o.map(function(p){return p.x||0})),c)),V(c)?v.createElement("rect",{x:0,y:l<u?l:l-f,width:c+(s?parseInt("".concat(s),10):1),height:Math.floor(f)}):null}},{key:"renderClipRect",value:function(e){var a=this.props.layout;return a==="vertical"?this.renderVerticalRect(e):this.renderHorizontalRect(e)}},{key:"renderAreaStatically",value:function(e,a,o,i){var s=this.props,l=s.layout,u=s.type,f=s.stroke,c=s.connectNulls,p=s.isRange;s.ref;var d=Ot(s,Xt);return v.createElement(F,{clipPath:o?"url(#clipPath-".concat(i,")"):null},v.createElement(G,M({},I(d,!0),{points:e,connectNulls:c,type:u,baseLine:a,layout:l,stroke:"none",className:"recharts-area-area"})),f!=="none"&&v.createElement(G,M({},I(this.props,!1),{className:"recharts-area-curve",layout:l,type:u,connectNulls:c,fill:"none",points:e})),f!=="none"&&p&&v.createElement(G,M({},I(this.props,!1),{className:"recharts-area-curve",layout:l,type:u,connectNulls:c,fill:"none",points:a})))}},{key:"renderAreaWithAnimation",value:function(e,a){var o=this,i=this.props,s=i.points,l=i.baseLine,u=i.isAnimationActive,f=i.animationBegin,c=i.animationDuration,p=i.animationEasing,d=i.animationId,h=this.state,y=h.prevPoints,b=h.prevBaseLine;return v.createElement(dt,{begin:f,duration:c,isActive:u,easing:p,from:{t:0},to:{t:1},key:"area-".concat(d),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(x){var A=x.t;if(y){var _=y.length/s.length,g=s.map(function(S,k){var E=Math.floor(k*_);if(y[E]){var D=y[E],O=N(D.x,S.x),R=N(D.y,S.y);return W(W({},S),{},{x:O(A),y:R(A)})}return S}),m;if(V(l)&&typeof l=="number"){var P=N(b,l);m=P(A)}else if(U(l)||Lt(l)){var w=N(b,0);m=w(A)}else m=l.map(function(S,k){var E=Math.floor(k*_);if(b[E]){var D=b[E],O=N(D.x,S.x),R=N(D.y,S.y);return W(W({},S),{},{x:O(A),y:R(A)})}return S});return o.renderAreaStatically(g,m,e,a)}return v.createElement(F,null,v.createElement("defs",null,v.createElement("clipPath",{id:"animationClipPath-".concat(a)},o.renderClipRect(A))),v.createElement(F,{clipPath:"url(#animationClipPath-".concat(a,")")},o.renderAreaStatically(s,l,e,a)))})}},{key:"renderArea",value:function(e,a){var o=this.props,i=o.points,s=o.baseLine,l=o.isAnimationActive,u=this.state,f=u.prevPoints,c=u.prevBaseLine,p=u.totalLength;return l&&i&&i.length&&(!f&&p>0||!nt(f,i)||!nt(c,s))?this.renderAreaWithAnimation(e,a):this.renderAreaStatically(i,s,e,a)}},{key:"render",value:function(){var e,a=this.props,o=a.hide,i=a.dot,s=a.points,l=a.className,u=a.top,f=a.left,c=a.xAxis,p=a.yAxis,d=a.width,h=a.height,y=a.isAnimationActive,b=a.id;if(o||!s||!s.length)return null;var x=this.state.isAnimationFinished,A=s.length===1,_=Q("recharts-area",l),g=c&&c.allowDataOverflow,m=p&&p.allowDataOverflow,P=g||m,w=U(b)?this.id:b,S=(e=I(i,!1))!==null&&e!==void 0?e:{r:3,strokeWidth:2},k=S.r,E=k===void 0?3:k,D=S.strokeWidth,O=D===void 0?2:D,R=yt(i)?i:{},T=R.clipDot,C=T===void 0?!0:T,L=E*2+O;return v.createElement(F,{className:_},g||m?v.createElement("defs",null,v.createElement("clipPath",{id:"clipPath-".concat(w)},v.createElement("rect",{x:g?f:f-d/2,y:m?u:u-h/2,width:g?d:d*2,height:m?h:h*2})),!C&&v.createElement("clipPath",{id:"clipPath-dots-".concat(w)},v.createElement("rect",{x:f-L/2,y:u-L/2,width:d+L,height:h+L}))):null,A?null:this.renderArea(P,w),(i||A)&&this.renderDots(P,C,w),(!y||x)&&mt.renderCallByParent(this.props,s))}}],[{key:"getDerivedStateFromProps",value:function(e,a){return e.animationId!==a.prevAnimationId?{prevAnimationId:e.animationId,curPoints:e.points,curBaseLine:e.baseLine,prevPoints:a.curPoints,prevBaseLine:a.curBaseLine}:e.points!==a.curPoints||e.baseLine!==a.curBaseLine?{curPoints:e.points,curBaseLine:e.baseLine}:null}}])})(ht.PureComponent);Pt=X;B(X,"displayName","Area");B(X,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!gt.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"});B(X,"getBaseValue",function(t,r,n,e){var a=t.layout,o=t.baseValue,i=r.props.baseValue,s=i??o;if(V(s)&&typeof s=="number")return s;var l=a==="horizontal"?e:n,u=l.scale.domain();if(l.type==="number"){var f=Math.max(u[0],u[1]),c=Math.min(u[0],u[1]);return s==="dataMin"?c:s==="dataMax"||f<0?f:Math.max(Math.min(u[0],u[1]),0)}return s==="dataMin"?u[0]:s==="dataMax"?u[1]:u[0]});B(X,"getComposedData",function(t){var r=t.props,n=t.item,e=t.xAxis,a=t.yAxis,o=t.xAxisTicks,i=t.yAxisTicks,s=t.bandSize,l=t.dataKey,u=t.stackedData,f=t.dataStartIndex,c=t.displayedData,p=t.offset,d=r.layout,h=u&&u.length,y=Pt.getBaseValue(r,n,e,a),b=d==="horizontal",x=!1,A=c.map(function(g,m){var P;h?P=u[f+m]:(P=Z(g,l),Array.isArray(P)?x=!0:P=[y,P]);var w=P[1]==null||h&&Z(g,l)==null;return b?{x:tt({axis:e,ticks:o,bandSize:s,entry:g,index:m}),y:w?null:a.scale(P[1]),value:P,payload:g}:{x:w?null:e.scale(P[1]),y:tt({axis:a,ticks:i,bandSize:s,entry:g,index:m}),value:P,payload:g}}),_;return h||x?_=A.map(function(g){var m=Array.isArray(g.value)?g.value[0]:null;return b?{x:g.x,y:m!=null&&g.y!=null?a.scale(m):null}:{x:m!=null?e.scale(m):null,y:g.y}}):_=b?a.scale(y):e.scale(y),W({points:A,baseLine:_,layout:d,isRange:x},p)});B(X,"renderDotItem",function(t,r){var n;if(v.isValidElement(t))n=v.cloneElement(t,r);else if(J(t))n=t(r);else{var e=Q("recharts-area-dot",typeof t!="boolean"?t.className:""),a=r.key,o=Ot(r,Yt);n=v.createElement(vt,M({},o,{key:a,className:e}))}return n});export{X as A,st as L};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./breakdown-CO04nSN-.js","./index-DnDr1VUr.js","./index-DSj-Bxov.css","./chart-bNxdfXxA.js","./panel-DTjMnHaz.js","./primitives-Dj_9YxTF.js","./timeline-DmzB8Z3W.js","./Area-DGo9K-U3.js"])))=>i.map(i=>d[i]);
2
+ import{g as D,h as j,i as A,D as k,M as z,r as x,j as e,d as T,f as C,a as E,b as I,m as $,s as B,_ as M}from"./index-DnDr1VUr.js";import{P as F}from"./panel-DTjMnHaz.js";import{a as w}from"./primitives-Dj_9YxTF.js";const R=[0,.32,.55,.78,1],S=t=>t===0?"var(--color-bg-2)":`color-mix(in oklab, var(--color-cost) ${R[t]*100}%, var(--color-bg-2))`,L=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];function O(t,n){const i=t,c=i.filter(l=>n(l)>0);if(c.length===0)return null;const h=i.reduce((l,a)=>l+n(a),0),d=c.reduce((l,a)=>n(a)>n(l)?a:l),p=new Array(7).fill(0);for(const l of i)p[D(j(l.date))]+=n(l);const m=p.indexOf(Math.max(...p)),f=new Set(c.map(l=>l.date));let v=0;for(let l=j(c[c.length-1].date);f.has(A(l));l-=k)v++;return{active:c.length,total:h,top:d,avg:h/c.length,busiest:m,streak:v,costed:t.some(l=>l.cost>0)}}function V(t,n,i){const c=new Map(t.map(s=>[s.date,i(s)]));if(t.length===0)return null;const h=t[t.length-1].date,d=t[0].date;let p=j(h),m=j(d);(p-m)/(k*7)>n&&(m=p-n*7*k),m-=D(m)*k;const f=Math.max(...t.map(i),0),v=s=>{if(s<=0||f<=0)return 0;const r=s/f;return r>.66?4:r>.4?3:r>.15?2:1},l=[];let a=new Array(7).fill(null);const u=[];let b=-1,N=0;for(let s=m;s<=p;s+=k){const r=A(s),o=D(s);o===0&&a.some(Boolean)&&(l.push(a),a=new Array(7).fill(null),N++);const g=new Date(s).getUTCMonth();g!==b&&o===0&&(u.push({col:N,text:z[g]}),b=g);const y=s>=j(d);a[o]=y?{date:r,cost:c.get(r)??0,level:v(c.get(r)??0)}:null}return a.some(Boolean)&&l.push(a),{weeks:l,monthLabels:u}}function H({derived:t,maxWeeks:n=26,periodLabel:i}){const[c,h]=x.useState(null),[d,p]=x.useState(null),m=c??d,f=x.useMemo(()=>new Map(t.calendar.map(s=>[s.date,s])),[t.calendar]),v=x.useMemo(()=>t.calendar.some(s=>s.cost>0),[t.calendar]),l=s=>v?s.cost:s.tokens,a=x.useMemo(()=>O(t.calendar,l),[t,v]),u=x.useMemo(()=>V(t.calendar,n,l),[t,n]),b=u?`repeat(${u.weeks.length}, minmax(0,1fr))`:void 0,N=u?u.weeks.length*25:void 0;return e.jsx(e.Fragment,{children:e.jsx(F,{title:"daily spend",titleTag:i,captureName:"calendar",children:!u||!a?e.jsx("div",{className:"py-6 text-center text-xs text-fg-faint",children:"no usage yet"}):e.jsxs("div",{className:"grid gap-x-8 gap-y-5 pt-1 md:grid-cols-[minmax(0,1fr)_210px] md:items-start",children:[e.jsxs("div",{className:"flex min-w-0 flex-col gap-1.5",children:[e.jsx("div",{className:"pl-6",children:e.jsx("div",{className:"grid gap-[3px] text-[9px] text-fg-faint",style:{gridTemplateColumns:b,maxWidth:N},children:u.weeks.map((s,r)=>{const o=u.monthLabels.find(g=>g.col===r);return e.jsx("div",{className:"truncate",children:(o==null?void 0:o.text)??""},r)})})}),e.jsxs("div",{className:"flex gap-[3px]",children:[e.jsx("div",{className:"flex w-5 shrink-0 flex-col gap-[3px] text-[9px] text-fg-faint",children:["M","","W","","F","",""].map((s,r)=>e.jsx("div",{className:"flex flex-1 items-center",children:s},r))}),e.jsx("div",{className:"grid min-w-0 flex-1 gap-[3px]",style:{gridTemplateColumns:b,maxWidth:N},onMouseLeave:()=>h(null),children:u.weeks.map((s,r)=>e.jsx("div",{className:"flex flex-col gap-[3px]",children:s.map((o,g)=>o===null?e.jsx("div",{className:"aspect-square"},g):e.jsx("button",{type:"button","aria-label":`${T(o.date)} — click to pin`,"aria-pressed":(d==null?void 0:d.date)===o.date,className:`aspect-square block rounded-[3px] p-0 transition duration-150 hover:scale-[1.18] hover:ring-1 hover:ring-accent focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-accent ${(d==null?void 0:d.date)===o.date?"ring-1 ring-fg-bright":""}`,style:{background:S(o.level)},onMouseEnter:()=>h(f.get(o.date)??null),onFocus:()=>h(f.get(o.date)??null),onClick:()=>p(y=>(y==null?void 0:y.date)===o.date?null:f.get(o.date)??null)},g))},r))})]}),e.jsxs("div",{className:"flex items-center gap-1.5 pl-6 pt-1 text-[9px] text-fg-faint",children:["less",[0,1,2,3,4].map(s=>e.jsx("span",{className:"size-[11px] rounded-[2px]",style:{background:S(s)}},s)),"more"]})]}),e.jsxs("div",{className:"relative border-line-faint md:border-l md:pl-6",children:[e.jsxs("div",{className:`grid grid-cols-2 gap-x-6 gap-y-4 transition-opacity duration-200 md:grid-cols-1 ${m?"opacity-0":"opacity-100"}`,children:[e.jsx(w,{label:"busiest day",value:a.costed?C(a.top.cost):E(a.top.tokens),sub:T(a.top.date),valueClass:"text-cost"}),e.jsx(w,{label:"daily average",value:a.costed?C(a.avg):E(a.avg),sub:`across ${a.active} active days`}),e.jsx(w,{label:"top weekday",value:L[a.busiest],valueClass:"text-fg-bright"}),e.jsx(w,{label:"latest streak",value:`${a.streak}d`,sub:a.streak>0?"in a row":"idle today",valueClass:"text-positive"})]}),m&&e.jsx("div",{className:"dialog-fade absolute inset-0 md:pl-6",children:e.jsx(W,{day:m,pinned:!c&&m===d})})]})]})})})}function W({day:t,pinned:n=!1}){return e.jsxs("div",{className:"font-mono text-[11px]",children:[e.jsxs("div",{className:"flex items-baseline justify-between gap-3 border-b border-line-faint pb-2",children:[e.jsxs("span",{className:"text-fg-dim",children:[L[D(j(t.date))]," · ",T(t.date),n&&e.jsx("span",{className:"ml-1.5 text-[9px] uppercase tracking-wide text-accent",children:"pinned"})]}),e.jsx("span",{className:"tnum text-cost",children:t.cost>0?C(t.cost):"—"})]}),t.cost>0?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-3 gap-2 py-2 text-[10px]",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-fg-faint",children:"calls"}),e.jsx("div",{className:"tnum text-fg",children:I(t.calls)})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-fg-faint",children:"tokens"}),e.jsx("div",{className:"tnum text-fg",children:E(t.tokens)})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-fg-faint",children:"saved"}),e.jsx("div",{className:"tnum text-positive",children:C(t.cacheSavings)})]})]}),e.jsxs("div",{className:"flex flex-col gap-1 border-t border-line-faint pt-2",children:[t.models.slice(0,5).map(i=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"size-1.5 shrink-0 rounded-full",style:{background:$(i.name)}}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-fg-dim",children:B(i.name)}),e.jsx("span",{className:"tnum w-16 shrink-0 text-right text-fg",children:C(i.cost)})]},i.name)),t.models.length>5&&e.jsxs("div",{className:"pt-0.5 text-fg-faint",children:["+",t.models.length-5," more"]})]})]}):e.jsx("div",{className:"pt-2 text-fg-faint",children:"no spend this day"})]})}const Y=x.lazy(()=>M(()=>import("./breakdown-CO04nSN-.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url).then(t=>({default:t.CostByModel}))),q=x.lazy(()=>M(()=>import("./breakdown-CO04nSN-.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url).then(t=>({default:t.ProviderDonut}))),P=x.lazy(()=>M(()=>import("./breakdown-CO04nSN-.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url).then(t=>({default:t.TokenComposition}))),G=x.lazy(()=>M(()=>import("./timeline-DmzB8Z3W.js"),__vite__mapDeps([6,1,2,3,4,5,7]),import.meta.url).then(t=>({default:t.CacheSavings}))),K=x.lazy(()=>M(()=>import("./timeline-DmzB8Z3W.js"),__vite__mapDeps([6,1,2,3,4,5,7]),import.meta.url).then(t=>({default:t.CumulativeSpend})));function _({children:t}){return e.jsx(x.Suspense,{fallback:e.jsx("div",{className:"min-h-64",role:"status","aria-label":"Loading chart"}),children:t})}function X({derived:t,scopeLabel:n}){const i=t.byProvider.length>1;return e.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[e.jsx("div",{className:"md:col-span-2",children:e.jsx(H,{derived:t,periodLabel:n})}),e.jsx(_,{children:e.jsx(Y,{derived:t,periodLabel:n})}),e.jsx(_,{children:i?e.jsx(q,{derived:t,periodLabel:n}):e.jsx(P,{derived:t,periodLabel:n})}),i?e.jsx(_,{children:e.jsx(P,{derived:t,periodLabel:n})}):null,e.jsx("div",{className:i?void 0:"md:col-span-2",children:e.jsx(_,{children:e.jsx(G,{derived:t,periodLabel:n})})}),e.jsx("div",{className:"md:col-span-2",children:e.jsx(_,{children:e.jsx(K,{derived:t,height:300,periodLabel:n})})})]})}export{X as AnalyticsTab};