@sascha384/tic 1.10.2 → 1.12.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 (42) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +1 -1
  3. package/dist/app.d.ts +7 -0
  4. package/dist/app.js +9 -0
  5. package/dist/app.js.map +1 -1
  6. package/dist/backends/ado/index.d.ts +6 -1
  7. package/dist/backends/ado/index.js +29 -1
  8. package/dist/backends/ado/index.js.map +1 -1
  9. package/dist/backends/github/index.d.ts +6 -1
  10. package/dist/backends/github/index.js +30 -1
  11. package/dist/backends/github/index.js.map +1 -1
  12. package/dist/backends/gitlab/index.d.ts +10 -1
  13. package/dist/backends/gitlab/index.js +175 -0
  14. package/dist/backends/gitlab/index.js.map +1 -1
  15. package/dist/backends/jira/index.d.ts +6 -1
  16. package/dist/backends/jira/index.js +30 -1
  17. package/dist/backends/jira/index.js.map +1 -1
  18. package/dist/backends/local/index.d.ts +6 -1
  19. package/dist/backends/local/index.js +37 -0
  20. package/dist/backends/local/index.js.map +1 -1
  21. package/dist/backends/local/templates.d.ts +7 -0
  22. package/dist/backends/local/templates.js +99 -0
  23. package/dist/backends/local/templates.js.map +1 -0
  24. package/dist/backends/types.d.ts +23 -1
  25. package/dist/backends/types.js.map +1 -1
  26. package/dist/commands.js +2 -2
  27. package/dist/components/HelpScreen.js +15 -3
  28. package/dist/components/HelpScreen.js.map +1 -1
  29. package/dist/components/Settings.js +97 -6
  30. package/dist/components/Settings.js.map +1 -1
  31. package/dist/components/TemplatePicker.d.ts +8 -0
  32. package/dist/components/TemplatePicker.js +24 -0
  33. package/dist/components/TemplatePicker.js.map +1 -0
  34. package/dist/components/WorkItemForm.js +157 -15
  35. package/dist/components/WorkItemForm.js.map +1 -1
  36. package/dist/components/WorkItemList.js +31 -5
  37. package/dist/components/WorkItemList.js.map +1 -1
  38. package/dist/sync/SyncManager.js +37 -0
  39. package/dist/sync/SyncManager.js.map +1 -1
  40. package/dist/sync/types.d.ts +3 -1
  41. package/dist/types.d.ts +13 -0
  42. package/package.json +1 -1
@@ -5,22 +5,37 @@ import TextInput from 'ink-text-input';
5
5
  import { useAppState } from '../app.js';
6
6
  import { readConfig, writeConfig } from '../backends/local/config.js';
7
7
  import { VALID_BACKENDS } from '../backends/factory.js';
8
+ import { SyncQueueStore } from '../sync/queue.js';
8
9
  const JIRA_FIELDS = ['site', 'project', 'boardId'];
9
10
  function isAvailable(b) {
10
11
  return b === 'local' || b === 'github' || b === 'jira';
11
12
  }
