@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.
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stage-types.js.map
@@ -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.1",
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
- "@earendil-works/pi-coding-agent": "^0.74.0",
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": "node -e \"process.exit(0)\""
56
+ "test:self": "vitest run src/git.test.ts"
55
57
  }
56
58
  }