hzl-web 1.28.3 → 1.30.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/dist/server.d.ts.map +1 -1
- package/dist/server.js +39 -10
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +110 -0
- package/dist/server.test.js.map +1 -1
- package/dist/ui/index.html +410 -23
- package/package.json +2 -2
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,UAAU,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,UAAU,EAGX,MAAM,UAAU,CAAC;AAGlB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAqFD,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY,CAyOpE"}
|
package/dist/server.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createServer } from 'http';
|
|
2
|
+
import { AmbiguousPrefixError, } from 'hzl-core';
|
|
2
3
|
import { DASHBOARD_HTML } from './ui-embed.js';
|
|
3
4
|
// Date filter presets in days
|
|
4
5
|
const DATE_PRESETS = {
|
|
@@ -36,19 +37,31 @@ export function createWebServer(options) {
|
|
|
36
37
|
const { port, host = '0.0.0.0', taskService, eventStore } = options;
|
|
37
38
|
// Route handlers
|
|
38
39
|
function handleTasks(params, res) {
|
|
39
|
-
const
|
|
40
|
+
const dueMonth = params.get('due_month');
|
|
40
41
|
const project = params.get('project');
|
|
42
|
+
const since = params.get('since') || '3d';
|
|
41
43
|
const days = DATE_PRESETS[since] ?? 3;
|
|
42
|
-
// Get tasks from service
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
// Get tasks from service (service validates dueMonth format/range)
|
|
45
|
+
let rows;
|
|
46
|
+
try {
|
|
47
|
+
rows = taskService.listTasks({
|
|
48
|
+
...(dueMonth ? { dueMonth } : { sinceDays: days }),
|
|
49
|
+
project: project ?? undefined,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
// Only treat dueMonth validation errors as 400; re-throw others (e.g. DB errors → 500)
|
|
54
|
+
if (err instanceof Error && (err.message.startsWith('Invalid dueMonth') || err.message.startsWith('Invalid month'))) {
|
|
55
|
+
json(res, { error: err.message }, 400);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
throw err;
|
|
59
|
+
}
|
|
47
60
|
// Get blocked tasks map from service
|
|
48
61
|
const blockedMap = taskService.getBlockedByMap();
|
|
49
62
|
// Get subtask counts for parent tasks (filtered + total)
|
|
50
63
|
const subtaskCounts = taskService.getSubtaskCounts({
|
|
51
|
-
sinceDays: days,
|
|
64
|
+
...(dueMonth ? {} : { sinceDays: days }),
|
|
52
65
|
project: project ?? undefined,
|
|
53
66
|
});
|
|
54
67
|
const subtaskTotals = taskService.getSubtaskCounts();
|
|
@@ -59,16 +72,32 @@ export function createWebServer(options) {
|
|
|
59
72
|
subtask_count: subtaskCounts.get(row.task_id) ?? 0,
|
|
60
73
|
subtask_total: subtaskTotals.get(row.task_id) ?? 0,
|
|
61
74
|
}));
|
|
62
|
-
json(res, { tasks, since, project });
|
|
75
|
+
json(res, { tasks, since: dueMonth ? undefined : since, project, due_month: dueMonth ?? undefined });
|
|
63
76
|
}
|
|
64
77
|
function handleTaskDetail(taskId, res) {
|
|
65
|
-
|
|
78
|
+
let resolvedId;
|
|
79
|
+
try {
|
|
80
|
+
const result = taskService.resolveTaskId(taskId);
|
|
81
|
+
if (!result) {
|
|
82
|
+
notFound(res, `Task not found: ${taskId}`);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
resolvedId = result;
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
if (e instanceof AmbiguousPrefixError) {
|
|
89
|
+
json(res, { error: e.message }, 400);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
throw e;
|
|
93
|
+
}
|
|
94
|
+
const task = taskService.getTaskById(resolvedId);
|
|
66
95
|
if (!task) {
|
|
67
96
|
notFound(res, `Task not found: ${taskId}`);
|
|
68
97
|
return;
|
|
69
98
|
}
|
|
70
99
|
// Get blocking dependencies from service
|
|
71
|
-
const blocked_by = taskService.getBlockingDependencies(
|
|
100
|
+
const blocked_by = taskService.getBlockingDependencies(resolvedId);
|
|
72
101
|
const taskDetail = {
|
|
73
102
|
task_id: task.task_id,
|
|
74
103
|
title: task.title,
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA6C,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/server.test.js
CHANGED
|
@@ -228,6 +228,116 @@ describe('hzl-web server', () => {
|
|
|
228
228
|
const parentTaskB = tasksB.find((t) => t.title === 'Parent B');
|
|
229
229
|
expect(parentTaskB?.subtask_count).toBe(1);
|
|
230
230
|
});
|
|
231
|
+
it('returns tasks filtered by due_month', async () => {
|
|
232
|
+
createServer(4530);
|
|
233
|
+
taskService.createTask({
|
|
234
|
+
title: 'Feb task',
|
|
235
|
+
project: 'test-project',
|
|
236
|
+
due_at: '2026-02-15T00:00:00Z',
|
|
237
|
+
});
|
|
238
|
+
taskService.createTask({
|
|
239
|
+
title: 'Jan task',
|
|
240
|
+
project: 'test-project',
|
|
241
|
+
due_at: '2026-01-10T00:00:00Z',
|
|
242
|
+
});
|
|
243
|
+
const { data } = await fetchJson('/api/tasks?due_month=2026-02');
|
|
244
|
+
const tasks = data.tasks;
|
|
245
|
+
expect(tasks).toHaveLength(1);
|
|
246
|
+
expect(tasks[0].title).toBe('Feb task');
|
|
247
|
+
expect(tasks[0].due_at).toBe('2026-02-15T00:00:00Z');
|
|
248
|
+
});
|
|
249
|
+
it('applies project filter with due_month', async () => {
|
|
250
|
+
createServer(4531);
|
|
251
|
+
projectService.createProject('other-project');
|
|
252
|
+
taskService.createTask({
|
|
253
|
+
title: 'Feb in test',
|
|
254
|
+
project: 'test-project',
|
|
255
|
+
due_at: '2026-02-15T00:00:00Z',
|
|
256
|
+
});
|
|
257
|
+
taskService.createTask({
|
|
258
|
+
title: 'Feb in other',
|
|
259
|
+
project: 'other-project',
|
|
260
|
+
due_at: '2026-02-15T00:00:00Z',
|
|
261
|
+
});
|
|
262
|
+
const { data } = await fetchJson('/api/tasks?due_month=2026-02&project=test-project');
|
|
263
|
+
const tasks = data.tasks;
|
|
264
|
+
expect(tasks).toHaveLength(1);
|
|
265
|
+
expect(tasks[0].title).toBe('Feb in test');
|
|
266
|
+
});
|
|
267
|
+
it('returns 400 for invalid due_month format', async () => {
|
|
268
|
+
createServer(4532);
|
|
269
|
+
const { status } = await fetchJson('/api/tasks?due_month=abc');
|
|
270
|
+
expect(status).toBe(400);
|
|
271
|
+
});
|
|
272
|
+
it('returns 400 for invalid month in due_month', async () => {
|
|
273
|
+
createServer(4533);
|
|
274
|
+
const { status } = await fetchJson('/api/tasks?due_month=2026-13');
|
|
275
|
+
expect(status).toBe(400);
|
|
276
|
+
});
|
|
277
|
+
it('excludes tasks without due_at from due_month query', async () => {
|
|
278
|
+
createServer(4534);
|
|
279
|
+
taskService.createTask({
|
|
280
|
+
title: 'No due date',
|
|
281
|
+
project: 'test-project',
|
|
282
|
+
});
|
|
283
|
+
taskService.createTask({
|
|
284
|
+
title: 'Has due date',
|
|
285
|
+
project: 'test-project',
|
|
286
|
+
due_at: '2026-02-15T00:00:00Z',
|
|
287
|
+
});
|
|
288
|
+
const { data } = await fetchJson('/api/tasks?due_month=2026-02');
|
|
289
|
+
const tasks = data.tasks;
|
|
290
|
+
expect(tasks).toHaveLength(1);
|
|
291
|
+
expect(tasks[0].title).toBe('Has due date');
|
|
292
|
+
});
|
|
293
|
+
it('includes due_month in response metadata when querying by month', async () => {
|
|
294
|
+
createServer(4535);
|
|
295
|
+
const { data } = await fetchJson('/api/tasks?due_month=2026-02');
|
|
296
|
+
const response = data;
|
|
297
|
+
expect(response.due_month).toBe('2026-02');
|
|
298
|
+
expect(response.since).toBeUndefined();
|
|
299
|
+
});
|
|
300
|
+
it('returns 400 for month 00 in due_month', async () => {
|
|
301
|
+
createServer(4536);
|
|
302
|
+
const { status } = await fetchJson('/api/tasks?due_month=2026-00');
|
|
303
|
+
expect(status).toBe(400);
|
|
304
|
+
});
|
|
305
|
+
it('ignores since param when due_month is present', async () => {
|
|
306
|
+
createServer(4538);
|
|
307
|
+
taskService.createTask({
|
|
308
|
+
title: 'Feb task',
|
|
309
|
+
project: 'test-project',
|
|
310
|
+
due_at: '2026-02-15T00:00:00Z',
|
|
311
|
+
});
|
|
312
|
+
// Set updated_at far in the past
|
|
313
|
+
const allTasks = taskService.listTasks({});
|
|
314
|
+
const task = allTasks.find(t => t.title === 'Feb task');
|
|
315
|
+
db.prepare('UPDATE tasks_current SET updated_at = ? WHERE task_id = ?')
|
|
316
|
+
.run('2025-01-01T00:00:00Z', task.task_id);
|
|
317
|
+
// since=1d would normally exclude this old task, but due_month should take precedence
|
|
318
|
+
const { data } = await fetchJson('/api/tasks?due_month=2026-02&since=1d');
|
|
319
|
+
const tasks = data.tasks;
|
|
320
|
+
expect(tasks).toHaveLength(1);
|
|
321
|
+
expect(tasks[0].title).toBe('Feb task');
|
|
322
|
+
});
|
|
323
|
+
it('returns subtask counts for parent tasks in due_month mode', async () => {
|
|
324
|
+
createServer(4537);
|
|
325
|
+
const parent = taskService.createTask({
|
|
326
|
+
title: 'Parent with due date',
|
|
327
|
+
project: 'test-project',
|
|
328
|
+
due_at: '2026-02-15T00:00:00Z',
|
|
329
|
+
});
|
|
330
|
+
taskService.createTask({
|
|
331
|
+
title: 'Child task',
|
|
332
|
+
project: 'test-project',
|
|
333
|
+
parent_id: parent.task_id,
|
|
334
|
+
});
|
|
335
|
+
const { data } = await fetchJson('/api/tasks?due_month=2026-02');
|
|
336
|
+
const tasks = data.tasks;
|
|
337
|
+
const parentTask = tasks.find(t => t.title === 'Parent with due date');
|
|
338
|
+
expect(parentTask?.subtask_count).toBe(1);
|
|
339
|
+
expect(parentTask?.subtask_total).toBe(1);
|
|
340
|
+
});
|
|
231
341
|
});
|
|
232
342
|
describe('GET /api/tasks/:id', () => {
|
|
233
343
|
it('returns task detail', async () => {
|
package/dist/server.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.test.js","sourceRoot":"","sources":["../src/server.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.test.js","sourceRoot":"","sources":["../src/server.test.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/index.html
CHANGED
|
@@ -1031,6 +1031,158 @@
|
|
|
1031
1031
|
display: block;
|
|
1032
1032
|
}
|
|
1033
1033
|
}
|
|
1034
|
+
|
|
1035
|
+
/* Calendar View */
|
|
1036
|
+
.calendar-container {
|
|
1037
|
+
padding: 16px 24px;
|
|
1038
|
+
max-width: 1200px;
|
|
1039
|
+
margin: 0 auto;
|
|
1040
|
+
}
|
|
1041
|
+
.calendar-container.hidden { display: none; }
|
|
1042
|
+
.calendar-header {
|
|
1043
|
+
display: flex;
|
|
1044
|
+
align-items: center;
|
|
1045
|
+
gap: 12px;
|
|
1046
|
+
margin-bottom: 16px;
|
|
1047
|
+
}
|
|
1048
|
+
.calendar-nav-btn {
|
|
1049
|
+
font-family: var(--font-mono);
|
|
1050
|
+
font-size: 14px;
|
|
1051
|
+
background: var(--bg-card);
|
|
1052
|
+
color: var(--text-primary);
|
|
1053
|
+
border: 1px solid var(--border);
|
|
1054
|
+
border-radius: 6px;
|
|
1055
|
+
padding: 4px 10px;
|
|
1056
|
+
cursor: pointer;
|
|
1057
|
+
}
|
|
1058
|
+
.calendar-nav-btn:hover { background: var(--bg-hover); }
|
|
1059
|
+
.calendar-month-label {
|
|
1060
|
+
font-size: 18px;
|
|
1061
|
+
font-weight: 600;
|
|
1062
|
+
color: var(--text-primary);
|
|
1063
|
+
min-width: 200px;
|
|
1064
|
+
text-align: center;
|
|
1065
|
+
}
|
|
1066
|
+
.calendar-grid {
|
|
1067
|
+
display: grid;
|
|
1068
|
+
grid-template-columns: repeat(7, 1fr);
|
|
1069
|
+
gap: 1px;
|
|
1070
|
+
background: var(--border);
|
|
1071
|
+
border: 1px solid var(--border);
|
|
1072
|
+
border-radius: 8px;
|
|
1073
|
+
overflow: hidden;
|
|
1074
|
+
}
|
|
1075
|
+
.calendar-day-header {
|
|
1076
|
+
background: var(--bg-card);
|
|
1077
|
+
color: var(--text-muted);
|
|
1078
|
+
font-size: 12px;
|
|
1079
|
+
font-weight: 600;
|
|
1080
|
+
text-align: center;
|
|
1081
|
+
padding: 8px 4px;
|
|
1082
|
+
text-transform: uppercase;
|
|
1083
|
+
}
|
|
1084
|
+
.calendar-day {
|
|
1085
|
+
background: var(--bg-card);
|
|
1086
|
+
min-height: 100px;
|
|
1087
|
+
padding: 4px;
|
|
1088
|
+
display: flex;
|
|
1089
|
+
flex-direction: column;
|
|
1090
|
+
}
|
|
1091
|
+
.calendar-day.other-month {
|
|
1092
|
+
opacity: 0.35;
|
|
1093
|
+
}
|
|
1094
|
+
.calendar-day.today {
|
|
1095
|
+
border: 2px solid var(--accent);
|
|
1096
|
+
border-radius: 2px;
|
|
1097
|
+
}
|
|
1098
|
+
.calendar-day-number {
|
|
1099
|
+
font-size: 12px;
|
|
1100
|
+
color: var(--text-secondary);
|
|
1101
|
+
margin-bottom: 4px;
|
|
1102
|
+
font-weight: 500;
|
|
1103
|
+
}
|
|
1104
|
+
.calendar-day.today .calendar-day-number {
|
|
1105
|
+
color: var(--accent);
|
|
1106
|
+
font-weight: 700;
|
|
1107
|
+
}
|
|
1108
|
+
.calendar-day-tasks {
|
|
1109
|
+
display: flex;
|
|
1110
|
+
flex-direction: column;
|
|
1111
|
+
gap: 2px;
|
|
1112
|
+
flex: 1;
|
|
1113
|
+
}
|
|
1114
|
+
.calendar-mini-card { border-left-color: var(--text-muted); }
|
|
1115
|
+
.calendar-mini-card[data-status="backlog"] { border-left-color: var(--status-backlog); }
|
|
1116
|
+
.calendar-mini-card[data-status="ready"] { border-left-color: var(--status-ready); }
|
|
1117
|
+
.calendar-mini-card[data-status="in_progress"] { border-left-color: var(--status-in-progress); }
|
|
1118
|
+
.calendar-mini-card[data-status="blocked"] { border-left-color: var(--status-blocked); }
|
|
1119
|
+
.calendar-mini-card[data-status="done"] { border-left-color: var(--status-done); }
|
|
1120
|
+
.calendar-mini-card {
|
|
1121
|
+
background: var(--bg-primary);
|
|
1122
|
+
border-left: 3px solid;
|
|
1123
|
+
border-radius: 3px;
|
|
1124
|
+
padding: 2px 4px;
|
|
1125
|
+
cursor: pointer;
|
|
1126
|
+
display: flex;
|
|
1127
|
+
align-items: center;
|
|
1128
|
+
gap: 4px;
|
|
1129
|
+
overflow: hidden;
|
|
1130
|
+
}
|
|
1131
|
+
.calendar-mini-card:hover { background: var(--bg-hover); }
|
|
1132
|
+
.calendar-mini-title {
|
|
1133
|
+
font-size: 11px;
|
|
1134
|
+
color: var(--text-primary);
|
|
1135
|
+
white-space: nowrap;
|
|
1136
|
+
overflow: hidden;
|
|
1137
|
+
text-overflow: ellipsis;
|
|
1138
|
+
flex: 1;
|
|
1139
|
+
}
|
|
1140
|
+
.calendar-mini-project {
|
|
1141
|
+
font-size: 9px;
|
|
1142
|
+
color: var(--text-muted);
|
|
1143
|
+
background: var(--bg-card);
|
|
1144
|
+
padding: 0 4px;
|
|
1145
|
+
border-radius: 3px;
|
|
1146
|
+
white-space: nowrap;
|
|
1147
|
+
flex-shrink: 0;
|
|
1148
|
+
}
|
|
1149
|
+
.calendar-more-link {
|
|
1150
|
+
font-size: 11px;
|
|
1151
|
+
color: var(--accent);
|
|
1152
|
+
cursor: pointer;
|
|
1153
|
+
padding: 1px 4px;
|
|
1154
|
+
}
|
|
1155
|
+
.calendar-more-link:hover { text-decoration: underline; }
|
|
1156
|
+
.calendar-popover {
|
|
1157
|
+
position: absolute;
|
|
1158
|
+
z-index: 100;
|
|
1159
|
+
background: var(--bg-card);
|
|
1160
|
+
border: 1px solid var(--border);
|
|
1161
|
+
border-radius: 8px;
|
|
1162
|
+
box-shadow: 0 4px 12px rgba(0,0,0,0.3);
|
|
1163
|
+
padding: 8px;
|
|
1164
|
+
min-width: 200px;
|
|
1165
|
+
max-width: 280px;
|
|
1166
|
+
max-height: 300px;
|
|
1167
|
+
overflow-y: auto;
|
|
1168
|
+
}
|
|
1169
|
+
.calendar-popover-header {
|
|
1170
|
+
font-size: 12px;
|
|
1171
|
+
font-weight: 600;
|
|
1172
|
+
color: var(--text-secondary);
|
|
1173
|
+
margin-bottom: 6px;
|
|
1174
|
+
padding-bottom: 4px;
|
|
1175
|
+
border-bottom: 1px solid var(--border);
|
|
1176
|
+
}
|
|
1177
|
+
.calendar-popover .calendar-mini-card {
|
|
1178
|
+
margin-bottom: 2px;
|
|
1179
|
+
}
|
|
1180
|
+
.calendar-empty-state {
|
|
1181
|
+
text-align: center;
|
|
1182
|
+
color: var(--text-muted);
|
|
1183
|
+
padding: 32px 16px;
|
|
1184
|
+
font-size: 14px;
|
|
1185
|
+
}
|
|
1034
1186
|
</style>
|
|
1035
1187
|
</head>
|
|
1036
1188
|
<body>
|
|
@@ -1040,6 +1192,7 @@
|
|
|
1040
1192
|
<span class="logo">hzl dashboard</span>
|
|
1041
1193
|
<div class="view-toggle" id="viewToggle">
|
|
1042
1194
|
<button class="view-btn active" data-view="kanban">Kanban</button>
|
|
1195
|
+
<button class="view-btn" data-view="calendar">Calendar</button>
|
|
1043
1196
|
<button class="view-btn" data-view="graph">Graph</button>
|
|
1044
1197
|
</div>
|
|
1045
1198
|
</div>
|
|
@@ -1164,6 +1317,9 @@
|
|
|
1164
1317
|
</div>
|
|
1165
1318
|
</main>
|
|
1166
1319
|
|
|
1320
|
+
<!-- Calendar View Container -->
|
|
1321
|
+
<div id="calendarContainer" class="calendar-container hidden"></div>
|
|
1322
|
+
|
|
1167
1323
|
<!-- Graph View Container -->
|
|
1168
1324
|
<div id="graphContainer" class="graph-container hidden">
|
|
1169
1325
|
<div class="graph-loading" id="graphLoading">
|
|
@@ -1216,6 +1372,8 @@
|
|
|
1216
1372
|
let nodeStatusMap = new Map();
|
|
1217
1373
|
let pendingModalRequestId = 0; // Track modal fetch requests to avoid race conditions
|
|
1218
1374
|
let isPolling = false; // Guard against concurrent poll() calls
|
|
1375
|
+
let calendarYear = new Date().getFullYear();
|
|
1376
|
+
let calendarMonth = new Date().getMonth(); // 0-indexed
|
|
1219
1377
|
|
|
1220
1378
|
// DOM Elements
|
|
1221
1379
|
const dateFilter = document.getElementById('dateFilter');
|
|
@@ -1238,6 +1396,7 @@
|
|
|
1238
1396
|
const showSubtasksCheckbox = document.getElementById('showSubtasks');
|
|
1239
1397
|
const viewToggle = document.getElementById('viewToggle');
|
|
1240
1398
|
const board = document.getElementById('board');
|
|
1399
|
+
const calendarContainer = document.getElementById('calendarContainer');
|
|
1241
1400
|
const graphContainer = document.getElementById('graphContainer');
|
|
1242
1401
|
const graphLoading = document.getElementById('graphLoading');
|
|
1243
1402
|
|
|
@@ -1631,9 +1790,15 @@
|
|
|
1631
1790
|
|
|
1632
1791
|
// API calls
|
|
1633
1792
|
async function fetchTasks() {
|
|
1634
|
-
const since = dateFilter.value;
|
|
1635
1793
|
const project = projectFilter.value;
|
|
1636
|
-
|
|
1794
|
+
let url;
|
|
1795
|
+
if (activeView === 'calendar') {
|
|
1796
|
+
const mm = String(calendarMonth + 1).padStart(2, '0');
|
|
1797
|
+
url = `/api/tasks?due_month=${calendarYear}-${mm}${project ? `&project=${encodeURIComponent(project)}` : ''}`;
|
|
1798
|
+
} else {
|
|
1799
|
+
const since = dateFilter.value;
|
|
1800
|
+
url = `/api/tasks?since=${since}${project ? `&project=${encodeURIComponent(project)}` : ''}`;
|
|
1801
|
+
}
|
|
1637
1802
|
const res = await fetch(url);
|
|
1638
1803
|
if (!res.ok) throw new Error('Failed to fetch tasks');
|
|
1639
1804
|
const data = await res.json();
|
|
@@ -1713,7 +1878,7 @@
|
|
|
1713
1878
|
|
|
1714
1879
|
let extra = '';
|
|
1715
1880
|
if (isBlocked) {
|
|
1716
|
-
extra = `<div class="card-blocked">Blocked by: ${task.blocked_by.map(id => id.slice(0, 8)).join(', ')}</div>`;
|
|
1881
|
+
extra = `<div class="card-blocked">Blocked by: ${task.blocked_by.map(id => escapeHtml(id.slice(0, 8))).join(', ')}</div>`;
|
|
1717
1882
|
}
|
|
1718
1883
|
if (task.status === 'in_progress' && task.lease_until) {
|
|
1719
1884
|
const remaining = formatTimeRemaining(task.lease_until);
|
|
@@ -1733,7 +1898,7 @@
|
|
|
1733
1898
|
${subtaskHtml}
|
|
1734
1899
|
<div class="card-meta">
|
|
1735
1900
|
<span class="card-project">${escapeHtml(task.project)}</span>
|
|
1736
|
-
${task.assignee ? `<span class="card-agent">${task.assignee.slice(0, 8)}</span>` : ''}
|
|
1901
|
+
${task.assignee ? `<span class="card-agent">${escapeHtml(task.assignee.slice(0, 8))}</span>` : ''}
|
|
1737
1902
|
</div>
|
|
1738
1903
|
${extra}
|
|
1739
1904
|
</div>
|
|
@@ -1759,6 +1924,217 @@
|
|
|
1759
1924
|
return columns;
|
|
1760
1925
|
}
|
|
1761
1926
|
|
|
1927
|
+
// Calendar state shared between renderCalendar and popover
|
|
1928
|
+
let calendarTasksByDay = {};
|
|
1929
|
+
|
|
1930
|
+
function renderMiniCard(task) {
|
|
1931
|
+
return `<div class="calendar-mini-card" data-task-id="${task.task_id}" data-status="${task.status}">
|
|
1932
|
+
<span class="calendar-mini-title">${escapeHtml(task.title)}</span>
|
|
1933
|
+
<span class="calendar-mini-project">${escapeHtml(task.project)}</span>
|
|
1934
|
+
</div>`;
|
|
1935
|
+
}
|
|
1936
|
+
|
|
1937
|
+
function renderCalendar() {
|
|
1938
|
+
const now = new Date();
|
|
1939
|
+
const isCurrentMonth = calendarYear === now.getFullYear() && calendarMonth === now.getMonth();
|
|
1940
|
+
const todayDate = now.getDate();
|
|
1941
|
+
const MAX_CARDS = 3;
|
|
1942
|
+
|
|
1943
|
+
// Filter to current month in local timezone and group by day in single pass
|
|
1944
|
+
// (Server already filters by project via ?project= param, no client-side filter needed)
|
|
1945
|
+
calendarTasksByDay = {};
|
|
1946
|
+
let monthTaskCount = 0;
|
|
1947
|
+
for (const t of tasks) {
|
|
1948
|
+
if (!t.due_at) continue;
|
|
1949
|
+
const d = new Date(t.due_at);
|
|
1950
|
+
if (d.getFullYear() !== calendarYear || d.getMonth() !== calendarMonth) continue;
|
|
1951
|
+
const day = d.getDate();
|
|
1952
|
+
if (!calendarTasksByDay[day]) calendarTasksByDay[day] = [];
|
|
1953
|
+
calendarTasksByDay[day].push(t);
|
|
1954
|
+
monthTaskCount++;
|
|
1955
|
+
}
|
|
1956
|
+
|
|
1957
|
+
// Month label
|
|
1958
|
+
const monthLabel = new Date(calendarYear, calendarMonth, 1)
|
|
1959
|
+
.toLocaleDateString(undefined, { month: 'long', year: 'numeric' });
|
|
1960
|
+
|
|
1961
|
+
// First day of month (0=Sun) and number of days
|
|
1962
|
+
const firstDow = new Date(calendarYear, calendarMonth, 1).getDay();
|
|
1963
|
+
const daysInMonth = new Date(calendarYear, calendarMonth + 1, 0).getDate();
|
|
1964
|
+
const daysInPrevMonth = new Date(calendarYear, calendarMonth, 0).getDate();
|
|
1965
|
+
|
|
1966
|
+
// Build header
|
|
1967
|
+
let html = `
|
|
1968
|
+
<div class="calendar-header">
|
|
1969
|
+
<button class="calendar-nav-btn" id="calPrev">←</button>
|
|
1970
|
+
<div class="calendar-month-label">${escapeHtml(monthLabel)}</div>
|
|
1971
|
+
<button class="calendar-nav-btn" id="calNext">→</button>
|
|
1972
|
+
<button class="calendar-nav-btn" id="calToday">Today</button>
|
|
1973
|
+
</div>
|
|
1974
|
+
`;
|
|
1975
|
+
|
|
1976
|
+
// Empty state message (grid still renders for visual context)
|
|
1977
|
+
if (monthTaskCount === 0) {
|
|
1978
|
+
html += `<div class="calendar-empty-state">No tasks with due dates in ${escapeHtml(monthLabel)}</div>`;
|
|
1979
|
+
}
|
|
1980
|
+
|
|
1981
|
+
html += `<div class="calendar-grid">`;
|
|
1982
|
+
|
|
1983
|
+
// Day-of-week headers
|
|
1984
|
+
const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
1985
|
+
for (const d of dayNames) {
|
|
1986
|
+
html += `<div class="calendar-day-header">${d}</div>`;
|
|
1987
|
+
}
|
|
1988
|
+
|
|
1989
|
+
// Leading days from previous month
|
|
1990
|
+
for (let i = firstDow - 1; i >= 0; i--) {
|
|
1991
|
+
const day = daysInPrevMonth - i;
|
|
1992
|
+
html += `<div class="calendar-day other-month"><span class="calendar-day-number">${day}</span></div>`;
|
|
1993
|
+
}
|
|
1994
|
+
|
|
1995
|
+
// Current month days
|
|
1996
|
+
for (let d = 1; d <= daysInMonth; d++) {
|
|
1997
|
+
const isToday = isCurrentMonth && d === todayDate;
|
|
1998
|
+
const dateStr = `${calendarYear}-${String(calendarMonth + 1).padStart(2, '0')}-${String(d).padStart(2, '0')}`;
|
|
1999
|
+
html += `<div class="calendar-day${isToday ? ' today' : ''}" data-date="${dateStr}">`;
|
|
2000
|
+
html += `<span class="calendar-day-number">${d}</span>`;
|
|
2001
|
+
html += `<div class="calendar-day-tasks">`;
|
|
2002
|
+
|
|
2003
|
+
const dayTasks = calendarTasksByDay[d] || [];
|
|
2004
|
+
const visible = dayTasks.slice(0, MAX_CARDS);
|
|
2005
|
+
for (const t of visible) {
|
|
2006
|
+
html += renderMiniCard(t);
|
|
2007
|
+
}
|
|
2008
|
+
if (dayTasks.length > MAX_CARDS) {
|
|
2009
|
+
html += `<div class="calendar-more-link" data-date="${dateStr}">+${dayTasks.length - MAX_CARDS} more</div>`;
|
|
2010
|
+
}
|
|
2011
|
+
|
|
2012
|
+
html += `</div></div>`;
|
|
2013
|
+
}
|
|
2014
|
+
|
|
2015
|
+
// Trailing days to fill last week
|
|
2016
|
+
const totalCells = firstDow + daysInMonth;
|
|
2017
|
+
const trailingDays = (7 - (totalCells % 7)) % 7;
|
|
2018
|
+
for (let d = 1; d <= trailingDays; d++) {
|
|
2019
|
+
html += `<div class="calendar-day other-month"><span class="calendar-day-number">${d}</span></div>`;
|
|
2020
|
+
}
|
|
2021
|
+
|
|
2022
|
+
html += `</div>`;
|
|
2023
|
+
calendarContainer.innerHTML = html;
|
|
2024
|
+
|
|
2025
|
+
// Wire navigation (named functions to avoid re-adding anonymous listeners)
|
|
2026
|
+
document.getElementById('calPrev').addEventListener('click', navPrev);
|
|
2027
|
+
document.getElementById('calNext').addEventListener('click', navNext);
|
|
2028
|
+
document.getElementById('calToday').addEventListener('click', navToday);
|
|
2029
|
+
}
|
|
2030
|
+
|
|
2031
|
+
function navPrev() {
|
|
2032
|
+
calendarMonth--;
|
|
2033
|
+
if (calendarMonth < 0) { calendarMonth = 11; calendarYear--; }
|
|
2034
|
+
poll();
|
|
2035
|
+
}
|
|
2036
|
+
function navNext() {
|
|
2037
|
+
calendarMonth++;
|
|
2038
|
+
if (calendarMonth > 11) { calendarMonth = 0; calendarYear++; }
|
|
2039
|
+
poll();
|
|
2040
|
+
}
|
|
2041
|
+
function navToday() {
|
|
2042
|
+
const today = new Date();
|
|
2043
|
+
calendarYear = today.getFullYear();
|
|
2044
|
+
calendarMonth = today.getMonth();
|
|
2045
|
+
poll();
|
|
2046
|
+
}
|
|
2047
|
+
|
|
2048
|
+
// Calendar popover for "+N more" links
|
|
2049
|
+
let activePopover = null;
|
|
2050
|
+
let popoverOutsideListener = null;
|
|
2051
|
+
|
|
2052
|
+
function dismissPopover() {
|
|
2053
|
+
if (popoverOutsideListener) {
|
|
2054
|
+
document.removeEventListener('click', popoverOutsideListener);
|
|
2055
|
+
popoverOutsideListener = null;
|
|
2056
|
+
}
|
|
2057
|
+
if (activePopover) {
|
|
2058
|
+
activePopover.remove();
|
|
2059
|
+
activePopover = null;
|
|
2060
|
+
}
|
|
2061
|
+
}
|
|
2062
|
+
|
|
2063
|
+
function showCalendarPopover(dateStr, anchorEl) {
|
|
2064
|
+
dismissPopover();
|
|
2065
|
+
|
|
2066
|
+
// Reuse grouped data from renderCalendar instead of re-filtering
|
|
2067
|
+
const [y, m, d] = dateStr.split('-').map(Number);
|
|
2068
|
+
const dayTasks = calendarTasksByDay[d] || [];
|
|
2069
|
+
|
|
2070
|
+
if (dayTasks.length === 0) return;
|
|
2071
|
+
|
|
2072
|
+
// Format date for header
|
|
2073
|
+
const headerDate = new Date(y, m - 1, d)
|
|
2074
|
+
.toLocaleDateString(undefined, { month: 'long', day: 'numeric' });
|
|
2075
|
+
|
|
2076
|
+
const popover = document.createElement('div');
|
|
2077
|
+
popover.className = 'calendar-popover';
|
|
2078
|
+
popover.innerHTML = `<div class="calendar-popover-header">${escapeHtml(headerDate)}</div>`
|
|
2079
|
+
+ dayTasks.map(t => renderMiniCard(t)).join('');
|
|
2080
|
+
|
|
2081
|
+
// Position below the anchor, clamped to viewport edges
|
|
2082
|
+
const rect = anchorEl.getBoundingClientRect();
|
|
2083
|
+
const popoverWidth = 280; // matches CSS max-width
|
|
2084
|
+
const popoverMaxHeight = 300; // matches CSS max-height
|
|
2085
|
+
const left = Math.min(rect.left, window.innerWidth - popoverWidth - 8);
|
|
2086
|
+
// If popover would overflow bottom, position above the anchor instead
|
|
2087
|
+
const spaceBelow = window.innerHeight - rect.bottom - 8;
|
|
2088
|
+
const top = spaceBelow >= popoverMaxHeight
|
|
2089
|
+
? rect.bottom + 4
|
|
2090
|
+
: Math.max(8, rect.top - popoverMaxHeight - 4);
|
|
2091
|
+
popover.style.position = 'fixed';
|
|
2092
|
+
popover.style.left = left + 'px';
|
|
2093
|
+
popover.style.top = top + 'px';
|
|
2094
|
+
|
|
2095
|
+
document.body.appendChild(popover);
|
|
2096
|
+
activePopover = popover;
|
|
2097
|
+
|
|
2098
|
+
// Dismiss on click-outside (next tick to avoid immediate dismiss)
|
|
2099
|
+
setTimeout(() => {
|
|
2100
|
+
popoverOutsideListener = function onClickOutside(e) {
|
|
2101
|
+
if (activePopover && !activePopover.contains(e.target)) {
|
|
2102
|
+
dismissPopover();
|
|
2103
|
+
}
|
|
2104
|
+
};
|
|
2105
|
+
document.addEventListener('click', popoverOutsideListener);
|
|
2106
|
+
}, 0);
|
|
2107
|
+
}
|
|
2108
|
+
|
|
2109
|
+
// Event delegation for calendar interactions
|
|
2110
|
+
calendarContainer.addEventListener('click', (e) => {
|
|
2111
|
+
// "+N more" link
|
|
2112
|
+
const moreLink = e.target.closest('.calendar-more-link');
|
|
2113
|
+
if (moreLink) {
|
|
2114
|
+
e.stopPropagation();
|
|
2115
|
+
showCalendarPopover(moreLink.dataset.date, moreLink);
|
|
2116
|
+
return;
|
|
2117
|
+
}
|
|
2118
|
+
|
|
2119
|
+
// Mini card click → open task modal
|
|
2120
|
+
const card = e.target.closest('.calendar-mini-card');
|
|
2121
|
+
if (card) {
|
|
2122
|
+
dismissPopover();
|
|
2123
|
+
openTaskModal(card.dataset.taskId);
|
|
2124
|
+
return;
|
|
2125
|
+
}
|
|
2126
|
+
});
|
|
2127
|
+
|
|
2128
|
+
// Also handle clicks inside popover (which is appended to body, not calendarContainer)
|
|
2129
|
+
document.addEventListener('click', (e) => {
|
|
2130
|
+
if (!activePopover) return;
|
|
2131
|
+
const card = e.target.closest('.calendar-popover .calendar-mini-card');
|
|
2132
|
+
if (card) {
|
|
2133
|
+
dismissPopover();
|
|
2134
|
+
openTaskModal(card.dataset.taskId);
|
|
2135
|
+
}
|
|
2136
|
+
});
|
|
2137
|
+
|
|
1762
2138
|
function renderBoard() {
|
|
1763
2139
|
const showSubtasks = showSubtasksCheckbox.checked;
|
|
1764
2140
|
const emojiMap = buildEmojiMap(tasks);
|
|
@@ -1897,6 +2273,12 @@
|
|
|
1897
2273
|
<div class="modal-meta-label">Created</div>
|
|
1898
2274
|
<div class="modal-meta-value">${formatTime(data.task.created_at)}</div>
|
|
1899
2275
|
</div>
|
|
2276
|
+
${data.task.due_at ? `
|
|
2277
|
+
<div class="modal-meta-item">
|
|
2278
|
+
<div class="modal-meta-label">Due Date</div>
|
|
2279
|
+
<div class="modal-meta-value">${new Date(data.task.due_at).toLocaleDateString()}</div>
|
|
2280
|
+
</div>
|
|
2281
|
+
` : ''}
|
|
1900
2282
|
</div>
|
|
1901
2283
|
</div>
|
|
1902
2284
|
`;
|
|
@@ -1908,7 +2290,7 @@
|
|
|
1908
2290
|
<div class="modal-meta">
|
|
1909
2291
|
<div class="modal-meta-item">
|
|
1910
2292
|
<div class="modal-meta-label">Agent</div>
|
|
1911
|
-
<div class="modal-meta-value">${data.task.assignee}</div>
|
|
2293
|
+
<div class="modal-meta-value">${escapeHtml(data.task.assignee)}</div>
|
|
1912
2294
|
</div>
|
|
1913
2295
|
${data.task.lease_until ? `
|
|
1914
2296
|
<div class="modal-meta-item">
|
|
@@ -2092,9 +2474,13 @@
|
|
|
2092
2474
|
projectFilter.innerHTML = '<option value="">All projects</option>' +
|
|
2093
2475
|
stats.projects.map(p => `<option value="${escapeHtml(p)}" ${p === currentProject ? 'selected' : ''}>${escapeHtml(p)}</option>`).join('');
|
|
2094
2476
|
|
|
2095
|
-
|
|
2477
|
+
if (activeView === 'calendar') {
|
|
2478
|
+
renderCalendar();
|
|
2479
|
+
} else {
|
|
2480
|
+
renderBoard();
|
|
2481
|
+
updateGraphData();
|
|
2482
|
+
}
|
|
2096
2483
|
renderActivity();
|
|
2097
|
-
updateGraphData();
|
|
2098
2484
|
|
|
2099
2485
|
lastPollTime = Date.now();
|
|
2100
2486
|
updateConnectionStatus(true);
|
|
@@ -2286,6 +2672,11 @@
|
|
|
2286
2672
|
|
|
2287
2673
|
// View toggle (Kanban/Graph)
|
|
2288
2674
|
function setActiveView(view) {
|
|
2675
|
+
// Dismiss calendar popover when leaving calendar view
|
|
2676
|
+
if (activeView === 'calendar' && view !== 'calendar') {
|
|
2677
|
+
dismissPopover();
|
|
2678
|
+
}
|
|
2679
|
+
|
|
2289
2680
|
activeView = view;
|
|
2290
2681
|
|
|
2291
2682
|
// Update toggle buttons
|
|
@@ -2294,32 +2685,28 @@
|
|
|
2294
2685
|
});
|
|
2295
2686
|
|
|
2296
2687
|
// Show/hide containers
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2688
|
+
board.style.display = view === 'kanban' ? '' : 'none';
|
|
2689
|
+
calendarContainer.classList.toggle('hidden', view !== 'calendar');
|
|
2690
|
+
graphContainer.classList.toggle('hidden', view !== 'graph');
|
|
2691
|
+
mobileTabs.style.display = view === 'kanban' ? '' : 'none';
|
|
2692
|
+
document.getElementById('mobileCardsContainer').style.display = view === 'kanban' ? '' : 'none';
|
|
2302
2693
|
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
graphInstance.pauseAnimation();
|
|
2306
|
-
}
|
|
2307
|
-
} else {
|
|
2308
|
-
board.style.display = 'none';
|
|
2309
|
-
graphContainer.classList.remove('hidden');
|
|
2310
|
-
mobileTabs.style.display = 'none';
|
|
2311
|
-
document.getElementById('mobileCardsContainer').style.display = 'none';
|
|
2694
|
+
// Hide date filter when calendar is active (calendar has its own month navigation)
|
|
2695
|
+
dateFilter.closest('.filter-group').style.display = view === 'calendar' ? 'none' : '';
|
|
2312
2696
|
|
|
2313
|
-
|
|
2697
|
+
// Pause/resume graph
|
|
2698
|
+
if (view === 'graph') {
|
|
2314
2699
|
if (!graphInitialized && typeof ForceGraph !== 'undefined') {
|
|
2315
2700
|
initGraph();
|
|
2316
2701
|
} else if (graphInstance) {
|
|
2317
|
-
// Resume graph animation when switching back
|
|
2318
2702
|
graphInstance.resumeAnimation();
|
|
2319
2703
|
}
|
|
2704
|
+
} else if (graphInstance) {
|
|
2705
|
+
graphInstance.pauseAnimation();
|
|
2320
2706
|
}
|
|
2321
2707
|
|
|
2322
2708
|
savePreferences();
|
|
2709
|
+
poll();
|
|
2323
2710
|
}
|
|
2324
2711
|
|
|
2325
2712
|
viewToggle.addEventListener('click', (e) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hzl-web",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.30.0",
|
|
4
4
|
"description": "Web dashboard for HZL - A Kanban-style task monitoring UI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"visualization"
|
|
53
53
|
],
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"hzl-core": "1.
|
|
55
|
+
"hzl-core": "1.30.0"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@types/node": "^25.2.1",
|