cohvu 2.10.1 → 2.10.2
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.
|
@@ -1,26 +1,51 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text, Spacer, useStdout } from 'ink';
|
|
3
3
|
import { getActiveProject, getActiveTeam } from '../state.js';
|
|
4
4
|
import { daysUntil } from '../utils.js';
|
|
5
|
+
function truncStr(s, max) {
|
|
6
|
+
if (max <= 0)
|
|
7
|
+
return '';
|
|
8
|
+
if (s.length <= max)
|
|
9
|
+
return s;
|
|
10
|
+
return s.slice(0, max - 1) + '\u2026';
|
|
11
|
+
}
|
|
5
12
|
export function Header({ state }) {
|
|
6
13
|
const { stdout } = useStdout();
|
|
14
|
+
const cols = stdout.columns;
|
|
7
15
|
const project = getActiveProject(state);
|
|
8
16
|
const team = getActiveTeam(state);
|
|
9
17
|
const projectLabel = project
|
|
10
18
|
? team ? `${team.name} / ${project.name}` : project.name
|
|
11
19
|
: 'no project';
|
|
12
|
-
|
|
20
|
+
// Build left parts to measure
|
|
21
|
+
const statusText = getStatusText(state);
|
|
22
|
+
const projectsText = state.projects.length >= 2 ? `${state.projects.length} projects` : '';
|
|
23
|
+
const email = state.user?.email ?? '';
|
|
24
|
+
// "cohvu · " = 10 chars base
|
|
25
|
+
let leftLen = 10 + projectLabel.length;
|
|
26
|
+
if (statusText)
|
|
27
|
+
leftLen += 5 + statusText.length; // " · " + status
|
|
28
|
+
if (projectsText)
|
|
29
|
+
leftLen += 5 + projectsText.length;
|
|
30
|
+
// Truncate project label if left side alone exceeds width
|
|
31
|
+
const maxProjectLen = Math.max(8, cols - 20 - (statusText ? statusText.length + 5 : 0));
|
|
32
|
+
const displayProject = truncStr(projectLabel, maxProjectLen);
|
|
33
|
+
// Only show email if there's room (at least 10 chars for it)
|
|
34
|
+
const leftUsed = 10 + displayProject.length + (statusText ? 5 + statusText.length : 0) + (projectsText ? 5 + projectsText.length : 0);
|
|
35
|
+
const emailSpace = cols - leftUsed - 2;
|
|
36
|
+
const displayEmail = emailSpace >= 10 ? truncStr(email, emailSpace) : '';
|
|
37
|
+
return (_jsxs(Box, { width: cols, children: [_jsx(Text, { color: "gray", children: "cohvu" }), _jsx(Text, { color: "gray", dimColor: true, children: " \u00B7 " }), _jsx(Text, { dimColor: true, children: displayProject }), renderStatus(state), projectsText ? (_jsxs(_Fragment, { children: [_jsx(Text, { color: "gray", dimColor: true, children: " \u00B7 " }), _jsx(Text, { color: "gray", children: projectsText })] })) : null, _jsx(Spacer, {}), displayEmail ? _jsx(Text, { color: "gray", children: displayEmail }) : null] }));
|
|
13
38
|
}
|
|
14
|
-
function
|
|
39
|
+
function getStatusText(state) {
|
|
15
40
|
if (state.paused)
|
|
16
|
-
return
|
|
41
|
+
return 'paused';
|
|
17
42
|
if (state.offline)
|
|
18
|
-
return
|
|
43
|
+
return 'offline';
|
|
19
44
|
if (!state.sseConnected && state.activeProjectId)
|
|
20
|
-
return
|
|
45
|
+
return 'reconnecting';
|
|
21
46
|
const project = getActiveProject(state);
|
|
22
47
|
if (!project)
|
|
23
|
-
return
|
|
48
|
+
return '';
|
|
24
49
|
if (project.owner.kind === 'team') {
|
|
25
50
|
const team = getActiveTeam(state);
|
|
26
51
|
const sub = team?.subscription;
|
|
@@ -28,40 +53,52 @@ function renderStatus(state) {
|
|
|
28
53
|
const teamData = state.teams.find(t => t.team_id === team?.team_id);
|
|
29
54
|
if (teamData?.trial_ends_at) {
|
|
30
55
|
const days = daysUntil(teamData.trial_ends_at);
|
|
31
|
-
if (days > 0)
|
|
32
|
-
|
|
33
|
-
return _jsxs(_Fragment, { children: [_jsx(Text, { color: "gray", dimColor: true, children: " \u00B7 " }), _jsxs(Text, { color: "yellow", dimColor: true, children: ["trial \u00B7 ", label] })] });
|
|
34
|
-
}
|
|
56
|
+
if (days > 0)
|
|
57
|
+
return `trial · ${days === 1 ? '1 day left' : `${days} days left`}`;
|
|
35
58
|
}
|
|
36
|
-
return
|
|
59
|
+
return 'locked';
|
|
37
60
|
}
|
|
38
61
|
if (sub.status === 'active')
|
|
39
|
-
return
|
|
62
|
+
return 'active';
|
|
40
63
|
if (sub.status === 'past_due')
|
|
41
|
-
return
|
|
64
|
+
return 'past due';
|
|
42
65
|
if (sub.status === 'canceled' || sub.cancel_at_period_end)
|
|
43
|
-
return
|
|
44
|
-
return
|
|
66
|
+
return 'canceled';
|
|
67
|
+
return 'locked';
|
|
45
68
|
}
|
|
46
|
-
// Personal project
|
|
47
69
|
const user = state.user;
|
|
48
70
|
if (user?.trial_ends_at) {
|
|
49
71
|
const days = daysUntil(user.trial_ends_at);
|
|
50
|
-
if (days > 0)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (!state.individualSubscription || state.individualSubscription.status !== 'active') {
|
|
55
|
-
return _jsxs(_Fragment, { children: [_jsx(Text, { color: "gray", dimColor: true, children: " \u00B7 " }), _jsx(Text, { color: "red", children: "trial ended" })] });
|
|
56
|
-
}
|
|
72
|
+
if (days > 0)
|
|
73
|
+
return `trial · ${days === 1 ? '1 day left' : `${days} days left`}`;
|
|
74
|
+
if (!state.individualSubscription || state.individualSubscription.status !== 'active')
|
|
75
|
+
return 'trial ended';
|
|
57
76
|
}
|
|
58
77
|
const sub = state.individualSubscription;
|
|
59
78
|
if (sub?.status === 'active')
|
|
60
|
-
return
|
|
79
|
+
return 'active';
|
|
61
80
|
if (sub?.status === 'past_due')
|
|
62
|
-
return
|
|
81
|
+
return 'past due';
|
|
63
82
|
if (sub?.status === 'canceled' || sub?.cancel_at_period_end)
|
|
64
|
-
return
|
|
65
|
-
return
|
|
83
|
+
return 'canceled';
|
|
84
|
+
return 'locked';
|
|
85
|
+
}
|
|
86
|
+
function renderStatus(state) {
|
|
87
|
+
const text = getStatusText(state);
|
|
88
|
+
if (!text)
|
|
89
|
+
return null;
|
|
90
|
+
let color = 'red';
|
|
91
|
+
let dim = false;
|
|
92
|
+
if (text === 'active')
|
|
93
|
+
color = 'green';
|
|
94
|
+
else if (text === 'paused' || text.startsWith('trial')) {
|
|
95
|
+
color = 'yellow';
|
|
96
|
+
dim = true;
|
|
97
|
+
}
|
|
98
|
+
else if (text === 'reconnecting') {
|
|
99
|
+
color = 'gray';
|
|
100
|
+
dim = true;
|
|
101
|
+
}
|
|
102
|
+
return _jsxs(_Fragment, { children: [_jsx(Text, { color: "gray", dimColor: true, children: " \u00B7 " }), _jsx(Text, { color: color, dimColor: dim, children: text })] });
|
|
66
103
|
}
|
|
67
104
|
//# sourceMappingURL=Header.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAuB;IACnD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,OAAO;QAC1B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI;QACxD,CAAC,CAAC,YAAY,CAAC;IAEjB,
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":"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"}
|