agkan 2.14.1 → 2.14.3

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 (61) hide show
  1. package/dist/board/boardStyles.d.ts +1 -1
  2. package/dist/board/boardStyles.d.ts.map +1 -1
  3. package/dist/board/boardStyles.js +1 -1
  4. package/dist/board/client/addTaskModal.d.ts +2 -0
  5. package/dist/board/client/addTaskModal.d.ts.map +1 -0
  6. package/dist/board/client/addTaskModal.js +64 -0
  7. package/dist/board/client/addTaskModal.js.map +1 -0
  8. package/dist/board/client/autoScroll.d.ts +4 -0
  9. package/dist/board/client/autoScroll.d.ts.map +1 -0
  10. package/dist/board/client/autoScroll.js +59 -0
  11. package/dist/board/client/autoScroll.js.map +1 -0
  12. package/dist/board/client/board.js +228 -201
  13. package/dist/board/client/boardPolling.d.ts +15 -0
  14. package/dist/board/client/boardPolling.d.ts.map +1 -0
  15. package/dist/board/client/boardPolling.js +144 -0
  16. package/dist/board/client/boardPolling.js.map +1 -0
  17. package/dist/board/client/burgerMenu.d.ts +2 -0
  18. package/dist/board/client/burgerMenu.d.ts.map +1 -0
  19. package/dist/board/client/burgerMenu.js +80 -0
  20. package/dist/board/client/burgerMenu.js.map +1 -0
  21. package/dist/board/client/contextMenu.d.ts +2 -0
  22. package/dist/board/client/contextMenu.d.ts.map +1 -0
  23. package/dist/board/client/contextMenu.js +52 -0
  24. package/dist/board/client/contextMenu.js.map +1 -0
  25. package/dist/board/client/detailPanel.d.ts +8 -0
  26. package/dist/board/client/detailPanel.d.ts.map +1 -0
  27. package/dist/board/client/detailPanel.js +565 -0
  28. package/dist/board/client/detailPanel.js.map +1 -0
  29. package/dist/board/client/dragDrop.d.ts +6 -0
  30. package/dist/board/client/dragDrop.d.ts.map +1 -0
  31. package/dist/board/client/dragDrop.js +82 -0
  32. package/dist/board/client/dragDrop.js.map +1 -0
  33. package/dist/board/client/filters.d.ts +6 -0
  34. package/dist/board/client/filters.d.ts.map +1 -0
  35. package/dist/board/client/filters.js +167 -0
  36. package/dist/board/client/filters.js.map +1 -0
  37. package/dist/board/client/main.d.ts +2 -0
  38. package/dist/board/client/main.d.ts.map +1 -0
  39. package/dist/board/client/main.js +20 -0
  40. package/dist/board/client/main.js.map +1 -0
  41. package/dist/board/client/tags.d.ts +6 -0
  42. package/dist/board/client/tags.d.ts.map +1 -0
  43. package/dist/board/client/tags.js +198 -0
  44. package/dist/board/client/tags.js.map +1 -0
  45. package/dist/board/client/types.d.ts +48 -0
  46. package/dist/board/client/types.d.ts.map +1 -0
  47. package/dist/board/client/types.js +4 -0
  48. package/dist/board/client/types.js.map +1 -0
  49. package/dist/board/client/utils.d.ts +4 -0
  50. package/dist/board/client/utils.d.ts.map +1 -0
  51. package/dist/board/client/utils.js +44 -0
  52. package/dist/board/client/utils.js.map +1 -0
  53. package/package.json +1 -1
  54. package/dist/services/ProcessService.d.ts +0 -54
  55. package/dist/services/ProcessService.d.ts.map +0 -1
  56. package/dist/services/ProcessService.js +0 -147
  57. package/dist/services/ProcessService.js.map +0 -1
  58. package/dist/services/TmuxService.d.ts +0 -2
  59. package/dist/services/TmuxService.d.ts.map +0 -1
  60. package/dist/services/TmuxService.js +0 -7
  61. package/dist/services/TmuxService.js.map +0 -1