12
13
  export function Settings() {
13
- const { navigate, navigateToHelp } = useAppState();
14
+ const { navigate, navigateToHelp, backend, syncManager, setFormMode, setEditingTemplateSlug, selectWorkItem, } = useAppState();
14
15
  const root = process.cwd();
16
+ const queueStore = useMemo(() => {
17
+ if (!syncManager)
18
+ return null;
19
+ return new SyncQueueStore(root);
20
+ }, [syncManager, root]);
15
21
  const [config, setConfig] = useState(null);
16
22
  const [cursor, setCursor] = useState(0);
17
23
  const [editing, setEditing] = useState(false);
18
24
  const [jiraSite, setJiraSite] = useState('');
19
25
  const [jiraProject, setJiraProject] = useState('');
20
26
  const [jiraBoardId, setJiraBoardId] = useState('');
27
+ const [templates, setTemplates] = useState([]);
28
+ const [confirmDeleteTemplate, setConfirmDeleteTemplate] = useState(false);
29
+ const [templateToDelete, setTemplateToDelete] = useState(null);
30
+ const capabilities = backend.getCapabilities();
21
31
  useEffect(() => {
22
32
  void readConfig(root).then(setConfig);
23
33
  }, [root]);
34
+ useEffect(() => {
35
+ if (capabilities.templates) {
36
+ void backend.listTemplates().then(setTemplates);
37
+ }
38
+ }, [backend, capabilities.templates]);
24
39
  // Initialize cursor and jira fields when config loads
25
40
  useEffect(() => {
26
41
  if (config) {
@@ -32,7 +47,7 @@ export function Settings() {
32
47
  }
33
48
  }
34
49
  }, [config]);
35
- // Build navigable items list — backends + conditional jira fields
50
+ // Build navigable items list — backends + conditional jira fields + templates
36
51
  const navItems = useMemo(() => {
37
52
  const items = VALID_BACKENDS.map((b) => ({
38
53
  kind: 'backend',
@@ -44,8 +59,14 @@ export function Settings() {
44
59
  items.splice(jiraIdx + 1, 0, ...JIRA_FIELDS.map((field) => ({ kind: 'jira-field', field })));
45
60
  }
46
61
  }
62
+ if (capabilities.templates) {
63
+ items.push({ kind: 'template-header' });
64
+ for (const t of templates) {
65
+ items.push({ kind: 'template', slug: t.slug, name: t.name });
66
+ }
67
+ }
47
68
  return items;
48
- }, [config?.backend]);
69
+ }, [config?.backend, capabilities.templates, templates]);
49
70
  // Clamp cursor when navItems shrinks (e.g. switching away from jira)
50
71
  useEffect(() => {
51
72
  setCursor((c) => Math.min(c, navItems.length - 1));
@@ -67,6 +88,31 @@ export function Settings() {
67
88
  useInput((input, key) => {
68
89
  if (!config)
69
90
  return;
91
+ if (confirmDeleteTemplate) {
92
+ if (input === 'y' || input === 'Y') {
93
+ if (templateToDelete) {
94
+ void backend.deleteTemplate(templateToDelete).then(async () => {
95
+ setTemplates((prev) => prev.filter((t) => t.slug !== templateToDelete));
96
+ if (queueStore) {
97
+ await queueStore.append({
98
+ action: 'template-delete',
99
+ itemId: templateToDelete,
100
+ timestamp: new Date().toISOString(),
101
+ templateSlug: templateToDelete,
102
+ });
103
+ syncManager?.pushPending().catch(() => { });
104
+ }
105
+ });
106
+ }
107
+ setConfirmDeleteTemplate(false);
108
+ setTemplateToDelete(null);
109
+ }
110
+ else {
111
+ setConfirmDeleteTemplate(false);
112
+ setTemplateToDelete(null);
113
+ }
114
+ return;
115
+ }
70
116
  if (input === '?') {
71
117
  navigateToHelp();
72
118
  return;
@@ -76,10 +122,25 @@ export function Settings() {
76
122
  return;
77
123
  }
78
124
  if (key.upArrow) {
79
- setCursor((c) => Math.max(0, c - 1));
125
+ setCursor((c) => {
126
+ let next = c - 1;
127
+ // Skip template-header
128
+ while (next >= 0 && navItems[next]?.kind === 'template-header') {
129
+ next--;
130
+ }
131
+ return Math.max(0, next);
132
+ });
80
133
  }
81
134
  if (key.downArrow) {
82
- setCursor((c) => Math.min(navItems.length - 1, c + 1));
135
+ setCursor((c) => {
136
+ let next = c + 1;
137
+ // Skip template-header
138
+ while (next < navItems.length &&
139
+ navItems[next]?.kind === 'template-header') {
140
+ next++;
141
+ }
142
+ return Math.min(navItems.length - 1, next);
143
+ });
83
144
  }
84
145
  if (key.return) {
85
146
  const item = navItems[cursor];
@@ -101,6 +162,25 @@ export function Settings() {
101
162
  else if (item.kind === 'jira-field') {
102
163
  setEditing(true);
103
164
  }
165
+ else if (item.kind === 'template') {
166
+ setFormMode('template');
167
+ setEditingTemplateSlug(item.slug);
168
+ selectWorkItem(null);
169
+ navigate('form');
170
+ }
171
+ }
172
+ if (input === 'c' && capabilities.templates) {
173
+ setFormMode('template');
174
+ setEditingTemplateSlug(null);
175
+ selectWorkItem(null);
176
+ navigate('form');
177
+ }
178
+ if (input === 'd') {
179
+ const item = navItems[cursor];
180
+ if (item && item.kind === 'template') {
181
+ setTemplateToDelete(item.slug);
182
+ setConfirmDeleteTemplate(true);
183
+ }
104
184
  }
105
185
  }, { isActive: !editing });
106
186
  // Edit mode input handler — only captures Esc to exit editing
@@ -121,6 +201,9 @@ export function Settings() {
121
201
  const available = isAvailable(b);
122
202
  return (_jsxs(Box, { children: [_jsxs(Text, { color: focused ? 'cyan' : undefined, children: [focused ? '>' : ' ', ' '] }), _jsxs(Text, { color: focused ? 'cyan' : undefined, bold: focused, dimColor: !available, children: [b, isCurrent ? ' (current)' : '', !available ? ' (not yet available)' : ''] })] }, b));
123
203
  }
204
+ if (item.kind === 'template-header' || item.kind === 'template') {
205
+ return null; // rendered separately below
206
+ }
124
207
  // Jira config field
125
208
  const { field } = item;
126
209
  const label = field === 'boardId'
@@ -144,6 +227,14 @@ export function Settings() {
144
227
  setEditing(false);
145
228
  saveJiraConfig();
146
229
  } })] })) : (_jsxs(Text, { bold: focused, color: focused ? 'cyan' : undefined, children: [label, ":", ' ', value || (_jsx(Text, { dimColor: true, children: required ? '(required)' : '(optional)' }))] }))] }, `jira-${field}`));
