@sascha384/tic 4.7.0 → 4.9.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 (47) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +10 -1
  3. package/dist/app.js +4 -1
  4. package/dist/app.js.map +1 -1
  5. package/dist/branch-links.d.ts +7 -0
  6. package/dist/branch-links.js +13 -0
  7. package/dist/branch-links.js.map +1 -0
  8. package/dist/cli/commands/branch.d.ts +33 -0
  9. package/dist/cli/commands/branch.js +61 -0
  10. package/dist/cli/commands/branch.js.map +1 -0
  11. package/dist/cli/commands/mcp.js +64 -0
  12. package/dist/cli/commands/mcp.js.map +1 -1
  13. package/dist/cli/index.js +106 -0
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/components/BranchList.d.ts +1 -0
  16. package/dist/components/BranchList.js +360 -0
  17. package/dist/components/BranchList.js.map +1 -0
  18. package/dist/components/CommandBar.d.ts +8 -0
  19. package/dist/components/CommandBar.js +142 -0
  20. package/dist/components/CommandBar.js.map +1 -0
  21. package/dist/components/ErrorBoundary.d.ts +1 -1
  22. package/dist/components/HelpScreen.js +29 -0
  23. package/dist/components/HelpScreen.js.map +1 -1
  24. package/dist/components/OverlayPanel.d.ts +1 -1
  25. package/dist/components/PullRequestList.js +73 -12
  26. package/dist/components/PullRequestList.js.map +1 -1
  27. package/dist/components/TableLayout.d.ts +26 -10
  28. package/dist/components/TableLayout.js +67 -146
  29. package/dist/components/TableLayout.js.map +1 -1
  30. package/dist/components/WorkItemList.js +110 -92
  31. package/dist/components/WorkItemList.js.map +1 -1
  32. package/dist/git-async.d.ts +10 -0
  33. package/dist/git-async.js +39 -0
  34. package/dist/git-async.js.map +1 -0
  35. package/dist/git.d.ts +24 -0
  36. package/dist/git.js +60 -0
  37. package/dist/git.js.map +1 -1
  38. package/dist/stores/backendDataStore.d.ts +5 -0
  39. package/dist/stores/backendDataStore.js +58 -0
  40. package/dist/stores/backendDataStore.js.map +1 -1
  41. package/dist/stores/navigationStore.d.ts +5 -1
  42. package/dist/stores/navigationStore.js +10 -0
  43. package/dist/stores/navigationStore.js.map +1 -1
  44. package/dist/test-helpers.d.ts +7 -0
  45. package/dist/test-helpers.js +208 -0
  46. package/dist/test-helpers.js.map +1 -0
  47. package/package.json +1 -1
@@ -2,147 +2,67 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import { memo, useMemo } from 'react';
3
3
  import { Box, Text } from 'ink';
4
4
  import { useThemeStore } from '../stores/themeStore.js';
5
- import { ColorPill } from './ColorPill.js';
6
5
  const gap = 2;
7
6
  const MARKER_WIDTH = 2;
8
7
  const TITLE_MIN_WIDTH = 30;
