@spences10/pi-git-ui 0.0.1 → 0.0.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.
- package/README.md +10 -0
- package/dist/git/client.d.ts +2 -0
- package/dist/git/client.js +35 -0
- package/dist/git/client.js.map +1 -0
- package/dist/git/diff.d.ts +9 -0
- package/dist/git/diff.js +150 -0
- package/dist/git/diff.js.map +1 -0
- package/dist/git/errors.d.ts +1 -0
- package/dist/git/errors.js +17 -0
- package/dist/git/errors.js.map +1 -0
- package/dist/git/operations.d.ts +8 -0
- package/dist/git/operations.js +35 -0
- package/dist/git/operations.js.map +1 -0
- package/dist/git/overview.d.ts +2 -0
- package/dist/git/overview.js +23 -0
- package/dist/git/overview.js.map +1 -0
- package/dist/git/status.d.ts +5 -0
- package/dist/git/status.js +85 -0
- package/dist/git/status.js.map +1 -0
- package/dist/git/types.d.ts +33 -0
- package/dist/git/types.js +7 -0
- package/dist/git/types.js.map +1 -0
- package/dist/git.d.ts +7 -31
- package/dist/git.js +6 -162
- package/dist/git.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/stage-body.d.ts +26 -9
- package/dist/stage-body.js +298 -109
- package/dist/stage-body.js.map +1 -1
- package/dist/stage-render.d.ts +2 -0
- package/dist/stage-render.js +164 -0
- package/dist/stage-render.js.map +1 -0
- package/dist/stage-types.d.ts +23 -0
- package/dist/stage-types.js +2 -0
- package/dist/stage-types.js.map +1 -0
- package/package.json +7 -5
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { Text } from '@earendil-works/pi-tui';
|
|
2
|
+
import { staged_file_count, } from './git.js';
|
|
3
|
+
import { pad_ansi, pad_plain, state_counts, state_icon, state_label, status_code, truncate_plain, } from './render.js';
|
|
4
|
+
export function render_stage(state, width) {
|
|
5
|
+
if (state.actions)
|
|
6
|
+
return render_action_menu(state, width);
|
|
7
|
+
if (state.repo_overview)
|
|
8
|
+
return render_repo_overview(state, width);
|
|
9
|
+
const lines = render_header(state, width);
|
|
10
|
+
if (state.message)
|
|
11
|
+
lines.push(...render_message(state, width));
|
|
12
|
+
if (state.status.files.length === 0)
|
|
13
|
+
return lines;
|
|
14
|
+
return [...lines, ...render_workbench(state, width)];
|
|
15
|
+
}
|
|
16
|
+
function render_header(state, width) {
|
|
17
|
+
const upstream = state.status.upstream
|
|
18
|
+
? ` • ${state.status.upstream} ↑${state.status.ahead} ↓${state.status.behind}`
|
|
19
|
+
: '';
|
|
20
|
+
const counts = state_counts(state.status.files);
|
|
21
|
+
const staged = staged_file_count(state.status.files);
|
|
22
|
+
const filter_status = state.visible_files.length !== state.status.files.length
|
|
23
|
+
? ` • filtered ${state.visible_files.length}/${state.status.files.length}`
|
|
24
|
+
: '';
|
|
25
|
+
const text = `branch ${state.status.branch}${upstream} • ${state.status.files.length} files • staged ${staged}${filter_status}${counts ? ` • ${counts}` : ''}`;
|
|
26
|
+
return new Text(state.theme.fg('muted', text), 0, 0).render(width);
|
|
27
|
+
}
|
|
28
|
+
function render_message(state, width) {
|
|
29
|
+
const color = state.busy
|
|
30
|
+
? 'accent'
|
|
31
|
+
: state.message.includes('disabled') ||
|
|
32
|
+
state.message.includes('conflict') ||
|
|
33
|
+
state.message.includes('blocked')
|
|
34
|
+
? 'warning'
|
|
35
|
+
: 'dim';
|
|
36
|
+
return new Text(state.theme.fg(color, state.message), 0, 0).render(width);
|
|
37
|
+
}
|
|
38
|
+
function render_action_menu(state, width) {
|
|
39
|
+
const file = selected_file(state);
|
|
40
|
+
const lines = [
|
|
41
|
+
state.theme.bold('Actions'),
|
|
42
|
+
state.theme.fg('muted', file?.path ?? 'No file selected'),
|
|
43
|
+
'',
|
|
44
|
+
];
|
|
45
|
+
for (let index = 0; index < (state.actions?.length ?? 0); index++) {
|
|
46
|
+
const action = state.actions[index];
|
|
47
|
+
const prefix = index === state.selected_action ? '› ' : ' ';
|
|
48
|
+
const line = `${prefix}${action.action_label.padEnd(18)} ${state.theme.fg('dim', action.action_description)}`;
|
|
49
|
+
lines.push(index === state.selected_action
|
|
50
|
+
? state.theme.fg('accent', state.theme.bold(line))
|
|
51
|
+
: line);
|
|
52
|
+
}
|
|
53
|
+
lines.push('', state.theme.fg('dim', '↑↓/jk move • enter run • esc cancel'));
|
|
54
|
+
return lines.flatMap((line) => new Text(line, 0, 0).render(width));
|
|
55
|
+
}
|
|
56
|
+
function render_repo_overview(state, width) {
|
|
57
|
+
const overview = state.repo_overview;
|
|
58
|
+
if (!overview)
|
|
59
|
+
return [];
|
|
60
|
+
const lines = [
|
|
61
|
+
state.theme.bold('Repository'),
|
|
62
|
+
state.theme.fg('dim', 'q/esc back'),
|
|
63
|
+
'',
|
|
64
|
+
state.theme.fg('accent', state.theme.bold('Branches')),
|
|
65
|
+
...render_section(overview.branches, 'No branches found'),
|
|
66
|
+
'',
|
|
67
|
+
state.theme.fg('accent', state.theme.bold('Recent commits')),
|
|
68
|
+
...render_section(overview.log, 'No commits found'),
|
|
69
|
+
'',
|
|
70
|
+
state.theme.fg('accent', state.theme.bold('Stashes')),
|
|
71
|
+
...render_section(overview.stashes, 'No stashes'),
|
|
72
|
+
'',
|
|
73
|
+
state.theme.fg('accent', state.theme.bold('Remotes')),
|
|
74
|
+
...render_section(overview.remotes, 'No remotes'),
|
|
75
|
+
];
|
|
76
|
+
return lines.flatMap((line) => new Text(truncate_plain(line, width), 0, 0).render(width));
|
|
77
|
+
}
|
|
78
|
+
function render_workbench(state, width) {
|
|
79
|
+
const gap = width >= 96 ? 3 : 1;
|
|
80
|
+
const list_width = Math.min(42, Math.max(28, Math.floor(width * 0.42)));
|
|
81
|
+
const diff_width = Math.max(20, width - list_width - gap);
|
|
82
|
+
const list = render_file_list(state, list_width);
|
|
83
|
+
const diff = render_diff(state, diff_width, list.length);
|
|
84
|
+
const height = Math.max(list.length, diff.length);
|
|
85
|
+
const lines = [];
|
|
86
|
+
for (let i = 0; i < height; i++) {
|
|
87
|
+
const left = pad_ansi(list[i] ?? '', list_width);
|
|
88
|
+
lines.push(`${left}${' '.repeat(gap)}${diff[i] ?? ''}`);
|
|
89
|
+
}
|
|
90
|
+
return lines;
|
|
91
|
+
}
|
|
92
|
+
function render_file_list(state, width) {
|
|
93
|
+
const lines = [state.theme.bold('Files')];
|
|
94
|
+
let last_state;
|
|
95
|
+
for (let i = 0; i < state.visible_files.length; i++) {
|
|
96
|
+
const file = state.visible_files[i];
|
|
97
|
+
if (file.state !== last_state) {
|
|
98
|
+
lines.push(state.theme.fg('dim', state_label(file.state).toUpperCase()));
|
|
99
|
+
last_state = file.state;
|
|
100
|
+
}
|
|
101
|
+
const selected = i === state.selected;
|
|
102
|
+
const prefix = selected ? '› ' : ' ';
|
|
103
|
+
const label_width = Math.max(8, width - 14);
|
|
104
|
+
const label = truncate_plain(file.path, label_width);
|
|
105
|
+
const meta = `${state_icon(file.state)} ${status_code(file)}`;
|
|
106
|
+
const line = `${prefix}${pad_plain(label, label_width)} ${meta}`;
|
|
107
|
+
lines.push(selected
|
|
108
|
+
? state.theme.fg('accent', state.theme.bold(line))
|
|
109
|
+
: line);
|
|
110
|
+
}
|
|
111
|
+
return lines;
|
|
112
|
+
}
|
|
113
|
+
function render_diff(state, width, height) {
|
|
114
|
+
const selected = selected_file(state);
|
|
115
|
+
const title = selected
|
|
116
|
+
? `Diff: ${truncate_plain(selected.path, Math.max(0, width - 6))}`
|
|
117
|
+
: 'Diff';
|
|
118
|
+
const lines = [state.theme.bold(title)];
|
|
119
|
+
if (selected?.state === 'conflicted') {
|
|
120
|
+
lines.push(state.theme.fg('warning', 'Conflict: resolve markers in your editor, then stage the file.'), '');
|
|
121
|
+
}
|
|
122
|
+
if (!state.diff || state.diff.path !== state.diff_for_path) {
|
|
123
|
+
lines.push(state.theme.fg('dim', 'Loading diff…'));
|
|
124
|
+
return lines;
|
|
125
|
+
}
|
|
126
|
+
const visible = Math.max(1, height - 1);
|
|
127
|
+
const max_scroll = Math.max(0, state.diff.lines.length - visible);
|
|
128
|
+
const diff_scroll = Math.min(state.diff_scroll, max_scroll);
|
|
129
|
+
const body = state.diff.lines.slice(diff_scroll, diff_scroll + visible);
|
|
130
|
+
for (let index = 0; index < body.length; index++) {
|
|
131
|
+
const line_index = diff_scroll + index;
|
|
132
|
+
const selected_hunk = state.diff.hunks[state.selected_hunk];
|
|
133
|
+
lines.push(format_diff_line(state, body[index], width, selected_hunk?.line_index === line_index, state.selected_line_index === line_index));
|
|
134
|
+
}
|
|
135
|
+
if (max_scroll > 0) {
|
|
136
|
+
lines[0] = `${lines[0]} ${state.theme.fg('dim', `${diff_scroll + 1}-${Math.min(diff_scroll + visible, state.diff.lines.length)}/${state.diff.lines.length}`)}`;
|
|
137
|
+
}
|
|
138
|
+
return lines;
|
|
139
|
+
}
|
|
140
|
+
function format_diff_line(state, raw, width, selected_hunk = false, selected_line = false) {
|
|
141
|
+
const marker = selected_line ? '» ' : selected_hunk ? '› ' : '';
|
|
142
|
+
const text = truncate_plain(`${marker}${raw.replace(/\t/g, ' ')}`, width);
|
|
143
|
+
if (raw === 'STAGED' || raw === 'UNSTAGED') {
|
|
144
|
+
return state.theme.fg('accent', state.theme.bold(text));
|
|
145
|
+
}
|
|
146
|
+
if (raw.startsWith('+++') || raw.startsWith('---'))
|
|
147
|
+
return state.theme.fg('muted', text);
|
|
148
|
+
if (raw.startsWith('@@'))
|
|
149
|
+
return state.theme.fg('accent', text);
|
|
150
|
+
if (raw.startsWith('+'))
|
|
151
|
+
return state.theme.fg('success', text);
|
|
152
|
+
if (raw.startsWith('-'))
|
|
153
|
+
return state.theme.fg('warning', text);
|
|
154
|
+
return text;
|
|
155
|
+
}
|
|
156
|
+
function selected_file(state) {
|
|
157
|
+
return state.visible_files[state.selected];
|
|
158
|
+
}
|
|
159
|
+
function render_section(items, empty_text) {
|
|
160
|
+
if (items.length === 0)
|
|
161
|
+
return [` ${empty_text}`];
|
|
162
|
+
return items.map((item) => ` ${item}`);
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=stage-render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stage-render.js","sourceRoot":"","sources":["../src/stage-render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ModalTheme } from '@spences10/pi-tui-modal';
|
|
2
|
+
import type { DiffView, GitFile, GitStatus, RepoOverview } from './git.js';
|
|
3
|
+
export interface ActionItem {
|
|
4
|
+
action_label: string;
|
|
5
|
+
action_description: string;
|
|
6
|
+
run: () => void;
|
|
7
|
+
}
|
|
8
|
+
export interface StageRenderState {
|
|
9
|
+
theme: ModalTheme;
|
|
10
|
+
status: GitStatus;
|
|
11
|
+
message: string;
|
|
12
|
+
busy: boolean;
|
|
13
|
+
visible_files: GitFile[];
|
|
14
|
+
selected: number;
|
|
15
|
+
diff?: DiffView;
|
|
16
|
+
diff_for_path: string;
|
|
17
|
+
diff_scroll: number;
|
|
18
|
+
selected_hunk: number;
|
|
19
|
+
selected_line_index?: number;
|
|
20
|
+
actions?: ActionItem[];
|
|
21
|
+
selected_action: number;
|
|
22
|
+
repo_overview?: RepoOverview;
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stage-types.js","sourceRoot":"","sources":["../src/stage-types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spences10/pi-git-ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "Interactive Git staging UI for Pi",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"git",
|
|
@@ -29,14 +29,16 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@
|
|
33
|
-
"@earendil-works/pi-tui": "^0.74.0",
|
|
34
|
-
"@spences10/pi-tui-modal": "0.0.12"
|
|
32
|
+
"@spences10/pi-tui-modal": "0.0.13"
|
|
35
33
|
},
|
|
36
34
|
"devDependencies": {
|
|
37
35
|
"@types/node": "^25.8.0",
|
|
38
36
|
"typescript": "^6.0.3"
|
|
39
37
|
},
|
|
38
|
+
"peerDependencies": {
|
|
39
|
+
"@earendil-works/pi-coding-agent": "*",
|
|
40
|
+
"@earendil-works/pi-tui": "*"
|
|
41
|
+
},
|
|
40
42
|
"engines": {
|
|
41
43
|
"node": ">=24.15.0"
|
|
42
44
|
},
|
|
@@ -51,6 +53,6 @@
|
|
|
51
53
|
"check": "pnpm --filter \"$npm_package_name^...\" run build:self && pnpm run check:self",
|
|
52
54
|
"check:self": "tsc --noEmit",
|
|
53
55
|
"test": "pnpm --filter \"$npm_package_name^...\" run build:self && pnpm run test:self",
|
|
54
|
-
"test:self": "
|
|
56
|
+
"test:self": "vitest run src/git.test.ts"
|
|
55
57
|
}
|
|
56
58
|
}
|