147
- }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Project Config:" }), _jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["Types: ", config.types.join(', ')] }) }), _jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["Statuses: ", config.statuses.join(', ')] }) }), _jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["Iterations: ", config.iterations.join(', ')] }) }), _jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["Current iteration: ", config.current_iteration] }) })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: '↑↓ navigate enter select esc back ? help' }) })] }));
230
+ }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Project Config:" }), _jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["Types: ", config.types.join(', ')] }) }), _jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["Statuses: ", config.statuses.join(', ')] }) }), _jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["Iterations: ", config.iterations.join(', ')] }) }), _jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["Current iteration: ", config.current_iteration] }) })] }), capabilities.templates && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Templates:" }), navItems.map((item, idx) => {
231
+ if (item.kind !== 'template')
232
+ return null;
233
+ const focused = idx === cursor;
234
+ return (_jsxs(Box, { marginLeft: 2, children: [_jsxs(Text, { color: focused ? 'cyan' : undefined, children: [focused ? '>' : ' ', ' '] }), _jsx(Text, { bold: focused, color: focused ? 'cyan' : undefined, children: item.name })] }, `tmpl-${item.slug}`));
235
+ }), templates.length === 0 && (_jsx(Box, { marginLeft: 2, children: _jsx(Text, { dimColor: true, children: "(no templates \u2014 press c to create)" }) }))] })), confirmDeleteTemplate && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "red", children: ["Delete template \"", templates.find((t) => t.slug === templateToDelete)?.name ??
236
+ templateToDelete, "\"? (y/n)"] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: capabilities.templates
237
+ ? '↑↓ navigate enter select c create template d delete template esc back ? help'
238
+ : '↑↓ navigate enter select esc back ? help' }) })] }));
148
239
  }
149
240
  //# sourceMappingURL=Settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Settings.js","sourceRoot":"","sources":["../../src/components/Settings.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Settings.js","sourceRoot":"","sources":["../../src/components/Settings.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Template } from '../types.js';
2
+ interface TemplatePickerProps {
3
+ templates: Template[];
4
+ onSelect: (template: Template | null) => void;
5
+ onCancel: () => void;
6
+ }
7
+ export declare function TemplatePicker({ templates, onSelect, onCancel, }: TemplatePickerProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from 'ink';
3
+ import SelectInput from 'ink-select-input';
4
+ export function TemplatePicker({ templates, onSelect, onCancel, }) {
5
+ useInput((_input, key) => {
6
+ if (key.escape) {
7
+ onCancel();
8
+ }
9
+ });
10
+ const items = [
11
+ { label: 'No template', value: '__none__' },
12
+ ...templates.map((t) => ({ label: t.name, value: t.slug })),
13
+ ];
14
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, children: "Select Template" }) }), _jsx(SelectInput, { items: items, onSelect: (item) => {
15
+ if (item.value === '__none__') {
16
+ onSelect(null);
17
+ }
18
+ else {
19
+ const template = templates.find((t) => t.slug === item.value);
20
+ onSelect(template ?? null);
21
+ }
22
+ } }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: '↑↓ navigate enter select esc cancel' }) })] }));
23
+ }
24
+ //# sourceMappingURL=TemplatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplatePicker.js","sourceRoot":"","sources":["../../src/components/TemplatePicker.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAS3C,MAAM,UAAU,cAAc,CAAC,EAC7B,SAAS,EACT,QAAQ,EACR,QAAQ,GACY;IACpB,QAAQ,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACvB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG;QACZ,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE;QAC3C,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;KAC5D,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,IAAI,sCAAuB,GAC7B,EACN,KAAC,WAAW,IACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;oBACjB,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;wBAC9B,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACjB,CAAC;yBAAM,CAAC;wBACN,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC9D,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC,GACD,EACF,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,QAAQ,kBAAE,uCAAuC,GAAQ,GAC3D,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -10,22 +10,24 @@ import { SyncQueueStore } from '../sync/queue.js';
10
10
  import { useScrollViewport } from '../hooks/useScrollViewport.js';