@@ -0,0 +1,565 @@
1
+ "use strict";
2
+ // Detail panel functionality
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.getDetailTaskId = getDetailTaskId;
5
+ exports.closeDetailPanel = closeDetailPanel;
6
+ exports.renderDetailPanel = renderDetailPanel;
7
+ exports.openTaskDetail = openTaskDetail;
8
+ exports.showUpdateWarning = showUpdateWarning;
9
+ exports.initDetailPanel = initDetailPanel;
10
+ const utils_1 = require("./utils");
11
+ const tags_1 = require("./tags");
12
+ const boardPolling_1 = require("./boardPolling");
13
+ // State
14
+ let detailTaskId = null;
15
+ let lastTab = 'details';
16
+ // Exported getter for other modules to access the current task ID
17
+ function getDetailTaskId() {
18
+ return detailTaskId;
19
+ }
20
+ function closeDetailPanel() {
21
+ const detailPanel = document.getElementById('detail-panel');
22
+ detailPanel.classList.remove('open');
23
+ detailPanel.style.width = '';
24
+ detailTaskId = null;
25
+ }
26
+ function switchTab(tabName) {
27
+ lastTab = tabName;
28
+ document.querySelectorAll('.detail-tab').forEach((btn) => {
29
+ btn.classList.toggle('active', btn.dataset.tab === tabName);
30
+ });
31
+ document.querySelectorAll('.detail-tab-content').forEach((el) => {
32
+ el.classList.toggle('active', el.id === 'detail-tab-content-' + tabName);
33
+ });
34
+ const footer = document.getElementById('detail-panel-footer');
35
+ if (footer)
36
+ footer.style.display = tabName === 'details' ? '' : 'none';
37
+ }
38
+ async function loadComments(taskId) {
39
+ const tabBtn = document.getElementById('detail-tab-comments');
40
+ const pane = document.getElementById('detail-tab-content-comments');
41
+ if (!pane)
42
+ return;
43
+ try {
44
+ const res = await fetch('/api/tasks/' + taskId + '/comments');
45
+ if (!res.ok)
46
+ throw new Error('Server error');
47
+ const data = await res.json();
48
+ const comments = data.comments || [];
49
+ if (tabBtn)
50
+ tabBtn.textContent = 'Comments (' + comments.length + ')';
51
+ renderComments(taskId, comments);
52
+ }
53
+ catch {
54
+ if (pane)
55
+ pane.innerHTML =
56
+ '<div style="padding:20px;font-size:12px;color:#94a3b8;">Failed to load comments</div>';
57
+ }
58
+ }
59
+ function renderComments(taskId, comments) {
60
+ const pane = document.getElementById('detail-tab-content-comments');
61
+ if (!pane)
62
+ return;
63
+ pane.style.padding = '16px 20px';
64
+ let html = '';
65
+ comments.forEach(function (comment) {
66
+ const authorText = comment.author ? (0, utils_1.escapeHtmlClient)(comment.author) : 'Anonymous';
67
+ const dateRel = (0, utils_1.relativeTime)(comment.created_at);
68
+ const dateAbs = (0, utils_1.escapeHtmlClient)(comment.created_at);
69
+ const contentText = (0, utils_1.escapeHtmlClient)(comment.content);
70
+ html += '<div class="comment-item" data-comment-id="' + comment.id + '">';
71
+ html += '<div class="comment-meta">';
72
+ html += '<span class="comment-author">' + authorText + '</span>';
73
+ html += '<span class="comment-date" title="' + dateAbs + '">' + dateRel + '</span>';
74
+ html += '<span class="comment-actions">';
75
+ html +=
76
+ '<button class="comment-action-btn" title="Edit" onclick="startCommentEdit(' +
77
+ comment.id +
78
+ ')">&#9998;</button>';
79
+ html +=
80
+ '<button class="comment-action-btn danger" title="Delete" onclick="deleteComment(' +
81
+ comment.id +
82
+ ',' +
83
+ taskId +
84
+ ')">&#128465;</button>';
85
+ html += '</span>';
86
+ html += '</div>';
87
+ html +=
88
+ '<div class="comment-content" id="comment-content-' + comment.id + '">' + contentText + '</div>';
89
+ html += '<div id="comment-edit-' + comment.id + '" style="display:none;">';
90
+ html +=
91
+ '<textarea class="comment-edit-area" id="comment-edit-area-' +
92
+ comment.id +
93
+ '">' +
94
+ contentText +
95
+ '</textarea>';
96
+ html += '<div class="comment-edit-actions">';
97
+ html +=
98
+ '<button class="comment-btn" onclick="saveCommentEdit(' +
99
+ comment.id +
100
+ ',' +
101
+ taskId +
102
+ ')">Save</button>';
103
+ html +=
104
+ '<button class="comment-btn" onclick="cancelCommentEdit(' + comment.id + ')">Cancel</button>';
105
+ html += '</div></div>';
106
+ html += '</div>';
107
+ });
108
+ html +=
109
+ '<button class="add-comment-trigger" id="add-comment-trigger" onclick="openAddCommentForm()">+ Add comment...</button>';
110
+ html += '<div class="add-comment-form" id="add-comment-form">';
111
+ html +=
112
+ '<textarea class="add-comment-textarea" id="add-comment-text" placeholder="Write a comment..."></textarea>';
113
+ html += '<div>';
114
+ html +=
115
+ '<button class="add-comment-submit" onclick="submitComment(' + taskId + ')">Add Comment</button>';
116
+ html += '<button class="add-comment-cancel" onclick="closeAddCommentForm()">Cancel</button>';
117
+ html += '</div></div>';
118
+ pane.innerHTML = html;
119
+ }
120
+ window.openAddCommentForm = function () {
121
+ const trigger = document.getElementById('add-comment-trigger');
122
+ const form = document.getElementById('add-comment-form');
123
+ if (trigger)
124
+ trigger.style.display = 'none';
125
+ if (form) {
126
+ form.classList.add('open');
127
+ form.querySelector('textarea').focus();
128
+ }
129
+ };
130
+ window.closeAddCommentForm = function () {
131
+ const trigger = document.getElementById('add-comment-trigger');
132
+ const form = document.getElementById('add-comment-form');
133
+ if (trigger)
134
+ trigger.style.display = '';
135
+ if (form) {
136
+ form.classList.remove('open');
137
+ form.querySelector('textarea').value = '';
138
+ }
139
+ };
140
+ window.startCommentEdit = function (commentId) {
141
+ const contentEl = document.getElementById('comment-content-' + commentId);
142
+ const editWrapper = document.getElementById('comment-edit-' + commentId);
143
+ if (contentEl)
144
+ contentEl.style.display = 'none';
145
+ if (editWrapper)
146
+ editWrapper.style.display = 'block';
147
+ const area = document.getElementById('comment-edit-area-' + commentId);
148
+ if (area)
149
+ area.focus();
150
+ };
151
+ window.cancelCommentEdit = function (commentId) {
152
+ const contentEl = document.getElementById('comment-content-' + commentId);
153
+ const editWrapper = document.getElementById('comment-edit-' + commentId);
154
+ if (contentEl)
155
+ contentEl.style.display = '';
156
+ if (editWrapper)
157
+ editWrapper.style.display = 'none';
158
+ };
159
+ window.saveCommentEdit = async function (commentId, taskId) {
160
+ const area = document.getElementById('comment-edit-area-' + commentId);
161
+ if (!area)
162
+ return;
163
+ const content = area.value.trim();
164
+ if (!content) {
165
+ area.focus();
166
+ return;
167
+ }
168
+ try {
169
+ const res = await fetch('/api/comments/' + commentId, {
170
+ method: 'PATCH',
171
+ headers: { 'Content-Type': 'application/json' },
172
+ body: JSON.stringify({ content }),
173
+ });
174
+ if (!res.ok)
175
+ throw new Error('Server error');
176
+ await loadComments(taskId);
177
+ }
178
+ catch {
179
+ (0, utils_1.showToast)('Failed to update comment');
180
+ }
181
+ };
182
+ window.deleteComment = async function (commentId, taskId) {
183
+ if (!confirm('Delete this comment?'))
184
+ return;
185
+ try {
186
+ const res = await fetch('/api/comments/' + commentId, { method: 'DELETE' });
187
+ if (!res.ok)
188
+ throw new Error('Server error');
189
+ await loadComments(taskId);
190
+ }
191
+ catch {
192
+ (0, utils_1.showToast)('Failed to delete comment');
193
+ }
194
+ };
195
+ window.submitComment = async function (taskId) {
196
+ const textarea = document.getElementById('add-comment-text');
197
+ if (!textarea)
198
+ return;
199
+ const content = textarea.value.trim();
200
+ if (!content) {
201
+ textarea.focus();
202
+ return;
203
+ }
204
+ try {
205
+ const res = await fetch('/api/tasks/' + taskId + '/comments', {
206
+ method: 'POST',
207
+ headers: { 'Content-Type': 'application/json' },
208
+ body: JSON.stringify({ content }),
209
+ });
210
+ if (!res.ok)
211
+ throw new Error('Server error');
212
+ await loadComments(taskId);
213
+ }
214
+ catch {
215
+ (0, utils_1.showToast)('Failed to add comment');
216
+ }
217
+ };
218
+ function renderDetailPanel(data) {
219
+ const detailPanelTitle = document.getElementById('detail-panel-title');
220
+ const task = data.task;
221
+ const tags = data.tags || [];
222
+ const metadata = data.metadata || [];
223
+ const blockedBy = data.blockedBy || [];
224
+ const blocking = data.blocking || [];
225
+ const parent = data.parent || null;
226
+ detailTaskId = task.id;
227
+ detailPanelTitle.textContent = '#' + task.id;
228
+ // Globals from server-side renderer
229
+ const win = window;
230
+ const _allStatuses = win.allStatuses;
231
+ const _statusLabels = win.statusLabels;
232
+ const _allPriorities = win.allPriorities;
233
+ let html = '';
234
+ // Status (editable)
235
+ html += '<div class="detail-field">';
236
+ html += '<div class="detail-field-label">Status</div>';
237
+ html += '<select id="detail-edit-status" class="detail-edit-select">';
238
+ _allStatuses.forEach((s) => {
239
+ const selected = s === task.status ? ' selected' : '';
240
+ html += '<option value="' + s + '"' + selected + '>' + _statusLabels[s] + '</option>';
241
+ });
242
+ html += '</select>';
243
+ html += '</div>';
244
+ // Priority (editable)
245
+ html += '<div class="detail-field">';
246
+ html += '<div class="detail-field-label">Priority</div>';
247
+ html += '<select id="detail-edit-priority" class="detail-edit-select">';
248
+ html += '<option value="">None</option>';
249
+ _allPriorities.forEach((p) => {
250
+ const selected = task.priority === p ? ' selected' : '';
251
+ html +=
252
+ '<option value="' +
253
+ p +
254
+ '"' +
255
+ selected +
256
+ '>' +
257
+ p.charAt(0).toUpperCase() +
258
+ p.slice(1) +
259
+ '</option>';
260
+ });
261
+ html += '</select>';
262
+ html += '</div>';
263
+ // Tags (editable)
264
+ html += '<div class="detail-field">';
265
+ html += '<div class="detail-field-label">Tags</div>';
266
+ html += '<div id="detail-tags-container"></div>';
267
+ html += '</div>';
268
+ // Relations: parent, blockedBy, blocking
269
+ const hasRelations = parent || blockedBy.length > 0 || blocking.length > 0;
270
+ if (hasRelations) {
271
+ html += '<div class="detail-relations">';
272
+ if (parent) {
273
+ html += '<div class="detail-relation-row">';
274
+ html += '<span class="detail-relation-label">Parent</span>';
275
+ html +=
276
+ '<div class="detail-relation-ids"><span class="detail-relation-id">#' +
277
+ parent.id +
278
+ ' ' +
279
+ (0, utils_1.escapeHtmlClient)(parent.title) +
280
+ '</span></div>';
281
+ html += '</div>';
282
+ }
283
+ if (blockedBy.length > 0) {
284
+ html += '<div class="detail-relation-row">';
285
+ html += '<span class="detail-relation-label">Blocked by</span>';
286
+ html += '<div class="detail-relation-ids">';
287
+ blockedBy.forEach((t) => {
288
+ html += '<span class="detail-relation-id">#' + t.id + '</span>';
289
+ });
290
+ html += '</div></div>';
291
+ }
292
+ if (blocking.length > 0) {
293
+ html += '<div class="detail-relation-row">';
294
+ html += '<span class="detail-relation-label">Blocking</span>';
295
+ html += '<div class="detail-relation-ids">';
296
+ blocking.forEach((t) => {
297
+ html += '<span class="detail-relation-id">#' + t.id + '</span>';
298
+ });
299
+ html += '</div></div>';
300
+ }
301
+ html += '</div>';
302
+ }
303
+ // Title (editable)
304
+ html += '<div class="detail-field">';
305
+ html += '<div class="detail-field-label">Title</div>';
306
+ html +=
307
+ '<input id="detail-edit-title" class="detail-edit-input" type="text" value="' +
308
+ (0, utils_1.escapeHtmlClient)(task.title) +
309
+ '">';
310
+ html += '</div>';
311
+ // Body (editable)
312
+ html += '<div class="detail-field description-field-wrapper">';
313
+ html += '<div class="detail-field-label">Description</div>';
314
+ html +=
315
+ '<textarea id="detail-edit-body" class="detail-edit-textarea">' +
316
+ (0, utils_1.escapeHtmlClient)(task.body || '') +
317
+ '</textarea>';
318
+ html += '</div>';
319
+ // Metadata table (read-only, non-priority)
320
+ const otherMeta = metadata.filter((m) => m.key !== 'priority');
321
+ if (otherMeta.length > 0) {
322
+ html += '<div class="detail-field">';
323
+ html += '<div class="detail-field-label">Metadata</div>';
324
+ html += '<table class="detail-meta-table">';
325
+ otherMeta.forEach((m) => {
326
+ html +=
327
+ '<tr><td>' +
328
+ (0, utils_1.escapeHtmlClient)(m.key) +
329
+ '</td><td>' +
330
+ (0, utils_1.escapeHtmlClient)(m.value) +
331
+ '</td></tr>';
332
+ });
333
+ html += '</table></div>';
334
+ }
335
+ // Timestamps compressed to one line
336
+ html +=
337
+ '<div class="detail-timestamp">created ' +
338
+ (0, utils_1.relativeTime)(task.created_at) +
339
+ ' &middot; updated ' +
340
+ (0, utils_1.relativeTime)(task.updated_at) +
341
+ '</div>';
342
+ const detailsPane = document.getElementById('detail-tab-content-details');
343
+ if (detailsPane) {
344
+ detailsPane.innerHTML = html;
345
+ detailsPane.style.padding = '20px';
346
+ }
347
+ // Render tags section after DOM update
348
+ (0, tags_1.loadAllTags)().then(() => (0, tags_1.renderTagsSection)([...tags]));
349
+ // Load comments into the comments tab
350
+ loadComments(task.id);
351
+ // Restore last tab
352
+ switchTab(lastTab);
353
+ }
354
+ async function openTaskDetail(taskId) {
355
+ const detailPanel = document.getElementById('detail-panel');
356
+ const PANEL_DEFAULT_WIDTH = 400;
357
+ try {
358
+ const res = await fetch('/api/tasks/' + taskId);
359
+ if (!res.ok)
360
+ throw new Error('Server error');
361
+ const data = await res.json();
362
+ renderDetailPanel(data);
363
+ if (!detailPanel.classList.contains('open')) {
364
+ const preferredWidth = detailPanel.dataset.preferredWidth || String(PANEL_DEFAULT_WIDTH);
365
+ detailPanel.style.width = preferredWidth + 'px';
366
+ detailPanel.classList.add('open');
367
+ }
368
+ }
369
+ catch {
370
+ (0, utils_1.showToast)('Failed to load task details');
371
+ }
372
+ }
373
+ function showUpdateWarning() {
374
+ const detailPanelBody = document.getElementById('detail-panel-body');
375
+ const warning = document.getElementById('detail-panel-update-warning');
376
+ if (!warning) {
377
+ const warningEl = document.createElement('div');
378
+ warningEl.id = 'detail-panel-update-warning';
379
+ warningEl.style.cssText =
380
+ 'display: flex; align-items: center; gap: 8px; color: red; font-size: 0.85em; padding: 4px 8px; background: #fff0f0; border: 1px solid #ffcccc; border-radius: 4px; margin-bottom: 8px;';
381
+ const msgSpan = document.createElement('span');
382
+ msgSpan.style.cssText = 'flex: 1;';
383
+ msgSpan.textContent =
384
+ 'This task has been updated in the database. Save or discard your changes to see the latest version.';
385
+ const reloadBtn = document.createElement('button');
386
+ reloadBtn.title = 'Reload latest data';
387
+ reloadBtn.textContent = '↺';
388
+ reloadBtn.style.cssText =
389
+ 'background: none; border: none; cursor: pointer; font-size: 1.1em; color: red; padding: 0 2px; line-height: 1; flex-shrink: 0;';
390
+ reloadBtn.addEventListener('click', async () => {
391
+ try {
392
+ const taskRes = await fetch('/api/tasks/' + detailTaskId);
393
+ if (taskRes.ok) {
394
+ const taskData = await taskRes.json();
395
+ renderDetailPanel(taskData);
396
+ }
397
+ }
398
+ catch {
399
+ // Ignore network errors
400
+ }
401
+ });
402
+ warningEl.appendChild(msgSpan);
403
+ warningEl.appendChild(reloadBtn);
404
+ detailPanelBody.insertBefore(warningEl, detailPanelBody.firstChild);
405
+ }
406
+ }
407
+ function initDetailPanel() {
408
+ const boardContainer = document.querySelector('.board-container');
409
+ const detailPanelHtml = '<div class="detail-panel" id="detail-panel">' +
410
+ '<div class="detail-panel-resize-handle" id="detail-panel-resize-handle"></div>' +
411
+ '<div class="detail-panel-header">' +
412
+ '<h2 id="detail-panel-title">Task Detail</h2>' +
413
+ '<button class="detail-panel-close" id="detail-panel-close" title="Close">&times;</button>' +
414
+ '</div>' +
415
+ '<div class="detail-tabs" id="detail-tabs">' +
416
+ '<button class="detail-tab active" data-tab="details">Details</button>' +
417
+ '<button class="detail-tab" data-tab="comments" id="detail-tab-comments">Comments</button>' +
418
+ '</div>' +
419
+ '<div class="detail-panel-body" id="detail-panel-body">' +
420
+ '<div class="detail-tab-content active" id="detail-tab-content-details"></div>' +
421
+ '<div class="detail-tab-content" id="detail-tab-content-comments"></div>' +
422
+ '</div>' +
423
+ '<div class="detail-panel-footer" id="detail-panel-footer"><button id="detail-save-btn">Save</button></div>' +
424
+ '</div>';
425
+ boardContainer.insertAdjacentHTML('beforeend', detailPanelHtml);
426
+ const detailPanel = document.getElementById('detail-panel');
427
+ document.getElementById('detail-panel-close')?.addEventListener('click', closeDetailPanel);
428
+ // Tab switching
429
+ document.getElementById('detail-tabs')?.addEventListener('click', (e) => {
430
+ const btn = e.target.closest('.detail-tab');
431
+ if (!btn)
432
+ return;
433
+ switchTab(btn.dataset.tab);
434
+ });
435
+ // Panel resize
436
+ const resizeHandle = document.getElementById('detail-panel-resize-handle');
437
+ const PANEL_MIN_WIDTH = 280;
438
+ const PANEL_MAX_WIDTH = 800;
439
+ const PANEL_DEFAULT_WIDTH = 400;
440
+ // Initialize panel width from server config (async)
441
+ (async function initPanelWidth() {
442
+ let targetWidth = PANEL_DEFAULT_WIDTH;
443
+ try {
444
+ const res = await fetch('/api/config');
445
+ if (res.ok) {
446
+ const data = await res.json();
447
+ const savedWidth = data && data.board && data.board.detailPaneWidth;
448
+ if (typeof savedWidth === 'number' &&
449
+ savedWidth >= PANEL_MIN_WIDTH &&
450
+ savedWidth <= PANEL_MAX_WIDTH) {
451
+ targetWidth = savedWidth;
452
+ }
453
+ }
454
+ }
455
+ catch {
456
+ // Ignore errors, use default width
457
+ }
458
+ detailPanel.dataset.preferredWidth = String(targetWidth);
459
+ })();
460
+ resizeHandle.addEventListener('mousedown', function (e) {
461
+ e.preventDefault();
462
+ if (!detailPanel.classList.contains('open'))
463
+ return;
464
+ const startX = e.clientX;
465
+ const startWidth = detailPanel.offsetWidth;
466
+ resizeHandle.classList.add('dragging');
467
+ document.body.style.userSelect = 'none';
468
+ document.body.style.cursor = 'col-resize';
469
+ detailPanel.style.transition = 'none';
470
+ function onMouseMove(e) {
471
+ const delta = startX - e.clientX;
472
+ const newWidth = Math.min(PANEL_MAX_WIDTH, Math.max(PANEL_MIN_WIDTH, startWidth + delta));
473
+ detailPanel.style.width = newWidth + 'px';
474
+ }
475
+ function onMouseUp() {
476
+ resizeHandle.classList.remove('dragging');
477
+ document.body.style.userSelect = '';
478
+ document.body.style.cursor = '';
479
+ detailPanel.style.transition = '';
480
+ const currentWidth = detailPanel.offsetWidth;
481
+ detailPanel.dataset.preferredWidth = String(currentWidth);
482
+ fetch('/api/config', {
483
+ method: 'PUT',
484
+ headers: { 'Content-Type': 'application/json' },
485
+ body: JSON.stringify({ board: { detailPaneWidth: currentWidth } }),
486
+ }).catch(function () {
487
+ // Ignore errors when saving panel width
488
+ });
489
+ document.removeEventListener('mousemove', onMouseMove);
490
+ document.removeEventListener('mouseup', onMouseUp);
491
+ }
492
+ document.addEventListener('mousemove', onMouseMove);
493
+ document.addEventListener('mouseup', onMouseUp);
494
+ });
495
+ // Save button
496
+ document.getElementById('detail-save-btn')?.addEventListener('click', async () => {
497
+ if (detailTaskId === null)
498
+ return;
499
+ const titleInput = document.getElementById('detail-edit-title');
500
+ const title = titleInput ? titleInput.value.trim() : '';
501
+ if (!title) {
502
+ if (titleInput)
503
+ titleInput.focus();
504
+ return;
505
+ }
506
+ const bodyEl = document.getElementById('detail-edit-body');
507
+ const statusEl = document.getElementById('detail-edit-status');
508
+ const priorityEl = document.getElementById('detail-edit-priority');
509
+ try {
510
+ const res = await fetch('/api/tasks/' + detailTaskId, {
511
+ method: 'PATCH',
512
+ headers: { 'Content-Type': 'application/json' },
513
+ body: JSON.stringify({
514
+ title,
515
+ body: bodyEl ? bodyEl.value.trim() || null : null,
516
+ status: statusEl ? statusEl.value : undefined,
517
+ priority: priorityEl ? priorityEl.value || null : null,
518
+ }),
519
+ });
520
+ if (!res.ok)
521
+ throw new Error('Server error');
522
+ // Fetch updated task data and refresh detail panel instead of reloading
523
+ const getRes = await fetch('/api/tasks/' + detailTaskId);
524
+ if (!getRes.ok)
525
+ throw new Error('Failed to fetch updated task');
526
+ const data = await getRes.json();
527
+ renderDetailPanel(data);
528
+ (0, utils_1.showToast)('Task saved successfully');
529
+ // Update lastUpdatedAt so polling doesn't treat our own save as an external update
530
+ try {
531
+ const tsRes = await fetch('/api/board/updated-at');
532
+ if (tsRes.ok) {
533
+ const tsData = await tsRes.json();
534
+ (0, boardPolling_1.setLastUpdatedAt)(tsData.updatedAt);
535
+ }
536
+ }
537
+ catch {
538
+ // Ignore errors when syncing timestamp
539
+ }
540
+ // Refresh board cards in the background
541
+ (0, boardPolling_1.refreshBoardCards)();
542
+ }
543
+ catch {
544
+ (0, utils_1.showToast)('Failed to update task');
545
+ }
546
+ });
547
+ // Card click handler
548
+ document.querySelectorAll('.card').forEach((card) => {
549
+ card.addEventListener('click', async (e) => {
550
+ if (e.defaultPrevented)
551
+ return;
552
+ await openTaskDetail(card.dataset.id);
553
+ });
554
+ });
555
+ // Register callbacks to break circular dependencies
556
+ (0, boardPolling_1.registerDetailPanelCallbacks)({
557
+ openTaskDetail,
558
+ renderDetailPanel,
559
+ showUpdateWarning,
560
+ getDetailTaskId,
561
+ });
562
+ // Register getDetailTaskId with the tags module
563
+ (0, tags_1.registerGetDetailTaskId)(getDetailTaskId);
564
+ }
565
+ //# sourceMappingURL=detailPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detailPanel.js","sourceRoot":"","sources":["../../../src/board/client/detailPanel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare let draggedCard: HTMLElement | null;
2
+ export declare let sourceBody: HTMLElement | null;
3
+ export declare function updateCount(status: string): void;
4
+ export declare function attachDragListeners(card: HTMLElement): void;
5
+ export declare function initDragDrop(): void;
6
+ //# sourceMappingURL=dragDrop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dragDrop.d.ts","sourceRoot":"","sources":["../../../src/board/client/dragDrop.ts"],"names":[],"mappings":"AAIA,eAAO,IAAI,WAAW,EAAE,WAAW,GAAG,IAAW,CAAC;AAClD,eAAO,IAAI,UAAU,EAAE,WAAW,GAAG,IAAW,CAAC;AAEjD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQhD;AAmCD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAY3D;AAED,wBAAgB,YAAY,IAAI,IAAI,CAanC"}