@tokscale/cli 1.4.3 → 2.0.1

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 (188) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +128 -0
  4. package/dist/index.js.map +1 -0
  5. package/package.json +19 -26
  6. package/dist/auth.d.ts +0 -17
  7. package/dist/auth.d.ts.map +0 -1
  8. package/dist/auth.js +0 -162
  9. package/dist/auth.js.map +0 -1
  10. package/dist/cli.d.ts +0 -9
  11. package/dist/cli.d.ts.map +0 -1
  12. package/dist/cli.js +0 -1550
  13. package/dist/cli.js.map +0 -1
  14. package/dist/credentials.d.ts +0 -50
  15. package/dist/credentials.d.ts.map +0 -1
  16. package/dist/credentials.js +0 -151
  17. package/dist/credentials.js.map +0 -1
  18. package/dist/cursor.d.ts +0 -167
  19. package/dist/cursor.d.ts.map +0 -1
  20. package/dist/cursor.js +0 -906
  21. package/dist/cursor.js.map +0 -1
  22. package/dist/date-utils.d.ts +0 -10
  23. package/dist/date-utils.d.ts.map +0 -1
  24. package/dist/date-utils.js +0 -47
  25. package/dist/date-utils.js.map +0 -1
  26. package/dist/graph-types.d.ts +0 -142
  27. package/dist/graph-types.d.ts.map +0 -1
  28. package/dist/graph-types.js +0 -6
  29. package/dist/graph-types.js.map +0 -1
  30. package/dist/native-runner.d.ts +0 -11
  31. package/dist/native-runner.d.ts.map +0 -1
  32. package/dist/native-runner.js +0 -77
  33. package/dist/native-runner.js.map +0 -1
  34. package/dist/native.d.ts +0 -106
  35. package/dist/native.d.ts.map +0 -1
  36. package/dist/native.js +0 -302
  37. package/dist/native.js.map +0 -1
  38. package/dist/sessions/types.d.ts +0 -28
  39. package/dist/sessions/types.d.ts.map +0 -1
  40. package/dist/sessions/types.js +0 -27
  41. package/dist/sessions/types.js.map +0 -1
  42. package/dist/spinner.d.ts +0 -75
  43. package/dist/spinner.d.ts.map +0 -1
  44. package/dist/spinner.js +0 -203
  45. package/dist/spinner.js.map +0 -1
  46. package/dist/submit.d.ts +0 -23
  47. package/dist/submit.d.ts.map +0 -1
  48. package/dist/submit.js +0 -294
  49. package/dist/submit.js.map +0 -1
  50. package/dist/table.d.ts +0 -42
  51. package/dist/table.d.ts.map +0 -1
  52. package/dist/table.js +0 -181
  53. package/dist/table.js.map +0 -1
  54. package/dist/tui/App.d.ts +0 -4
  55. package/dist/tui/App.d.ts.map +0 -1
  56. package/dist/tui/App.js +0 -333
  57. package/dist/tui/App.js.map +0 -1
  58. package/dist/tui/components/BarChart.d.ts +0 -17
  59. package/dist/tui/components/BarChart.d.ts.map +0 -1
  60. package/dist/tui/components/BarChart.js +0 -146
  61. package/dist/tui/components/BarChart.js.map +0 -1
  62. package/dist/tui/components/DailyView.d.ts +0 -13
  63. package/dist/tui/components/DailyView.d.ts.map +0 -1
  64. package/dist/tui/components/DailyView.js +0 -86
  65. package/dist/tui/components/DailyView.js.map +0 -1
  66. package/dist/tui/components/DateBreakdownPanel.d.ts +0 -7
  67. package/dist/tui/components/DateBreakdownPanel.d.ts.map +0 -1
  68. package/dist/tui/components/DateBreakdownPanel.js +0 -36
  69. package/dist/tui/components/DateBreakdownPanel.js.map +0 -1
  70. package/dist/tui/components/Footer.d.ts +0 -28
  71. package/dist/tui/components/Footer.d.ts.map +0 -1
  72. package/dist/tui/components/Footer.js +0 -130
  73. package/dist/tui/components/Footer.js.map +0 -1
  74. package/dist/tui/components/Header.d.ts +0 -9
  75. package/dist/tui/components/Header.d.ts.map +0 -1
  76. package/dist/tui/components/Header.js +0 -20
  77. package/dist/tui/components/Header.js.map +0 -1
  78. package/dist/tui/components/Legend.d.ts +0 -7
  79. package/dist/tui/components/Legend.d.ts.map +0 -1
  80. package/dist/tui/components/Legend.js +0 -16
  81. package/dist/tui/components/Legend.js.map +0 -1
  82. package/dist/tui/components/LoadingSpinner.d.ts +0 -8
  83. package/dist/tui/components/LoadingSpinner.d.ts.map +0 -1
  84. package/dist/tui/components/LoadingSpinner.js +0 -55
  85. package/dist/tui/components/LoadingSpinner.js.map +0 -1
  86. package/dist/tui/components/ModelRow.d.ts +0 -13
  87. package/dist/tui/components/ModelRow.d.ts.map +0 -1
  88. package/dist/tui/components/ModelRow.js +0 -15
  89. package/dist/tui/components/ModelRow.js.map +0 -1
  90. package/dist/tui/components/ModelView.d.ts +0 -13
  91. package/dist/tui/components/ModelView.d.ts.map +0 -1
  92. package/dist/tui/components/ModelView.js +0 -96
  93. package/dist/tui/components/ModelView.js.map +0 -1
  94. package/dist/tui/components/OverviewView.d.ts +0 -14
  95. package/dist/tui/components/OverviewView.d.ts.map +0 -1
  96. package/dist/tui/components/OverviewView.js +0 -65
  97. package/dist/tui/components/OverviewView.js.map +0 -1
  98. package/dist/tui/components/StatsView.d.ts +0 -14
  99. package/dist/tui/components/StatsView.d.ts.map +0 -1
  100. package/dist/tui/components/StatsView.js +0 -102
  101. package/dist/tui/components/StatsView.js.map +0 -1
  102. package/dist/tui/components/TokenBreakdown.d.ts +0 -14
  103. package/dist/tui/components/TokenBreakdown.d.ts.map +0 -1
  104. package/dist/tui/components/TokenBreakdown.js +0 -10
  105. package/dist/tui/components/TokenBreakdown.js.map +0 -1
  106. package/dist/tui/components/index.d.ts +0 -16
  107. package/dist/tui/components/index.d.ts.map +0 -1
  108. package/dist/tui/components/index.js +0 -13
  109. package/dist/tui/components/index.js.map +0 -1
  110. package/dist/tui/config/settings.d.ts +0 -15
  111. package/dist/tui/config/settings.d.ts.map +0 -1
  112. package/dist/tui/config/settings.js +0 -147
  113. package/dist/tui/config/settings.js.map +0 -1
  114. package/dist/tui/config/themes.d.ts +0 -15
  115. package/dist/tui/config/themes.d.ts.map +0 -1
  116. package/dist/tui/config/themes.js +0 -82
  117. package/dist/tui/config/themes.js.map +0 -1
  118. package/dist/tui/hooks/useData.d.ts +0 -19
  119. package/dist/tui/hooks/useData.d.ts.map +0 -1
  120. package/dist/tui/hooks/useData.js +0 -468
  121. package/dist/tui/hooks/useData.js.map +0 -1
  122. package/dist/tui/index.d.ts +0 -4
  123. package/dist/tui/index.d.ts.map +0 -1
  124. package/dist/tui/index.js +0 -36
  125. package/dist/tui/index.js.map +0 -1
  126. package/dist/tui/types/index.d.ts +0 -137
  127. package/dist/tui/types/index.d.ts.map +0 -1
  128. package/dist/tui/types/index.js +0 -26
  129. package/dist/tui/types/index.js.map +0 -1
  130. package/dist/tui/utils/cleanup.d.ts +0 -22
  131. package/dist/tui/utils/cleanup.d.ts.map +0 -1
  132. package/dist/tui/utils/cleanup.js +0 -59
  133. package/dist/tui/utils/cleanup.js.map +0 -1
  134. package/dist/tui/utils/colors.d.ts +0 -19
  135. package/dist/tui/utils/colors.d.ts.map +0 -1
  136. package/dist/tui/utils/colors.js +0 -71
  137. package/dist/tui/utils/colors.js.map +0 -1
  138. package/dist/tui/utils/format.d.ts +0 -7
  139. package/dist/tui/utils/format.d.ts.map +0 -1
  140. package/dist/tui/utils/format.js +0 -45
  141. package/dist/tui/utils/format.js.map +0 -1
  142. package/dist/tui/utils/responsive.d.ts +0 -5
  143. package/dist/tui/utils/responsive.d.ts.map +0 -1
  144. package/dist/tui/utils/responsive.js +0 -5
  145. package/dist/tui/utils/responsive.js.map +0 -1
  146. package/dist/wrapped.d.ts +0 -43
  147. package/dist/wrapped.d.ts.map +0 -1
  148. package/dist/wrapped.js +0 -719
  149. package/dist/wrapped.js.map +0 -1
  150. package/src/auth.ts +0 -211
  151. package/src/cli.ts +0 -1892
  152. package/src/credentials.ts +0 -176
  153. package/src/cursor.ts +0 -1044
  154. package/src/date-utils.ts +0 -51
  155. package/src/graph-types.ts +0 -175
  156. package/src/native-runner.js +0 -4
  157. package/src/native-runner.ts +0 -91
  158. package/src/native.ts +0 -633
  159. package/src/sessions/types.ts +0 -59
  160. package/src/spinner.ts +0 -283
  161. package/src/submit.ts +0 -360
  162. package/src/table.ts +0 -233
  163. package/src/tui/App.tsx +0 -453
  164. package/src/tui/components/BarChart.tsx +0 -205
  165. package/src/tui/components/DailyView.tsx +0 -132
  166. package/src/tui/components/DateBreakdownPanel.tsx +0 -79
  167. package/src/tui/components/Footer.tsx +0 -380
  168. package/src/tui/components/Header.tsx +0 -68
  169. package/src/tui/components/Legend.tsx +0 -39
  170. package/src/tui/components/LoadingSpinner.tsx +0 -81
  171. package/src/tui/components/ModelRow.tsx +0 -47
  172. package/src/tui/components/ModelView.tsx +0 -147
  173. package/src/tui/components/OverviewView.tsx +0 -121
  174. package/src/tui/components/StatsView.tsx +0 -249
  175. package/src/tui/components/TokenBreakdown.tsx +0 -46
  176. package/src/tui/components/index.ts +0 -15
  177. package/src/tui/config/settings.ts +0 -183
  178. package/src/tui/config/themes.ts +0 -115
  179. package/src/tui/hooks/useData.ts +0 -558
  180. package/src/tui/index.tsx +0 -44
  181. package/src/tui/opentui.d.ts +0 -166
  182. package/src/tui/types/index.ts +0 -173
  183. package/src/tui/utils/cleanup.ts +0 -65
  184. package/src/tui/utils/colors.ts +0 -78
  185. package/src/tui/utils/format.ts +0 -36
  186. package/src/tui/utils/responsive.ts +0 -8
  187. package/src/types.d.ts +0 -28
  188. package/src/wrapped.ts +0 -848