11
11
  import { useBackendData } from '../hooks/useBackendData.js';
12
12
  import { openInEditor } from '../editor.js';
13
+ import { slugifyTemplateName } from '../backends/local/templates.js';
13
14
  const SELECT_FIELDS = ['type', 'status', 'iteration', 'priority'];
14
15
  const PRIORITIES = ['low', 'medium', 'high', 'critical'];
15
16
  export function WorkItemForm() {
16
- const { backend, syncManager, navigate, navigateToHelp, selectedWorkItemId, activeType, pushWorkItem, popWorkItem, } = useAppState();
17
+ const { backend, syncManager, navigate, navigateToHelp, selectedWorkItemId, activeType, activeTemplate, setActiveTemplate, formMode, setFormMode, editingTemplateSlug, setEditingTemplateSlug, pushWorkItem, popWorkItem, } = useAppState();
17
18
  const queueStore = useMemo(() => {
18
19
  if (!syncManager)
19
20
  return null;
20
21
  return new SyncQueueStore(process.cwd());
21
22
  }, [syncManager]);
22
- const queueWrite = async (action, itemId, commentData) => {
23
+ const queueWrite = async (action, itemId, extra) => {
23
24
  if (queueStore) {
24
25
  await queueStore.append({
25
26
  action,
26
27
  itemId,
27
28
  timestamp: new Date().toISOString(),
28
- ...(commentData ? { commentData } : {}),
29
+ ...(extra?.commentData ? { commentData: extra.commentData } : {}),
30
+ ...(extra?.templateSlug ? { templateSlug: extra.templateSlug } : {}),
29
31
  });
30
32
  syncManager?.pushPending().catch(() => { });
31
33
  }
@@ -82,6 +84,29 @@ export function WorkItemForm() {
82
84
  };
83
85
  }, [selectedWorkItemId, backend, capabilities.relationships]);
84
86
  const fields = useMemo(() => {
87
+ if (formMode === 'template') {
88
+ const tf = capabilities.templateFields;
89
+ const all = ['title'];
90
+ if (tf.type)
91
+ all.push('type');
92
+ if (tf.status)
93
+ all.push('status');
94
+ if (tf.iteration)
95
+ all.push('iteration');
96
+ if (tf.priority)
97
+ all.push('priority');
98
+ if (tf.assignee)
99
+ all.push('assignee');
100
+ if (tf.labels)
101
+ all.push('labels');
102
+ if (tf.description)
103
+ all.push('description');
104
+ if (tf.parent)
105
+ all.push('parent');
106
+ if (tf.dependsOn)
107
+ all.push('dependsOn');
108
+ return all;
109
+ }
85
110
  const all = ['title'];
86
111
  if (capabilities.customTypes)
87
112
  all.push('type');
@@ -113,7 +138,14 @@ export function WorkItemForm() {
113
138
  }
114
139
  }
115
140
  return all;
116
- }, [capabilities, selectedWorkItemId, existingItem, children, dependents]);
141
+ }, [
142
+ formMode,
143
+ capabilities,
144
+ selectedWorkItemId,
145
+ existingItem,
146
+ children,
147
+ dependents,
148
+ ]);
117
149
  const [title, setTitle] = useState('');
118
150
  const [type, setType] = useState(activeType ?? types[0] ?? '');
119
151
  const [status, setStatus] = useState(statuses[0] ?? '');