9
- const FIXED_STATUS = 14;
10
- const FIXED_PRIORITY = 12;
11
- const FIXED_ASSIGNEE = 20;
12
- const FIXED_LABELS = 20;
13
- function hasData(treeItems, field) {
14
- return treeItems.some(({ item }) => {
15
- if (field === 'labels')
16
- return item.labels.length > 0;
17
- return !!item[field];
18
- });
19
- }
20
- function computeColumnWidths(treeItems, capabilities, terminalWidth) {
21
- // ID column sized to longest visible ID + gap
22
- const maxIdLen = treeItems.reduce((max, { item }) => Math.max(max, item.id.length), 2);
23
- const id = maxIdLen + gap;
24
- // Start with mandatory columns: marker + id + title_min + gap(title)
25
- // Budget = remaining space for optional columns (status, assignee, labels, priority)
26
- let budget = terminalWidth - MARKER_WIDTH - id - TITLE_MIN_WIDTH - gap;
27
- // Try adding optional columns; removal order when narrow: priority, labels, status
28
- // Assignee is kept as long as status is shown (they share the same budget tier)
29
- let showAssignee = false;
30
- let assignee = 0;
31
- if (capabilities.fields.assignee &&
32
- hasData(treeItems, 'assignee') &&
33
- budget >= FIXED_ASSIGNEE + gap) {
34
- showAssignee = true;
35
- assignee = FIXED_ASSIGNEE;
36
- budget -= assignee + gap;
37
- }
38
- let showStatus = false;
39
- const status = FIXED_STATUS;
40
- if (budget >= status + gap) {
41
- showStatus = true;
42
- budget -= status + gap;
8
+ function computeVisibleColumns(columns, items, terminalWidth, showMarker) {
9
+ const markerWidth = showMarker ? MARKER_WIDTH : 0;
10
+ // Find the flex column (width === -1)
11
+ const flexIndex = columns.findIndex((c) => c.width === -1);
12
+ // Start by computing required columns and their fixed widths
13
+ const result = columns.map((col) => ({
14
+ key: col.key,
15
+ header: col.header,
16
+ width: col.width === -1 ? 0 : col.width,
17
+ visible: false,
18
+ sortable: col.sortable ?? false,
19
+ }));
20
+ // Always show required columns
21
+ let usedWidth = markerWidth;
22
+ for (let i = 0; i < columns.length; i++) {
23
+ const col = columns[i];
24
+ if (col.required) {
25
+ result[i].visible = true;
26
+ if (col.width !== -1) {
27
+ usedWidth += col.width + gap;
28
+ }
29
+ }
43
30
  }
44
- let showLabels = false;
45
- let labels = 0;
46
- if (capabilities.fields.labels &&
47
- hasData(treeItems, 'labels') &&
48
- budget >= FIXED_LABELS + gap) {
49
- showLabels = true;
50
- labels = FIXED_LABELS;
51
- budget -= labels + gap;
31
+ // Sort optional columns by descending hidePriority
32
+ const optionalIndices = columns
33
+ .map((col, i) => ({ col, i }))
34
+ .filter(({ col }) => !col.required && col.width !== -1)
35
+ .sort((a, b) => (b.col.hidePriority ?? 0) - (a.col.hidePriority ?? 0));
36
+ // Try to fit optional columns
37
+ for (const { col, i } of optionalIndices) {
38
+ // Skip if hasData returns false
39
+ if (col.hasData && !col.hasData(items))
40
+ continue;
41
+ const needed = col.width + gap;
42
+ if (usedWidth + needed + TITLE_MIN_WIDTH <= terminalWidth ||
43
+ flexIndex === -1) {
44
+ result[i].visible = true;
45
+ usedWidth += needed;
46
+ }
52
47
  }
53
- let showPriority = false;
54
- let priority = 0;
55
- if (capabilities.fields.priority &&
56
- hasData(treeItems, 'priority') &&
57
- budget >= FIXED_PRIORITY) {
58
- showPriority = true;
59
- priority = FIXED_PRIORITY;
48
+ // Flex column gets remaining space
49
+ if (flexIndex !== -1) {
50
+ const flexWidth = Math.max(TITLE_MIN_WIDTH, terminalWidth - usedWidth);
51
+ result[flexIndex].width = flexWidth;
52
+ result[flexIndex].visible = true;
60
53
  }
61
- // Title gets all remaining space after fixed columns
62
- const titleWidth = terminalWidth -
63
- MARKER_WIDTH -
64
- id -
65
- gap -
66
- (showStatus ? status + gap : 0) -
67
- (showAssignee ? assignee + gap : 0) -
68
- (showLabels ? labels + gap : 0) -
69
- (showPriority ? priority : 0);
70
- return {
71
- id,
72
- title: titleWidth,
73
- status,
74
- priority,
75
- assignee,
76
- labels,
77
- showPriority,
78
- showAssignee,
79
- showLabels,
80
- showStatus,
81
- };
54
+ return result;
82
55
  }
83
- const TableRow = memo(function TableRow({ treeItem, selected, marked, collapseIndicator, capabilities, columns, }) {
56
+ const GenericTableRow = memo(function GenericTableRow({ item, selected, marked, columns, computedColumns, showMarker, }) {
84
57
  const { accent, accentBg } = useThemeStore((s) => s.colors);
85
- const { item, prefix, isCrossType } = treeItem;
86
- const hasUnresolvedDeps = item.dependsOn.length > 0;
87
- const typeLabel = isCrossType ? ` (${item.type})` : '';
88
- const dimmed = isCrossType && !selected;
89
- return (_jsxs(Box, { ...(marked && !selected ? { backgroundColor: accentBg } : {}), children: [_jsx(Box, { width: 2, children: _jsx(Text, { color: accent, children: selected ? '>' : ' ' }) }), _jsx(Box, { width: columns.id, overflowX: "hidden", children: _jsx(Text, { color: selected ? accent : undefined, bold: selected, dimColor: dimmed, children: item.id }) }), _jsx(Box, { width: columns.title, marginRight: gap, overflowX: "hidden", children: _jsxs(Text, { color: selected ? accent : undefined, bold: selected, dimColor: dimmed, wrap: "truncate", children: [capabilities.relationships ? prefix : '', collapseIndicator, item.title, typeLabel] }) }), columns.showStatus && (_jsxs(Box, { width: columns.status, marginRight: gap, overflowX: "hidden", children: [capabilities.fields.dependsOn && hasUnresolvedDeps && (_jsx(Text, { dimColor: dimmed, children: "\u29D7 " })), _jsx(ColorPill, { field: "status", value: item.status })] })), columns.showAssignee && (_jsx(Box, { width: columns.assignee, marginRight: gap, overflowX: "hidden", children: _jsx(Text, { color: selected ? accent : undefined, bold: selected, dimColor: dimmed, wrap: "truncate", children: item.assignee }) })), columns.showLabels && (_jsx(Box, { width: columns.labels, marginRight: columns.showPriority ? gap : 0, overflowX: "hidden", children: (() => {
90
- const maxWidth = columns.labels;
91
- const rendered = [];
92
- let usedWidth = 0;
93
- for (const label of item.labels) {
94
- // Each pill takes label.length + 2 (padding), plus 1 gap between pills
95
- const pillWidth = label.length + 2;
96
- const needed = usedWidth === 0 ? pillWidth : pillWidth + 1;
97
- if (usedWidth + needed > maxWidth) {
98
- const remaining = item.labels.length - rendered.length;
99
- if (remaining > 0) {
100
- return (_jsxs(Box, { gap: 1, children: [rendered.map((l) => (_jsx(ColorPill, { field: "label", value: l }, l))), _jsxs(Text, { dimColor: true, children: ["+", remaining] })] }));
101
- }
102
- break;
103
- }
104
- rendered.push(label);
105
- usedWidth += needed;
106
- }
107
- return (_jsx(Box, { gap: 1, children: rendered.map((l) => (_jsx(ColorPill, { field: "label", value: l }, l))) }));
108
- })() })), columns.showPriority && (_jsx(Box, { width: columns.priority, overflowX: "hidden", children: item.priority ? (_jsx(ColorPill, { field: "priority", value: item.priority })) : (_jsx(Text, { children: " " })) }))] }));
109
- }, (prev, next) => {
110
- if (prev.selected !== next.selected)
111
- return false;
112
- if (prev.marked !== next.marked)
113
- return false;
114
- if (prev.collapseIndicator !== next.collapseIndicator)
115
- return false;
116
- if (prev.capabilities !== next.capabilities)
117
- return false;
118
- if (prev.columns !== next.columns)
119
- return false;
120
- const prevItem = prev.treeItem.item;
121
- const nextItem = next.treeItem.item;
122
- if (prevItem.id !== nextItem.id)
123
- return false;
124
- if (prevItem.status !== nextItem.status)
125
- return false;
126
- if (prevItem.title !== nextItem.title)
127
- return false;
128
- if (prevItem.priority !== nextItem.priority)
129
- return false;
130
- if (prevItem.assignee !== nextItem.assignee)
131
- return false;
132
- if (prev.treeItem.prefix !== next.treeItem.prefix)
133
- return false;
134
- if (prev.treeItem.isCrossType !== next.treeItem.isCrossType)
135
- return false;
136
- // labels array — compare by joined string
137
- if (prevItem.labels.join(',') !== nextItem.labels.join(','))
138
- return false;
139
- // dependsOn length affects the deps indicator
140
- if (prevItem.dependsOn.length !== nextItem.dependsOn.length)
141
- return false;
142
- // item.type affects typeLabel for cross-type items
143
- if (prevItem.type !== nextItem.type)
144
- return false;
145
- return true;
58
+ return (_jsxs(Box, { ...(marked && !selected ? { backgroundColor: accentBg } : {}), children: [showMarker && (_jsx(Box, { width: MARKER_WIDTH, children: _jsx(Text, { color: accent, children: selected ? '>' : ' ' }) })), computedColumns.map((cc, i) => {
59
+ if (!cc.visible)
60
+ return null;
61
+ const colDef = columns[i];
62
+ const lastVisibleIndex = computedColumns.findLastIndex((c) => c.visible);
63
+ const isLast = i === lastVisibleIndex;
64
+ return (_jsx(Box, { width: cc.width, marginRight: isLast ? 0 : gap, overflowX: "hidden", children: colDef.render(item, selected) }, cc.key));
65
+ })] }));
146
66
  });
147
67
  function sortedHeaderLabel(baseLabel, column, sortStack) {
148
68
  const idx = sortStack.findIndex((e) => e.column === column);
@@ -153,12 +73,21 @@ function sortedHeaderLabel(baseLabel, column, sortStack) {
153
73
  const pos = sortStack.length > 1 ? `${idx + 1}` : '';
154
74
  return `${baseLabel} ${pos}${arrow}`;
155
75
  }
156
- function TableLayoutInner({ treeItems, cursor, capabilities, collapsedIds, markedIds, terminalWidth, sortStack, }) {
76
+ function TableLayoutInner({ items, columns, cursor, terminalWidth, getKey, showMarker = true, isMarked, sortStack, }) {
157
77
  const { mutedDim } = useThemeStore((s) => s.colors);
158
78
  const ss = sortStack ?? [];
159
- const columns = useMemo(() => computeColumnWidths(treeItems, capabilities, terminalWidth), [treeItems, capabilities, terminalWidth]);
160
- return (_jsxs(_Fragment, { children: [_jsxs(Box, { children: [_jsx(Box, { width: 2, children: _jsx(Text, { children: " " }) }), _jsx(Box, { width: columns.id, children: _jsx(Text, { bold: true, underline: true, children: sortedHeaderLabel('ID', 'id', ss) }) }), _jsx(Box, { width: columns.title, marginRight: gap, children: _jsx(Text, { bold: true, underline: true, children: sortedHeaderLabel('Title', 'title', ss) }) }), columns.showStatus && (_jsx(Box, { width: columns.status, marginRight: gap, children: _jsx(Text, { bold: true, underline: true, children: sortedHeaderLabel('Status', 'status', ss) }) })), columns.showAssignee && (_jsx(Box, { width: columns.assignee, marginRight: gap, children: _jsx(Text, { bold: true, underline: true, children: sortedHeaderLabel('Assignee', 'assignee', ss) }) })), columns.showLabels && (_jsx(Box, { width: columns.labels, marginRight: columns.showPriority ? gap : 0, children: _jsx(Text, { bold: true, underline: true, children: "Labels" }) })), columns.showPriority && (_jsx(Box, { width: columns.priority, children: _jsx(Text, { bold: true, underline: true, children: sortedHeaderLabel('Priority', 'priority', ss) }) }))] }), (() => {
161
- const nonVisibleSorts = ss.filter((e) => e.column === 'created' || e.column === 'updated');
79
+ const computedColumns = useMemo(() => computeVisibleColumns(columns, items, terminalWidth, showMarker), [columns, items, terminalWidth, showMarker]);
80
+ return (_jsxs(_Fragment, { children: [_jsxs(Box, { children: [showMarker && (_jsx(Box, { width: MARKER_WIDTH, children: _jsx(Text, { children: " " }) })), computedColumns.map((cc, i) => {
81
+ if (!cc.visible)
82
+ return null;
83
+ const lastVisibleIndex = computedColumns.findLastIndex((c) => c.visible);
84
+ const isLast = i === lastVisibleIndex;
85
+ return (_jsx(Box, { width: cc.width, marginRight: isLast ? 0 : gap, children: _jsx(Text, { bold: true, underline: true, children: cc.sortable
86
+ ? sortedHeaderLabel(cc.header, cc.key, ss)
87
+ : cc.header }) }, cc.key));
88
+ })] }), (() => {
89
+ const visibleKeys = new Set(computedColumns.filter((c) => c.visible).map((c) => c.key));
90
+ const nonVisibleSorts = ss.filter((e) => !visibleKeys.has(e.column));
162
91
  if (nonVisibleSorts.length === 0)
163
92
  return null;
164
93
  const parts = nonVisibleSorts.map((e) => {
@@ -169,15 +98,7 @@ function TableLayoutInner({ treeItems, cursor, capabilities, collapsedIds, marke
169
98
  return `${label} ${pos}${arrow}`;
170
99
  });
171
100
  return (_jsx(Box, { children: _jsxs(Text, { dimColor: mutedDim, children: ["Sorted by: ", parts.join(', ')] }) }));
172
- })(), treeItems.map((treeItem, idx) => {
173
- const { item, hasChildren } = treeItem;
174
- const collapseIndicator = hasChildren
175
- ? collapsedIds.has(item.id)
176
- ? '▶ '
177
- : '▼ '
178
- : ' ';
179
- return (_jsx(TableRow, { treeItem: treeItem, selected: idx === cursor, marked: markedIds.has(item.id), collapseIndicator: collapseIndicator, capabilities: capabilities, columns: columns }, `${item.id}-${item.type}`));
180
- })] }));
101
+ })(), items.map((item, idx) => (_jsx(GenericTableRow, { item: item, selected: idx === cursor, marked: isMarked ? isMarked(item) : false, columns: columns, computedColumns: computedColumns, showMarker: showMarker }, getKey(item))))] }));
181
102
  }
182
103
  export const TableLayout = memo(TableLayoutInner);
183
104
  //# sourceMappingURL=TableLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableLayout.js","sourceRoot":"","sources":["../../src/components/TableLayout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TableLayout.js","sourceRoot":"","sources":["../../src/components/TableLayout.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useState, useMemo, useEffect, useCallback, useRef } from 'react';
3
3
  import { Box, Text, useInput, useApp } from 'ink';
4
4
  import { navigationStore, useNavigationStore, } from '../stores/navigationStore.js';
@@ -9,6 +9,7 @@ import { configStore, useConfigStore } from '../stores/configStore.js';
9
9
  import { uiStore, useUIStore, getOverlayTargetIds } from '../stores/uiStore.js';
10
10
  import { getMarkedDistribution } from './getMarkedDistribution.js';
11
11
  import { TableLayout } from './TableLayout.js';
12
+ import { ColorPill } from './ColorPill.js';
12
13
  import { useTerminalSize } from '../hooks/useTerminalSize.js';
13
14
  import { useScrollViewport } from '../hooks/useScrollViewport.js';
14
15
  import { useBackendDataStore, backendDataStore, } from '../stores/backendDataStore.js';
@@ -18,12 +19,108 @@ import { getVisibleCommands, } from '../commands.js';
18
19
  import { OverlayPanel } from './OverlayPanel.js';
19
20
  import { DetailPanel } from './DetailPanel.js';
20
21
  import { undoStore } from '../stores/undoStore.js';
21
- import { recentCommandsStore, useRecentCommandsStore, } from '../stores/recentCommandsStore.js';
22
+ import { CommandBar } from './CommandBar.js';
22
23
  import { isSoftDeleteBackend } from '../backends/types.js';
23
24
  import { filterStore, useFilterStore } from '../stores/filterStore.js';
24
25
  import { useThemeStore } from '../stores/themeStore.js';
25
26
  import { applyFilters, countActiveFilters, summarizeFilters, } from '../filters.js';
26
27
  const EMPTY_VIEWS = [];
28
+ function buildWorkItemColumns(capabilities, collapsedIds, accent) {
29
+ const columns = [];
30
+ // ID column
31
+ columns.push({
32
+ key: 'id',
33
+ header: 'ID',
34
+ width: 4, // overridden dynamically via useMemo
35
+ required: true,
36
+ sortable: true,
37
+ render: (ti, selected) => (_jsx(Text, { color: selected ? accent : undefined, bold: selected, dimColor: ti.isCrossType && !selected, children: ti.item.id })),
38
+ });
39
+ // Title column (flex)
40
+ columns.push({
41
+ key: 'title',
42
+ header: 'Title',
43
+ width: -1,
44
+ required: true,
45
+ sortable: true,
46
+ render: (ti, selected) => {
47
+ const { item, prefix, isCrossType, hasChildren } = ti;
48
+ const collapseIndicator = hasChildren
49
+ ? collapsedIds.has(item.id)
50
+ ? '\u25B6 '
51
+ : '\u25BC '
52
+ : ' ';
53
+ const typeLabel = isCrossType ? ` (${item.type})` : '';
54
+ return (_jsxs(Text, { color: selected ? accent : undefined, bold: selected, dimColor: isCrossType && !selected, wrap: "truncate", children: [capabilities.relationships ? prefix : '', collapseIndicator, item.title, typeLabel] }));
55
+ },
56
+ });
57
+ // Status column
58
+ columns.push({
59
+ key: 'status',
60
+ header: 'Status',
61
+ width: 14,
62
+ hidePriority: 3,
63
+ sortable: true,
64
+ render: (ti, selected) => {
65
+ const hasUnresolvedDeps = ti.item.dependsOn.length > 0;
66
+ return (_jsxs(_Fragment, { children: [capabilities.fields.dependsOn && hasUnresolvedDeps && (_jsxs(Text, { dimColor: ti.isCrossType && !selected, children: ['\u29D7', " "] })), _jsx(ColorPill, { field: "status", value: ti.item.status })] }));
67
+ },
68
+ });
69
+ // Assignee column (conditional)
70
+ if (capabilities.fields.assignee) {
71
+ columns.push({
72
+ key: 'assignee',
73
+ header: 'Assignee',
74
+ width: 20,
75
+ hidePriority: 4,
76
+ sortable: true,
77
+ hasData: (items) => items.some(({ item }) => !!item.assignee),
78
+ render: (ti, selected) => (_jsx(Text, { color: selected ? accent : undefined, bold: selected, dimColor: ti.isCrossType && !selected, wrap: "truncate", children: ti.item.assignee })),
79
+ });
80
+ }
81
+ // Labels column (conditional)
82
+ if (capabilities.fields.labels) {
83
+ columns.push({
84
+ key: 'labels',
85
+ header: 'Labels',
86
+ width: 20,
87
+ hidePriority: 2,
88
+ hasData: (items) => items.some(({ item }) => item.labels.length > 0),
89
+ render: (ti) => {
90
+ const maxWidth = 20;
91
+ const rendered = [];
92
+ let usedWidth = 0;
93
+ for (const label of ti.item.labels) {
94
+ const pillWidth = label.length + 2;
95
+ const needed = usedWidth === 0 ? pillWidth : pillWidth + 1;
96
+ if (usedWidth + needed > maxWidth) {
97
+ const remaining = ti.item.labels.length - rendered.length;
98
+ if (remaining > 0) {
99
+ return (_jsxs(Box, { gap: 1, children: [rendered.map((l) => (_jsx(ColorPill, { field: "label", value: l }, l))), _jsxs(Text, { dimColor: true, children: ["+", remaining] })] }));
100
+ }
101
+ break;
102
+ }
103
+ rendered.push(label);
104
+ usedWidth += needed;
105
+ }
106
+ return (_jsx(Box, { gap: 1, children: rendered.map((l) => (_jsx(ColorPill, { field: "label", value: l }, l))) }));
107
+ },
108
+ });
109
+ }
110
+ // Priority column (conditional)
111
+ if (capabilities.fields.priority) {
112
+ columns.push({
113
+ key: 'priority',
114
+ header: 'Priority',
115
+ width: 12,
116
+ hidePriority: 1,
117
+ sortable: true,
118
+ hasData: (items) => items.some(({ item }) => !!item.priority),
119
+ render: (ti) => ti.item.priority ? (_jsx(ColorPill, { field: "priority", value: ti.item.priority })) : (_jsx(Text, { children: " " })),
120
+ });
121
+ }
122
+ return columns;
123
+ }
27
124
  export function getTargetIds(markedIds, cursorItem) {
28
125
  if (markedIds.size > 0) {
29
126
  return [...markedIds];
@@ -102,11 +199,9 @@ export function WorkItemList() {
102
199
  const filterCount = useMemo(() => countActiveFilters(activeFilters), [activeFilters]);
103
200
  const { setCursor, toggleExpanded, toggleMarked, clearMarked, setMarkedIds, setRangeAnchor, clampCursor, removeDeletedItem, toggleSortColumn, clearSort, } = listViewStore.getState();
104
201
  // Local state for inputs and templates
105
- const [allSearchItems, setAllSearchItems] = useState([]);
106
202
  const [templates, setTemplates] = useState([]);
107
203
  const [showFullDescription, setShowFullDescription] = useState(false);
108
204
  const [descriptionScrollOffset, setDescriptionScrollOffset] = useState(0);
109
- const [commandBarQuery, setCommandBarQuery] = useState('');
110
205
  // UI overlay state from store
111
206
  const { activeOverlay, warning, toast } = useUIStore(useShallow((s) => ({
112
207
  activeOverlay: s.activeOverlay,
@@ -268,25 +363,6 @@ export function WorkItemList() {
268
363
  setShowFullDescription(false);
269
364
  setDescriptionScrollOffset(0);
270
365
  }, [cursor]);
271
- useEffect(() => {
272
- if (activeOverlay?.type !== 'command-bar' || !backend)
273
- return;
274
- let cancelled = false;
275
- void backend
276
- .listWorkItems()
277
- .then((items) => {
278
- if (!cancelled)
279
- setAllSearchItems(items);
280
- })
281
- .catch((err) => {
282
- uiStore
283
- .getState()
284
- .setToast(err instanceof Error ? err.message : 'Failed to load items');
285
- });
286
- return () => {
287
- cancelled = true;
288
- };
289
- }, [activeOverlay?.type, backend]);
290
366
  // Description viewport calculation
291
367
  const currentItem = treeItems[cursor]?.item;
292
368
  const descriptionLines = currentItem?.description?.split('\n') ?? [];
@@ -428,6 +504,10 @@ export function WorkItemList() {
428
504
  navigate('pr-list');
429
505
  return;
430
506
  }
507
+ if (input === 'B' && gitAvailable) {
508
+ navigate('branch-list');
509
+ return;
510
+ }
431
511
  if (input === ',') {
432
512
  if (updateInfo?.updateAvailable) {
433
513
  setSettingsInitialFocus('update-now');
@@ -661,12 +741,6 @@ export function WorkItemList() {
661
741
  }
662
742
  }
663
743
  }, { isActive: activeOverlay === null && !showFullDescription });
664
- const handleSearchSelect = (item) => {
665
- setCommandBarQuery('');
666
- closeOverlay();
667
- selectWorkItem(item.id);
668
- navigate('form');
669
- };
670
744
  const commandContext = {
671
745
  screen: 'list',
672
746
  markedCount: markedIds.size,
@@ -688,52 +762,6 @@ export function WorkItemList() {
688
762
  syncManager,
689
763
  gitAvailable,
690
764
  ]);
691
- const recentIds = useRecentCommandsStore((s) => s.recentIds);
692
- const commandBarItems = useMemo(() => {
693
- const query = commandBarQuery.toLowerCase();
694
- // Build command items (recent + categorized)
695
- const commandMap = new Map(paletteCommands.map((c) => [c.id, c]));
696
- const recentItems = [];
697
- for (const id of recentIds) {
698
- const cmd = commandMap.get(id);
699
- if (cmd) {
700
- recentItems.push({
701
- id: `recent-${cmd.id}`,
702
- label: cmd.label,
703
- value: cmd.id,
704
- category: 'Recent',
705
- kind: 'command',
706
- });
707
- }
708
- }
709
- const commandItems = paletteCommands.map((cmd) => ({
710
- id: cmd.id,
711
- label: cmd.label,
712
- value: cmd.id,
713
- category: cmd.category,
714
- kind: 'command',
715
- }));
716
- let allItems = [...recentItems, ...commandItems];
717
- // Filter commands by query
718
- if (query) {
719
- allItems = allItems.filter((item) => item.label.toLowerCase().includes(query));
720
- // Add up to 5 matching issues
721
- const matchingIssues = allSearchItems
722
- .filter((item) => item.title.toLowerCase().includes(query) ||
723
- item.id.toLowerCase().includes(query))
724
- .slice(0, 5)
725
- .map((item) => ({
726
- id: `issue-${item.id}`,
727
- label: `#${item.id} ${item.title}`,
728
- value: item.id,
729
- hint: item.type,
730
- category: 'Issues',
731
- kind: 'issue',
732
- }));
733
- allItems = [...allItems, ...matchingIssues];
734
- }
735
- return allItems;
736
- }, [paletteCommands, recentIds, commandBarQuery, allSearchItems]);
737
765
  const sortPickerItems = useMemo(() => {
738
766
  const columns = [
739
767
  { column: 'id', label: 'ID' },
@@ -870,9 +898,7 @@ export function WorkItemList() {
870
898
  return items;
871
899
  }, [savedViews, defaultView, activeViewName, lastViewName, filterCount]);
872
900
  const handleCommandSelect = (command) => {
873
- setCommandBarQuery('');
874
901
  closeOverlay();
875
- recentCommandsStore.getState().addRecent(command.id);
876
902
  switch (command.id) {
877
903
  case 'create':
878
904
  selectWorkItem(null);
@@ -1064,24 +1090,16 @@ export function WorkItemList() {
1064
1090
  ? activeType.charAt(0).toUpperCase() + activeType.slice(1) + 's'
1065
1091
  : '';
1066
1092
  const visibleTreeItems = useMemo(() => treeItems.slice(viewport.start, viewport.end), [treeItems, viewport.start, viewport.end]);
1093
+ const workItemColumns = useMemo(() => {
1094
+ const maxIdLen = visibleTreeItems.reduce((max, { item }) => Math.max(max, item.id.length), 2);
1095
+ const cols = buildWorkItemColumns(capabilities, collapsedIds, accent);
1096
+ cols[0].width = maxIdLen + 2;
1097
+ return cols;
1098
+ }, [visibleTreeItems, capabilities, collapsedIds, accent]);
1067
1099
  const positionText = treeItems.length > viewport.maxVisible
1068
1100
  ? `${cursor + 1}/${treeItems.length}`
1069
1101
  : '';
1070
- return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { wrap: "truncate", children: [_jsxs(Text, { bold: true, color: accent, children: [typeLabel, " \u2014 ", iteration] }), _jsx(Text, { dimColor: mutedDim, children: ` (${filterCount > 0 ? `${items.length}/${unfilteredCount}` : items.length} item${unfilteredCount === 1 ? '' : 's'})` }), markedCount > 0 && (_jsxs(Text, { color: marked, children: [` ● ${markedCount}`, markedDistribution.above > 0 && ` ↑${markedDistribution.above}`, markedDistribution.below > 0 && ` ↓${markedDistribution.below}`] })), filterCount > 0 && (_jsx(Text, { color: warningColor, children: ` [${filterCount} filter${filterCount === 1 ? '' : 's'}${activeViewName ? `: ${activeViewName}` : ''}]` }))] }) }), _jsx(TableLayout, { treeItems: visibleTreeItems, cursor: viewport.visibleCursor, capabilities: capabilities, collapsedIds: collapsedIds, markedIds: markedIds, terminalWidth: terminalWidth, sortStack: sortStack }), treeItems.length === 0 && !loading && initError && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: errorColor, children: "Failed to connect to backend:" }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: errorColor, children: initError }) }), _jsx(Text, { dimColor: mutedDim, children: "Press , for settings or q to quit." })] })), treeItems.length === 0 && !loading && !initError && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: mutedDim, children: ["No ", activeType ?? 'item', "s in this iteration. Press c to create, / to search all."] }) })), loading && treeItems.length === 0 && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: mutedDim, children: "Loading..." }) })), showDetailPanel && treeItems.length > 0 && treeItems[cursor] && (_jsx(Box, { marginTop: 1, children: _jsx(DetailPanel, { item: treeItems[cursor].item, terminalWidth: terminalWidth, showFullDescription: showFullDescription, descriptionScrollOffset: descriptionScrollOffset, maxDescriptionHeight: maxDescriptionHeight }) })), _jsx(Box, { marginTop: 1, children: showFullDescription ? (_jsxs(Box, { children: [_jsx(Text, { dimColor: mutedDim, children: "\u2191\u2193 scroll space/esc close" }), positionText && _jsxs(Text, { dimColor: mutedDim, children: [" ", positionText] })] })) : activeOverlay?.type === 'command-bar' ? (_jsx(OverlayPanel, { title: "Commands", items: commandBarItems, placeholder: "Type to search...", externalFilter: true, onQueryChange: setCommandBarQuery, onSelect: (item) => {
1071
- if (item.kind === 'issue') {
1072
- const workItem = allSearchItems.find((i) => i.id === item.value);
1073
- if (workItem)
1074
- handleSearchSelect(workItem);
1075
- }
1076
- else {
1077
- const cmd = paletteCommands.find((c) => c.id === item.value);
1078
- if (cmd)
1079
- handleCommandSelect(cmd);
1080
- }
1081
- }, onCancel: () => {
1082
- setCommandBarQuery('');
1083
- closeOverlay();
1084
- } })) : activeOverlay?.type === 'bulk-menu' ? ((() => {
1102
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { wrap: "truncate", children: [_jsxs(Text, { bold: true, color: accent, children: [typeLabel, " \u2014 ", iteration] }), _jsx(Text, { dimColor: mutedDim, children: ` (${filterCount > 0 ? `${items.length}/${unfilteredCount}` : items.length} item${unfilteredCount === 1 ? '' : 's'})` }), markedCount > 0 && (_jsxs(Text, { color: marked, children: [` ● ${markedCount}`, markedDistribution.above > 0 && ` ↑${markedDistribution.above}`, markedDistribution.below > 0 && ` ↓${markedDistribution.below}`] })), filterCount > 0 && (_jsx(Text, { color: warningColor, children: ` [${filterCount} filter${filterCount === 1 ? '' : 's'}${activeViewName ? `: ${activeViewName}` : ''}]` }))] }) }), _jsx(TableLayout, { items: visibleTreeItems, columns: workItemColumns, cursor: viewport.visibleCursor, terminalWidth: terminalWidth, getKey: (ti) => `${ti.item.id}-${ti.item.type}`, isMarked: (ti) => markedIds.has(ti.item.id), sortStack: sortStack }), treeItems.length === 0 && !loading && initError && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: errorColor, children: "Failed to connect to backend:" }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: errorColor, children: initError }) }), _jsx(Text, { dimColor: mutedDim, children: "Press , for settings or q to quit." })] })), treeItems.length === 0 && !loading && !initError && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: mutedDim, children: ["No ", activeType ?? 'item', "s in this iteration. Press c to create, / to search all."] }) })), loading && treeItems.length === 0 && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: mutedDim, children: "Loading..." }) })), showDetailPanel && treeItems.length > 0 && treeItems[cursor] && (_jsx(Box, { marginTop: 1, children: _jsx(DetailPanel, { item: treeItems[cursor].item, terminalWidth: terminalWidth, showFullDescription: showFullDescription, descriptionScrollOffset: descriptionScrollOffset, maxDescriptionHeight: maxDescriptionHeight }) })), _jsx(Box, { marginTop: 1, children: showFullDescription ? (_jsxs(Box, { children: [_jsx(Text, { dimColor: mutedDim, children: "\u2191\u2193 scroll space/esc close" }), positionText && _jsxs(Text, { dimColor: mutedDim, children: [" ", positionText] })] })) : activeOverlay?.type === 'command-bar' ? (_jsx(CommandBar, { commands: paletteCommands, onCommand: handleCommandSelect, onCancel: closeOverlay })) : activeOverlay?.type === 'bulk-menu' ? ((() => {
1085
1103
  const bulkItems = [];
1086
1104
  bulkItems.push({
1087
1105
  id: 'status',