claude-task-viewer 1.4.0 → 1.5.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.
- package/package.json +1 -1
- package/public/index.html +47 -3
package/package.json
CHANGED
package/public/index.html
CHANGED
|
@@ -469,6 +469,26 @@
|
|
|
469
469
|
color: var(--accent);
|
|
470
470
|
}
|
|
471
471
|
|
|
472
|
+
.search-input {
|
|
473
|
+
background: var(--bg-elevated);
|
|
474
|
+
border: 1px solid var(--border);
|
|
475
|
+
border-radius: 6px;
|
|
476
|
+
padding: 8px 12px;
|
|
477
|
+
font-family: var(--mono);
|
|
478
|
+
font-size: 12px;
|
|
479
|
+
color: var(--text-primary);
|
|
480
|
+
width: 200px;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
.search-input:focus {
|
|
484
|
+
outline: none;
|
|
485
|
+
border-color: var(--accent);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
.search-input::placeholder {
|
|
489
|
+
color: var(--text-muted);
|
|
490
|
+
}
|
|
491
|
+
|
|
472
492
|
.icon-btn {
|
|
473
493
|
width: 32px;
|
|
474
494
|
height: 32px;
|
|
@@ -1019,6 +1039,8 @@
|
|
|
1019
1039
|
<p id="session-meta" class="view-meta"></p>
|
|
1020
1040
|
</div>
|
|
1021
1041
|
<div class="view-actions">
|
|
1042
|
+
<input type="text" id="task-search" class="search-input"
|
|
1043
|
+
placeholder="Search tasks..." oninput="searchTasks(this.value)">
|
|
1022
1044
|
<div class="view-progress">
|
|
1023
1045
|
<div class="progress-bar">
|
|
1024
1046
|
<div id="progress-bar" class="progress-fill" style="width: 0%"></div>
|
|
@@ -1090,6 +1112,7 @@
|
|
|
1090
1112
|
let viewMode = 'session';
|
|
1091
1113
|
let sessionFilter = localStorage.getItem('sessionFilter') || 'all'; // 'all' or 'active'
|
|
1092
1114
|
let filterProject = null; // null = all projects, or project path to filter
|
|
1115
|
+
let searchQuery = '';
|
|
1093
1116
|
|
|
1094
1117
|
// DOM
|
|
1095
1118
|
const sessionsList = document.getElementById('sessions-list');
|
|
@@ -1161,6 +1184,7 @@
|
|
|
1161
1184
|
async function fetchTasks(sessionId) {
|
|
1162
1185
|
try {
|
|
1163
1186
|
viewMode = 'session';
|
|
1187
|
+
clearSearch();
|
|
1164
1188
|
const res = await fetch(`/api/sessions/${sessionId}`);
|
|
1165
1189
|
currentTasks = await res.json();
|
|
1166
1190
|
currentSessionId = sessionId;
|
|
@@ -1174,6 +1198,7 @@
|
|
|
1174
1198
|
try {
|
|
1175
1199
|
viewMode = 'all';
|
|
1176
1200
|
currentSessionId = null;
|
|
1201
|
+
clearSearch();
|
|
1177
1202
|
const res = await fetch('/api/tasks/all');
|
|
1178
1203
|
let tasks = await res.json();
|
|
1179
1204
|
if (filterProject) {
|
|
@@ -1311,9 +1336,17 @@
|
|
|
1311
1336
|
}
|
|
1312
1337
|
|
|
1313
1338
|
function renderKanban() {
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1339
|
+
let filteredTasks = currentTasks;
|
|
1340
|
+
if (searchQuery) {
|
|
1341
|
+
filteredTasks = currentTasks.filter(t =>
|
|
1342
|
+
t.subject.toLowerCase().includes(searchQuery) ||
|
|
1343
|
+
(t.description && t.description.toLowerCase().includes(searchQuery))
|
|
1344
|
+
);
|
|
1345
|
+
}
|
|
1346
|
+
|
|
1347
|
+
const pending = filteredTasks.filter(t => t.status === 'pending');
|
|
1348
|
+
const inProgress = filteredTasks.filter(t => t.status === 'in_progress');
|
|
1349
|
+
const completed = filteredTasks.filter(t => t.status === 'completed');
|
|
1317
1350
|
|
|
1318
1351
|
pendingCount.textContent = pending.length;
|
|
1319
1352
|
inProgressCount.textContent = inProgress.length;
|
|
@@ -1505,6 +1538,17 @@
|
|
|
1505
1538
|
showAllTasks();
|
|
1506
1539
|
}
|
|
1507
1540
|
|
|
1541
|
+
function searchTasks(query) {
|
|
1542
|
+
searchQuery = query.toLowerCase();
|
|
1543
|
+
renderKanban();
|
|
1544
|
+
}
|
|
1545
|
+
|
|
1546
|
+
function clearSearch() {
|
|
1547
|
+
searchQuery = '';
|
|
1548
|
+
const searchInput = document.getElementById('task-search');
|
|
1549
|
+
if (searchInput) searchInput.value = '';
|
|
1550
|
+
}
|
|
1551
|
+
|
|
1508
1552
|
function updateProjectDropdown() {
|
|
1509
1553
|
const dropdown = document.getElementById('project-filter');
|
|
1510
1554
|
const projects = [...new Set(sessions.map(s => s.project).filter(Boolean))].sort();
|