@@ -154,6 +186,61 @@ export function WorkItemForm() {
154
186
  .join(', ') ?? '');
155
187
  setComments(existingItem.comments ?? []);
156
188
  }, [existingItem]);
189
+ // Prefill from template (create mode only)
190
+ useEffect(() => {
191
+ if (selectedWorkItemId !== null || !activeTemplate)
192
+ return;
193
+ if (activeTemplate.type != null)
194
+ setType(activeTemplate.type);
195
+ if (activeTemplate.status != null)
196
+ setStatus(activeTemplate.status);
197
+ if (activeTemplate.priority != null)
198
+ setPriority(activeTemplate.priority);
199
+ if (activeTemplate.assignee != null)
200
+ setAssignee(activeTemplate.assignee);
201
+ if (activeTemplate.labels != null)
202
+ setLabels(activeTemplate.labels.join(', '));
203
+ if (activeTemplate.iteration != null)
204
+ setIteration(activeTemplate.iteration);
205
+ if (activeTemplate.description != null)
206
+ setDescription(activeTemplate.description);
207
+ if (activeTemplate.parent != null)
208
+ setParentId(String(activeTemplate.parent));
209
+ if (activeTemplate.dependsOn != null)
210
+ setDependsOn(activeTemplate.dependsOn.join(', '));
211
+ }, [activeTemplate, selectedWorkItemId]);
212
+ // Load existing template for editing
213
+ useEffect(() => {
214
+ if (formMode !== 'template' || !editingTemplateSlug)
215
+ return;
216
+ let cancelled = false;
217
+ void backend.getTemplate(editingTemplateSlug).then((t) => {
218
+ if (cancelled)
219
+ return;
220
+ setTitle(t.name);
221
+ if (t.type != null)
222
+ setType(t.type);
223
+ if (t.status != null)
224
+ setStatus(t.status);
225
+ if (t.priority != null)
226
+ setPriority(t.priority);
227
+ if (t.assignee != null)
228
+ setAssignee(t.assignee);
229
+ if (t.labels != null)
230
+ setLabels(t.labels.join(', '));
231
+ if (t.iteration != null)
232
+ setIteration(t.iteration);
233
+ if (t.description != null)
234
+ setDescription(t.description);
235
+ if (t.parent != null)
236
+ setParentId(String(t.parent));
237
+ if (t.dependsOn != null)
238
+ setDependsOn(t.dependsOn.join(', '));
239
+ });
240
+ return () => {
241
+ cancelled = true;
242
+ };
243
+ }, [formMode, editingTemplateSlug, backend]);
157
244
  const parentSuggestions = useMemo(() => {
158
245
  return allItems
159
246
  .filter((item) => item.id !== selectedWorkItemId)
@@ -193,6 +280,45 @@ export function WorkItemForm() {
193
280
  return match ? match[1] : trimmed;
194
281
  })
195
282
  .filter((s) => s.length > 0);
283
+ if (formMode === 'template') {
284
+ const template = {
285
+ slug: editingTemplateSlug ?? slugifyTemplateName(title),
286
+ name: title || 'Untitled Template',
287
+ };
288
+ if (type)
289
+ template.type = type;
290
+ if (status)
291
+ template.status = status;
292
+ if (priority !== 'medium')
293
+ template.priority = priority;
294
+ if (assignee)
295
+ template.assignee = assignee;
296
+ if (parsedLabels.length > 0)
297
+ template.labels = parsedLabels;
298
+ if (iteration)
299
+ template.iteration = iteration;
300
+ if (description)
301
+ template.description = description;
302
+ if (parsedParent)
303
+ template.parent = parsedParent;
304
+ if (parsedDependsOn.length > 0)
305
+ template.dependsOn = parsedDependsOn;
306
+ if (editingTemplateSlug) {
307
+ await backend.updateTemplate(editingTemplateSlug, template);
308
+ await queueWrite('template-update', template.slug, {
309
+ templateSlug: template.slug,
310
+ });
311
+ }
312
+ else {
313
+ await backend.createTemplate(template);
314
+ await queueWrite('template-create', template.slug, {
315
+ templateSlug: template.slug,
316
+ });
317
+ }
318
+ setFormMode('item');
319
+ setEditingTemplateSlug(null);
320
+ return;
321
+ }
196
322
  if (selectedWorkItemId !== null) {
197
323
  await backend.cachedUpdateWorkItem(selectedWorkItemId, {
198
324
  title,
@@ -213,8 +339,7 @@ export function WorkItemForm() {
213
339
  body: newComment.trim(),
214
340
  });
215
341
  await queueWrite('comment', selectedWorkItemId, {
216
- author: 'me',
217
- body: newComment.trim(),
342
+ commentData: { author: 'me', body: newComment.trim() },
218
343
  });
219
344
  setComments((prev) => [...prev, added]);
220
345
  setNewComment('');
@@ -240,10 +365,10 @@ export function WorkItemForm() {
240
365
  body: newComment.trim(),
241
366
  });
242
367
  await queueWrite('comment', created.id, {
243
- author: 'me',
244
- body: newComment.trim(),
368
+ commentData: { author: 'me', body: newComment.trim() },
245
369
  });
246
370
  }
371
+ setActiveTemplate(null);
247
372
  }