@@ -1,86 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
2
- import { For, createMemo } from "solid-js";
3
- import { formatTokensCompact, formatCostFull } from "../utils/format.js";
4
- import { isNarrow } from "../utils/responsive.js";
5
- const STRIPE_BG = "#232328";
6
- const INPUT_COL_WIDTH = 12;
7
- const OUTPUT_COL_WIDTH = 12;
8
- const CACHE_READ_COL_WIDTH = 10;
9
- const CACHE_WRITE_COL_WIDTH = 10;
10
- const TOTAL_COL_WIDTH = 14;
11
- const COST_COL_WIDTH = 12;
12
- const METRIC_COLUMNS_WIDTH_FULL = INPUT_COL_WIDTH + OUTPUT_COL_WIDTH + CACHE_READ_COL_WIDTH + CACHE_WRITE_COL_WIDTH + TOTAL_COL_WIDTH + COST_COL_WIDTH;
13
- const METRIC_COLUMNS_WIDTH_NARROW = TOTAL_COL_WIDTH + COST_COL_WIDTH;
14
- const SIDE_PADDING = 2;
15
- const MIN_DATE_COLUMN = 14;
16
- export function DailyView(props) {
17
- const isNarrowTerminal = () => isNarrow(props.width);
18
- const terminalWidth = () => props.width ?? process.stdout.columns ?? 80;
19
- const dateColumnWidths = createMemo(() => {
20
- const metricWidth = isNarrowTerminal() ? METRIC_COLUMNS_WIDTH_NARROW : METRIC_COLUMNS_WIDTH_FULL;
21
- const minDate = MIN_DATE_COLUMN;
22
- const available = Math.max(terminalWidth() - SIDE_PADDING - metricWidth, minDate);
23
- const dateColumn = Math.max(minDate, available);
24
- return {
25
- column: dateColumn,
26
- text: dateColumn,
27
- };
28
- });
29
- const sortedEntries = createMemo(() => {
30
- const entries = props.data.dailyEntries;
31
- const sortBy = props.sortBy;
32
- const sortDesc = props.sortDesc;
33
- return [...entries].sort((a, b) => {
34
- let cmp = 0;
35
- if (sortBy === "cost")
36
- cmp = a.cost - b.cost;
37
- else if (sortBy === "tokens")
38
- cmp = a.total - b.total;
39
- else if (sortBy === "date")
40
- cmp = a.date.localeCompare(b.date);
41
- return sortDesc ? -cmp : cmp;
42
- });
43
- });
44
- const visibleEntries = createMemo(() => {
45
- const maxRows = Math.max(props.height - 3, 0);
46
- return sortedEntries().slice(0, maxRows);
47
- });
48
- const formattedRows = createMemo(() => {
49
- const dateColWidth = dateColumnWidths().column;
50
- const narrow = isNarrowTerminal();
51
- return visibleEntries().map((entry) => ({
52
- entry,
53
- dateColWidth,
54
- narrow,
55
- input: formatTokensCompact(entry.input),
56
- output: formatTokensCompact(entry.output),
57
- cacheRead: formatTokensCompact(entry.cacheRead),
58
- cacheWrite: formatTokensCompact(entry.cacheWrite),
59
- total: formatTokensCompact(entry.total),
60
- cost: formatCostFull(entry.cost),
61
- }));
62
- });
63
- const sortArrow = () => (props.sortDesc ? "▼" : "▲");
64
- const dateHeader = () => (props.sortBy === "date" ? `${sortArrow()} Date` : "Date");
65
- const totalHeader = () => (props.sortBy === "tokens" ? `${sortArrow()} Total` : "Total");
66
- const costHeader = () => (props.sortBy === "cost" ? `${sortArrow()} Cost` : "Cost");
67
- const renderHeader = () => {
68
- const dateColWidth = dateColumnWidths().column;
69
- if (isNarrowTerminal()) {
70
- return `${"Date".padEnd(dateColWidth)}${totalHeader().padStart(TOTAL_COL_WIDTH)}${costHeader().padStart(COST_COL_WIDTH)}`;
71
- }
72
- return `${(" " + dateHeader()).padEnd(dateColWidth)}${"Input".padStart(INPUT_COL_WIDTH)}${"Output".padStart(OUTPUT_COL_WIDTH)}${"C.Read".padStart(CACHE_READ_COL_WIDTH)}${"C.Write".padStart(CACHE_WRITE_COL_WIDTH)}${totalHeader().padStart(TOTAL_COL_WIDTH)}${costHeader().padStart(COST_COL_WIDTH)}`;
73
- };
74
- const renderRowData = (row) => {
75
- if (row.narrow) {
76
- return `${row.entry.date.padEnd(row.dateColWidth)}${row.total.padStart(TOTAL_COL_WIDTH)}`;
77
- }
78
- return `${row.entry.date.padEnd(row.dateColWidth)}${row.input.padStart(INPUT_COL_WIDTH)}${row.output.padStart(OUTPUT_COL_WIDTH)}${row.cacheRead.padStart(CACHE_READ_COL_WIDTH)}${row.cacheWrite.padStart(CACHE_WRITE_COL_WIDTH)}${row.total.padStart(TOTAL_COL_WIDTH)}`;
79
- };
80
- return (_jsxs("box", { flexDirection: "column", children: [_jsx("box", { flexDirection: "row", children: _jsx("text", { fg: "cyan", bold: true, children: renderHeader() }) }), _jsx(For, { each: formattedRows(), children: (row, i) => {
81
- const isActive = createMemo(() => i() === props.selectedIndex());
82
- const rowBg = createMemo(() => isActive() ? "blue" : (i() % 2 === 1 ? STRIPE_BG : undefined));
83
- return (_jsxs("box", { flexDirection: "row", children: [_jsx("text", { bg: rowBg(), fg: isActive() ? "white" : undefined, children: renderRowData(row) }), _jsx("text", { fg: "green", bg: rowBg(), children: row.cost.padStart(COST_COL_WIDTH) })] }));
84
- } })] }));
85
- }
86
- //# sourceMappingURL=DailyView.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DailyView.js","sourceRoot":"","sources":["../../../src/tui/components/DailyView.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { DailyModelBreakdown } from "../types/index.js";
2
- export interface DateBreakdownPanelProps {
3
- breakdown: DailyModelBreakdown;
4
- isNarrow: boolean;
5
- }
6
- export declare function DateBreakdownPanel(props: DateBreakdownPanelProps): any;
7
- //# sourceMappingURL=DateBreakdownPanel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DateBreakdownPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/components/DateBreakdownPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAU7D,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,OA8DhE"}
@@ -1,36 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
2
- import { For, createMemo } from "solid-js";
3
- import { getSourceColor, getSourceDisplayName } from "../utils/colors.js";
4
- import { formatTokens, formatCost } from "../utils/format.js";
5
- import { ModelRow } from "./ModelRow.js";
6
- function formatDateDisplay(dateStr) {
7
- const date = new Date(dateStr + "T00:00:00");
8
- return date.toLocaleDateString("en-US", { weekday: "short", month: "short", day: "numeric", year: "numeric" });
9
- }
10
- export function DateBreakdownPanel(props) {
11
- const groupedBySource = createMemo(() => {
12
- if (!props.breakdown?.models)
13
- return new Map();
14
- const groups = new Map();
15
- for (const model of props.breakdown.models) {
16
- const existing = groups.get(model.source) || [];
17
- existing.push(model);
18
- groups.set(model.source, existing);
19
- }
20
- for (const [, models] of groups) {
21
- models.sort((a, b) => {
22
- const totalA = a.tokens.input + a.tokens.output + (a.tokens.cacheRead || 0) + (a.tokens.cacheWrite || 0);
23
- const totalB = b.tokens.input + b.tokens.output + (b.tokens.cacheRead || 0) + (b.tokens.cacheWrite || 0);
24
- return totalB - totalA;
25
- });
26
- }
27
- return groups;
28
- });
29
- return (_jsxs("box", { flexDirection: "column", marginTop: 1, paddingX: 1, children: [_jsxs("box", { flexDirection: "row", justifyContent: "space-between", children: [_jsx("text", { bold: true, fg: "white", children: formatDateDisplay(props.breakdown.date) }), _jsxs("box", { flexDirection: "row", gap: 2, children: [_jsx("text", { fg: "cyan", children: formatTokens(props.breakdown.totalTokens) }), _jsx("text", { fg: "green", bold: true, children: formatCost(props.breakdown.cost) })] })] }), _jsx("box", { flexDirection: "column", marginTop: 1, children: _jsx(For, { each: Array.from(groupedBySource().entries()), children: ([source, models]) => (_jsxs("box", { flexDirection: "column", children: [_jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: getSourceColor(source), bold: true, children: `● ${getSourceDisplayName(source)}` }), _jsx("text", { dim: true, children: `(${models.length} model${models.length > 1 ? "s" : ""})` })] }), _jsx(For, { each: models, children: (model) => (_jsx(ModelRow, { modelId: model.modelId, tokens: {
30
- input: model.tokens.input,
31
- output: model.tokens.output,
32
- cacheRead: model.tokens.cacheRead,
33
- cacheWrite: model.tokens.cacheWrite,
34
- }, compact: props.isNarrow, indent: 2 })) })] })) }) }), _jsx("box", { flexDirection: "row", marginTop: 1, children: _jsx("text", { dim: true, children: "Click another day or same day to close" }) })] }));
35
- }
36
- //# sourceMappingURL=DateBreakdownPanel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DateBreakdownPanel.js","sourceRoot":"","sources":["../../../src/tui/components/DateBreakdownPanel.tsx"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- import type { SourceType, SortType, TabType, LoadingPhase } from "../types/index.js";
2
- import type { ColorPaletteName } from "../config/themes.js";
3
- import type { TotalBreakdown } from "../hooks/useData.js";
4
- interface FooterProps {
5
- enabledSources: Set<SourceType>;
6
- sortBy: SortType;
7
- totals?: TotalBreakdown;
8
- modelCount: number;
9
- activeTab: TabType;
10
- scrollStart?: number;
11
- scrollEnd?: number;
12
- totalItems?: number;
13
- colorPalette: ColorPaletteName;
14
- statusMessage?: string | null;
15
- isRefreshing?: boolean;
16
- loadingPhase?: LoadingPhase;
17
- cacheTimestamp?: number | null;
18
- autoRefreshEnabled?: boolean;
19
- autoRefreshMs?: number;
20
- width?: number;
21
- onSourceToggle?: (source: SourceType) => void;
22
- onSortChange?: (sort: SortType) => void;
23
- onPaletteChange?: () => void;
24
- onRefresh?: () => void;
25
- }
26
- export declare function Footer(props: FooterProps): any;
27
- export {};
28
- //# sourceMappingURL=Footer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../src/tui/components/Footer.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,YAAY,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK1D,UAAU,WAAW;IACnB,cAAc,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAChC,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,gBAAgB,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAqBD,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,OAwMxC"}
@@ -1,130 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@opentui/solid/jsx-runtime";
2
- import { Show, createSignal, createEffect, onMount, onCleanup, } from "solid-js";
3
- import { getPalette } from "../config/themes.js";
4
- import { formatTokens } from "../utils/format.js";
5
- import { isVeryNarrow } from "../utils/responsive.js";
6
- function formatTimeAgo(timestamp, now) {
7
- const seconds = Math.max(Math.floor((now - timestamp) / 1000), 0);
8
- if (seconds < 60)
9
- return `${seconds}s ago`;
10
- const minutes = Math.floor(seconds / 60);
11
- if (minutes < 60)
12
- return `${minutes}m ago`;
13
- const hours = Math.floor(minutes / 60);
14
- if (hours < 24)
15
- return `${hours}h ago`;
16
- const days = Math.floor(hours / 24);
17
- return `${days}d ago`;
18
- }
19
- function formatIntervalSeconds(ms) {
20
- if (!ms || ms <= 0)
21
- return "0s";
22
- const seconds = Math.round(ms / 1000);
23
- if (seconds < 60)
24
- return `${seconds}s`;
25
- const minutes = Math.round(seconds / 60);
26
- return `${minutes}m`;
27
- }
28
- export function Footer(props) {
29
- const palette = () => getPalette(props.colorPalette);
30
- const isVeryNarrowTerminal = () => isVeryNarrow(props.width);
31
- const [now, setNow] = createSignal(Date.now());
32
- let nowInterval = null;
33
- createEffect(() => {
34
- if (props.cacheTimestamp) {
35
- if (!nowInterval) {
36
- nowInterval = setInterval(() => setNow(Date.now()), 1000);
37
- }
38
- }
39
- else if (nowInterval) {
40
- clearInterval(nowInterval);
41
- nowInterval = null;
42
- }
43
- });
44
- onCleanup(() => {
45
- if (nowInterval)
46
- clearInterval(nowInterval);
47
- });
48
- const showScrollInfo = () => props.activeTab === "overview" &&
49
- props.totalItems &&
50
- props.scrollStart !== undefined &&
51
- props.scrollEnd !== undefined;
52
- const totals = () => props.totals || {
53
- input: 0,
54
- output: 0,
55
- cacheRead: 0,
56
- cacheWrite: 0,
57
- reasoning: 0,
58
- total: 0,
59
- cost: 0,
60
- };
61
- return (_jsxs("box", { flexDirection: "column", paddingX: 1, children: [_jsxs("box", { flexDirection: "row", justifyContent: "space-between", children: [_jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "1" : "1:OC", source: "opencode", enabled: props.enabledSources.has("opencode"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "2" : "2:CC", source: "claude", enabled: props.enabledSources.has("claude"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "3" : "3:CX", source: "codex", enabled: props.enabledSources.has("codex"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "4" : "4:CR", source: "cursor", enabled: props.enabledSources.has("cursor"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "5" : "5:GM", source: "gemini", enabled: props.enabledSources.has("gemini"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "6" : "6:AM", source: "amp", enabled: props.enabledSources.has("amp"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "7" : "7:DR", source: "droid", enabled: props.enabledSources.has("droid"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "8" : "8:CL", source: "openclaw", enabled: props.enabledSources.has("openclaw"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "9" : "9:PI", source: "pi", enabled: props.enabledSources.has("pi"), onToggle: props.onSourceToggle }), _jsx(SourceBadge, { name: isVeryNarrowTerminal() ? "0" : "0:KM", source: "kimi", enabled: props.enabledSources.has("kimi"), onToggle: props.onSourceToggle }), _jsxs(Show, { when: !isVeryNarrowTerminal(), children: [_jsx("text", { dim: true, children: "|" }), _jsx(SortButton, { label: "Date", sortType: "date", active: props.sortBy === "date", onClick: props.onSortChange }), _jsx(SortButton, { label: "Cost", sortType: "cost", active: props.sortBy === "cost", onClick: props.onSortChange }), _jsx(SortButton, { label: "Tokens", sortType: "tokens", active: props.sortBy === "tokens", onClick: props.onSortChange })] }), _jsxs(Show, { when: showScrollInfo() && !isVeryNarrowTerminal(), children: [_jsx("text", { dim: true, children: "|" }), _jsx("text", { dim: true, children: `↓ ${props.scrollStart + 1}-${props.scrollEnd} of ${props.totalItems}` })] })] }), _jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: "cyan", children: formatTokens(totals().total) }), _jsx("text", { dim: true, children: "tokens" }), _jsx("text", { dim: true, children: "|" }), _jsx("text", { fg: "green", bold: true, children: `$${totals().cost.toFixed(2)}` }), _jsx(Show, { when: !isVeryNarrowTerminal(), children: _jsxs("text", { dim: true, children: ["(", props.modelCount, " models)"] }) })] })] }), _jsx("box", { flexDirection: "row", gap: 1, children: _jsx(Show, { when: props.statusMessage, fallback: _jsxs(Show, { when: isVeryNarrowTerminal(), fallback: _jsxs(_Fragment, { children: [_jsx("text", { dim: true, children: "\u2191\u2193 scroll \u2022 \u2190\u2192/tab view \u2022 y copy \u2022" }), _jsx("box", { onMouseDown: props.onPaletteChange, children: _jsx("text", { fg: "magenta", children: `[p:${palette().name}]` }) }), _jsx("text", { fg: props.autoRefreshEnabled ? "green" : "gray", children: `[Shift+R:auto update ${formatIntervalSeconds(props.autoRefreshMs)}]` }), _jsx("text", { dim: true, children: "[-/+ interval]\u2022" }), _jsx("box", { onMouseDown: props.onRefresh, children: _jsx("text", { fg: "yellow", children: "[r:refresh]" }) }), _jsx("text", { dim: true, children: "\u2022 e export \u2022 q quit" })] }), children: [_jsx("text", { dim: true, children: "\u2191\u2193\u2022\u2190\u2192\u2022y\u2022" }), _jsx("box", { onMouseDown: props.onPaletteChange, children: _jsx("text", { fg: "magenta", children: "[p]" }) }), _jsx("text", { fg: props.autoRefreshEnabled ? "green" : "gray", children: `[Shift+R:auto update ${formatIntervalSeconds(props.autoRefreshMs)}]` }), _jsx("text", { dim: true, children: "-+\u2022" }), _jsx("box", { onMouseDown: props.onRefresh, children: _jsx("text", { fg: "yellow", children: "[r]" }) }), _jsx("text", { dim: true, children: "\u2022e\u2022q" })] }), children: _jsx("text", { fg: "green", bold: true, children: props.statusMessage }) }) }), _jsx(Show, { when: props.isRefreshing, children: _jsx(LoadingStatusLine, { phase: props.loadingPhase }) }), _jsx(Show, { when: !props.isRefreshing && props.cacheTimestamp, children: _jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { dim: true, children: `Last updated: ${formatTimeAgo(props.cacheTimestamp, now())}` }), _jsx(Show, { when: props.autoRefreshEnabled, children: _jsx("text", { dim: true, children: `• Auto: ${formatIntervalSeconds(props.autoRefreshMs)}` }) })] }) })] }));
62
- }
63
- function SourceBadge(props) {
64
- const handleClick = () => props.onToggle?.(props.source);
65
- return (_jsx("box", { onMouseDown: handleClick, children: _jsx("text", { fg: props.enabled ? "green" : "gray", children: `[${props.enabled ? "●" : "○"}${props.name}]` }) }));
66
- }
67
- function SortButton(props) {
68
- const handleClick = () => props.onClick?.(props.sortType);
69
- return (_jsx("box", { onMouseDown: handleClick, children: _jsx("text", { fg: props.active ? "white" : "gray", bold: props.active, children: props.label }) }));
70
- }
71
- const SPINNER_COLORS = [
72
- "#00FFFF",
73
- "#00D7D7",
74
- "#00AFAF",
75
- "#008787",
76
- "#666666",
77
- "#666666",
78
- ];
79
- const SPINNER_WIDTH = 6;
80
- const SPINNER_HOLD_START = 20;
81
- const SPINNER_HOLD_END = 6;
82
- const SPINNER_TRAIL = 3;
83
- const SPINNER_INTERVAL = 40;
84
- const PHASE_MESSAGES = {
85
- idle: "Initializing...",
86
- "parsing-sources": "Scanning session data...",
87
- "loading-pricing": "Loading pricing data...",
88
- "finalizing-report": "Finalizing report...",
89
- complete: "Complete",
90
- };
91
- function LoadingStatusLine(props) {
92
- const [frame, setFrame] = createSignal(0);
93
- onMount(() => {
94
- const id = setInterval(() => setFrame((f) => f + 1), SPINNER_INTERVAL);
95
- onCleanup(() => clearInterval(id));
96
- });
97
- const getSpinnerState = () => {
98
- const forwardFrames = SPINNER_WIDTH;
99
- const backwardFrames = SPINNER_WIDTH - 1;
100
- const totalCycle = forwardFrames + SPINNER_HOLD_END + backwardFrames + SPINNER_HOLD_START;
101
- const normalized = frame() % totalCycle;
102
- if (normalized < forwardFrames) {
103
- return { position: normalized, forward: true };
104
- }
105
- else if (normalized < forwardFrames + SPINNER_HOLD_END) {
106
- return { position: SPINNER_WIDTH - 1, forward: true };
107
- }
108
- else if (normalized < forwardFrames + SPINNER_HOLD_END + backwardFrames) {
109
- return {
110
- position: SPINNER_WIDTH - 2 - (normalized - forwardFrames - SPINNER_HOLD_END),
111
- forward: false,
112
- };
113
- }
114
- return { position: 0, forward: false };
115
- };
116
- const getCharProps = (index) => {
117
- const { position, forward } = getSpinnerState();
118
- const distance = forward ? position - index : index - position;
119
- if (distance >= 0 && distance < SPINNER_TRAIL) {
120
- return { char: "■", color: SPINNER_COLORS[distance] };
121
- }
122
- return { char: "⬝", color: "#444444" };
123
- };
124
- const message = () => props.phase ? PHASE_MESSAGES[props.phase] : "Refreshing...";
125
- return (_jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("box", { flexDirection: "row", gap: 0, children: Array.from({ length: SPINNER_WIDTH }, (_, i) => {
126
- const { char, color } = getCharProps(i);
127
- return _jsx("text", { fg: color, children: char });
128
- }) }), _jsx("text", { dim: true, children: message() })] }));
129
- }
130
- //# sourceMappingURL=Footer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../src/tui/components/Footer.tsx"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import type { TabType } from "../types/index.js";
2
- interface HeaderProps {
3
- activeTab: TabType;
4
- onTabClick?: (tab: TabType) => void;
5
- width?: number;
6
- }
7
- export declare function Header(props: HeaderProps): any;
8
- export {};
9
- //# sourceMappingURL=Header.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAUjD,UAAU,WAAW;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,OAuBxC"}
@@ -1,20 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
2
- import { Show } from "solid-js";
3
- import { exec } from "node:child_process";
4
- import { isNarrow, isVeryNarrow } from "../utils/responsive.js";
5
- const REPO_URL = "https://github.com/junhoyeo/tokscale";
6
- function openUrl(url) {
7
- const cmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
8
- exec(`${cmd} ${url}`);
9
- }
10
- export function Header(props) {
11
- const isNarrowTerminal = () => isNarrow(props.width);
12
- const isVeryNarrowTerminal = () => isVeryNarrow(props.width);
13
- const getTabName = (fullName, shortName) => isVeryNarrowTerminal() ? shortName : fullName;
14
- return (_jsxs("box", { flexDirection: "row", paddingX: 1, paddingY: 0, justifyContent: "space-between", children: [_jsxs("box", { flexDirection: "row", gap: isVeryNarrowTerminal() ? 1 : 2, children: [_jsx(Tab, { name: getTabName("Overview", "Ovw"), tabId: "overview", active: props.activeTab === "overview", onClick: props.onTabClick }), _jsx(Tab, { name: getTabName("Models", "Mod"), tabId: "model", active: props.activeTab === "model", onClick: props.onTabClick }), _jsx(Tab, { name: getTabName("Daily", "Day"), tabId: "daily", active: props.activeTab === "daily", onClick: props.onTabClick }), _jsx(Tab, { name: getTabName("Stats", "Sta"), tabId: "stats", active: props.activeTab === "stats", onClick: props.onTabClick })] }), _jsx(Show, { when: !isNarrowTerminal(), children: _jsxs("box", { flexDirection: "row", onMouseDown: () => openUrl(REPO_URL), children: [_jsx("text", { fg: "cyan", bold: true, children: "tokscale" }), _jsx("text", { fg: "#666666", children: " | GitHub" })] }) })] }));
15
- }
16
- function Tab(props) {
17
- const handleClick = () => props.onClick?.(props.tabId);
18
- return (_jsx(Show, { when: props.active, fallback: _jsx("box", { onMouseDown: handleClick, children: _jsx("text", { dim: true, children: props.name }) }), children: _jsx("box", { onMouseDown: handleClick, children: _jsx("text", { bg: "cyan", fg: "black", bold: true, children: ` ${props.name} ` }) }) }));
19
- }
20
- //# sourceMappingURL=Header.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- interface LegendProps {
2
- models: string[];
3
- width?: number;
4
- }
5
- export declare function Legend(props: LegendProps): any;
6
- export {};
7
- //# sourceMappingURL=Legend.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Legend.d.ts","sourceRoot":"","sources":["../../../src/tui/components/Legend.tsx"],"names":[],"mappings":"AAIA,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,OA6BxC"}
@@ -1,16 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
2
- import { For, Show } from "solid-js";
3
- import { getModelColor } from "../utils/colors.js";
4
- import { isNarrow, isVeryNarrow } from "../utils/responsive.js";
5
- export function Legend(props) {
6
- const isNarrowTerminal = () => isNarrow(props.width);
7
- const isVeryNarrowTerminal = () => isVeryNarrow(props.width);
8
- const maxModelNameWidth = () => isVeryNarrowTerminal() ? 12 : isNarrowTerminal() ? 18 : 30;
9
- const truncateModelName = (name) => {
10
- const max = maxModelNameWidth();
11
- return name.length > max ? name.slice(0, max - 1) + "…" : name;
12
- };
13
- const models = () => props.models;
14
- return (_jsx(Show, { when: models().length > 0, children: _jsx("box", { flexDirection: "row", gap: 1, flexWrap: "wrap", children: _jsx(For, { each: models(), children: (modelId, i) => (_jsxs("box", { flexDirection: "row", gap: 0, children: [_jsx("text", { fg: getModelColor(modelId), children: "\u25CF" }), _jsx("text", { children: ` ${truncateModelName(modelId)}` }), _jsx(Show, { when: i() < models().length - 1, children: _jsx("text", { dim: true, children: isVeryNarrowTerminal() ? " " : " ·" }) })] })) }) }) }));
15
- }
16
- //# sourceMappingURL=Legend.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Legend.js","sourceRoot":"","sources":["../../../src/tui/components/Legend.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAOhE,MAAM,UAAU,MAAM,CAAC,KAAkB;IACvC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE7D,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,EAAE;QACzC,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;IAElC,OAAO,CACL,KAAC,IAAI,IAAC,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,YAC7B,cAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAC,MAAM,YAC9C,KAAC,GAAG,IAAC,IAAI,EAAE,MAAM,EAAE,YAChB,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CACf,eAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,aAC7B,eAAM,EAAE,EAAE,aAAa,CAAC,OAAO,CAAC,uBAAU,EAC1C,yBAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,GAAQ,EAC/C,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,YACnC,eAAM,GAAG,kBAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAQ,GAClD,IACH,CACP,GACG,GACF,GACD,CACR,CAAC;AACJ,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { LoadingPhase } from "../types/index.js";
2
- interface LoadingSpinnerProps {
3
- message?: string;
4
- phase?: LoadingPhase;
5
- }
6
- export declare function LoadingSpinner(props: LoadingSpinnerProps): any;
7
- export {};
8
- //# sourceMappingURL=LoadingSpinner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoadingSpinner.d.ts","sourceRoot":"","sources":["../../../src/tui/components/LoadingSpinner.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAsCtD,UAAU,mBAAmB;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,OAoCxD"}
@@ -1,55 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
2
- import { createSignal, onMount, onCleanup } from "solid-js";
3
- const COLORS = ["#00FFFF", "#00D7D7", "#00AFAF", "#008787", "#666666", "#666666", "#666666", "#666666"];
4
- const WIDTH = 8;
5
- const HOLD_START = 30;
6
- const HOLD_END = 9;
7
- const TRAIL_LENGTH = 4;
8
- const INTERVAL = 40;
9
- function getScannerState(frame) {
10
- const forwardFrames = WIDTH;
11
- const backwardFrames = WIDTH - 1;
12
- const totalCycle = forwardFrames + HOLD_END + backwardFrames + HOLD_START;
13
- const normalized = frame % totalCycle;
14
- if (normalized < forwardFrames) {
15
- return { position: normalized, forward: true };
16
- }
17
- else if (normalized < forwardFrames + HOLD_END) {
18
- return { position: WIDTH - 1, forward: true };
19
- }
20
- else if (normalized < forwardFrames + HOLD_END + backwardFrames) {
21
- return { position: WIDTH - 2 - (normalized - forwardFrames - HOLD_END), forward: false };
22
- }
23
- return { position: 0, forward: false };
24
- }
25
- const PHASE_MESSAGES = {
26
- "idle": "Initializing...",
27
- "parsing-sources": "Scanning session data...",
28
- "loading-pricing": "Loading pricing data...",
29
- "finalizing-report": "Finalizing report...",
30
- "complete": "Complete",
31
- };
32
- export function LoadingSpinner(props) {
33
- const [frame, setFrame] = createSignal(0);
34
- onMount(() => {
35
- const id = setInterval(() => {
36
- setFrame((f) => f + 1);
37
- }, INTERVAL);
38
- onCleanup(() => clearInterval(id));
39
- });
40
- const state = () => getScannerState(frame());
41
- const displayMessage = () => props.message || (props.phase ? PHASE_MESSAGES[props.phase] : "Loading data...");
42
- const getCharProps = (index) => {
43
- const { position, forward } = state();
44
- const distance = forward ? position - index : index - position;
45
- if (distance >= 0 && distance < TRAIL_LENGTH) {
46
- return { char: "■", color: COLORS[distance] };
47
- }
48
- return { char: "⬝", color: "#444444" };
49
- };
50
- return (_jsxs("box", { flexDirection: "column", justifyContent: "center", alignItems: "center", flexGrow: 1, children: [_jsx("box", { flexDirection: "row", gap: 0, children: Array.from({ length: WIDTH }, (_, i) => {
51
- const { char, color } = getCharProps(i);
52
- return _jsx("text", { fg: color, children: char });
53
- }) }), _jsx("box", { marginTop: 1, children: _jsx("text", { dim: true, children: displayMessage() }) })] }));
54
- }
55
- //# sourceMappingURL=LoadingSpinner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoadingSpinner.js","sourceRoot":"","sources":["../../../src/tui/components/LoadingSpinner.tsx"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import { type TokenBreakdownData } from "./TokenBreakdown.js";
2
- interface ModelRowProps {
3
- modelId: string;
4
- tokens: TokenBreakdownData;
5
- percentage?: number;
6
- isActive?: boolean;
7
- compact?: boolean;
8
- indent?: number;
9
- maxNameWidth?: number;
10
- }
11
- export declare function ModelRow(props: ModelRowProps): any;
12
- export {};
13
- //# sourceMappingURL=ModelRow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ModelRow.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ModelRow.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG9E,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,OAgC5C"}
@@ -1,15 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
2
- import { Show, createMemo } from "solid-js";
3
- import { TokenBreakdown } from "./TokenBreakdown.js";
4
- import { getModelColor } from "../utils/colors.js";
5
- export function ModelRow(props) {
6
- const color = () => getModelColor(props.modelId);
7
- const bgColor = createMemo(() => props.isActive ? "blue" : undefined);
8
- const truncateName = (name) => {
9
- const max = props.maxNameWidth ?? 50;
10
- return name.length > max ? name.slice(0, max - 1) + "…" : name;
11
- };
12
- const indentStr = () => " ".repeat(props.indent ?? 0);
13
- return (_jsxs("box", { flexDirection: "column", children: [_jsxs("box", { flexDirection: "row", backgroundColor: bgColor(), children: [_jsx(Show, { when: props.indent, children: _jsx("text", { children: indentStr() }) }), _jsx("text", { fg: color(), bg: bgColor(), children: "\u25CF" }), _jsx("text", { fg: props.isActive ? "white" : undefined, bg: bgColor(), children: ` ${truncateName(props.modelId)}` }), _jsx(Show, { when: props.percentage !== undefined, children: _jsx("text", { dim: true, bg: bgColor(), children: ` (${props.percentage.toFixed(1)}%)` }) })] }), _jsx("box", { flexDirection: "row", children: _jsx(TokenBreakdown, { tokens: props.tokens, compact: props.compact, indent: (props.indent ?? 0) + 2 }) })] }));
14
- }
15
- //# sourceMappingURL=ModelRow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ModelRow.js","sourceRoot":"","sources":["../../../src/tui/components/ModelRow.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,cAAc,EAA2B,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAYnD,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEtE,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;QACpC,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAEtD,OAAO,CACL,eAAK,aAAa,EAAC,QAAQ,aACzB,eAAK,aAAa,EAAC,KAAK,EAAC,eAAe,EAAE,OAAO,EAAE,aACjD,KAAC,IAAI,IAAC,IAAI,EAAE,KAAK,CAAC,MAAM,YACtB,yBAAO,SAAS,EAAE,GAAQ,GACrB,EACP,eAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,uBAAU,EAC1C,eAAM,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,YAAG,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,GAAQ,EACzG,KAAC,IAAI,IAAC,IAAI,EAAE,KAAK,CAAC,UAAU,KAAK,SAAS,YACxC,eAAM,GAAG,QAAC,EAAE,EAAE,OAAO,EAAE,YAAG,KAAK,KAAK,CAAC,UAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAQ,GAClE,IACH,EACN,cAAK,aAAa,EAAC,KAAK,YACtB,KAAC,cAAc,IACb,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,GAC/B,GACE,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -1,13 +0,0 @@
1
- import { type Accessor } from "solid-js";
2
- import type { TUIData, SortType } from "../hooks/useData.js";
3
- interface ModelViewProps {
4
- data: TUIData;
5
- sortBy: SortType;
6
- sortDesc: boolean;
7
- selectedIndex: Accessor<number>;
8
- height: number;
9
- width: number;
10
- }
11
- export declare function ModelView(props: ModelViewProps): any;
12
- export {};
13
- //# sourceMappingURL=ModelView.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ModelView.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ModelView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAmB7D,UAAU,cAAc;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,OAqH9C"}