248
373
  }
249
374
  useInput((_input, key) => {
@@ -252,9 +377,16 @@ export function WorkItemForm() {
252
377
  if (!configLoading && !itemLoading && !saving) {
253
378
  void save();
254
379
  }
255
- const prev = popWorkItem();
256
- if (prev === null) {
257
- navigate('list');
380
+ if (formMode === 'template') {
381
+ setFormMode('item');
382
+ setEditingTemplateSlug(null);
383
+ navigate('settings');
384
+ }
385
+ else {
386
+ const prev = popWorkItem();
387
+ if (prev === null) {
388
+ navigate('list');
389
+ }
258
390
  }
259
391
  return;
260
392
  }
@@ -390,7 +522,9 @@ export function WorkItemForm() {
390
522
  function renderField(field, index) {
391
523
  const focused = index === focusedField;
392
524
  const isEditing = focused && editing;
393
- const label = field.charAt(0).toUpperCase() + field.slice(1);
525
+ const label = formMode === 'template' && field === 'title'
526
+ ? 'Name'
527
+ : field.charAt(0).toUpperCase() + field.slice(1);
394
528
  const cursor = focused ? '>' : ' ';
395
529
  if (field === 'comments') {
396
530
  return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { color: focused ? 'cyan' : undefined, children: [cursor, " "] }), _jsxs(Text, { bold: focused, color: focused ? 'cyan' : undefined, children: [label, ":"] })] }), comments.map((c, ci) => (_jsx(Box, { marginLeft: 4, children: _jsxs(Text, { dimColor: true, children: ["[", c.date, "] ", c.author, ": ", c.body] }) }, ci))), _jsx(Box, { marginLeft: 4, children: isEditing ? (_jsxs(Box, { children: [_jsx(Text, { color: "green", children: "New: " }), _jsx(TextInput, { value: newComment, onChange: setNewComment, focus: true, onSubmit: () => {
@@ -494,10 +628,18 @@ export function WorkItemForm() {
494
628
  if (configLoading || itemLoading) {
495
629
  return (_jsx(Box, { children: _jsx(Text, { dimColor: true, children: "Loading..." }) }));
496
630
  }
497
- const mode = selectedWorkItemId !== null ? 'Edit' : 'Create';
498
- const typeLabel = type.charAt(0).toUpperCase() + type.slice(1);
631
+ const mode = formMode === 'template'
632
+ ? editingTemplateSlug
633
+ ? 'Edit Template'
634
+ : 'Create Template'
635
+ : selectedWorkItemId !== null
636
+ ? 'Edit'
637
+ : 'Create';
638
+ const typeLabel = formMode === 'template' ? '' : type.charAt(0).toUpperCase() + type.slice(1);
499
639
  const isFieldVisible = (index) => index >= viewport.start && index < viewport.end;
500
- return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { bold: true, color: "cyan", children: [mode, " ", typeLabel, selectedWorkItemId !== null ? ` #${selectedWorkItemId}` : ''] }) }), fields.map((field, index) => {
640
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { bold: true, color: "cyan", children: [mode, typeLabel ? ` ${typeLabel}` : '', formMode !== 'template' && selectedWorkItemId !== null
641
+ ? ` #${selectedWorkItemId}`
642
+ : ''] }) }), fields.map((field, index) => {
501
643
  if (field === 'rel-parent' ||
502
644
  field.startsWith('rel-child-') ||
503
645
  field.startsWith('rel-dependent-')) {