From 5baca5c26b9cb72a634d49169f2b267b897d442e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Mar 2026 22:13:34 +0000 Subject: [PATCH 1/3] Initial plan From 473caf79f23265ec90fb786d78d90ceaf3b88549 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Mar 2026 22:19:25 +0000 Subject: [PATCH 2/3] Add color picker for project color selection Co-authored-by: JoeProgrammer88 <7156063+JoeProgrammer88@users.noreply.github.com> Agent-Logs-Url: https://github.com/SpeakingInBits/TaskManagerWeb/sessions/1760bbae-274e-43db-aa20-0b0c3ba62279 --- css/styles.css | 1 + index.html | 8 +------- src/app.ts | 22 +++++++++++++++++++--- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/css/styles.css b/css/styles.css index 3ad374a..cec25fd 100644 --- a/css/styles.css +++ b/css/styles.css @@ -642,6 +642,7 @@ html, body { .project-card { background: white; border: 1px solid var(--border-color); + border-top: 4px solid #3b82f6; border-radius: 0.5rem; padding: 1.5rem; cursor: pointer; diff --git a/index.html b/index.html index 5d6c76e..e5f3534 100644 --- a/index.html +++ b/index.html @@ -295,13 +295,7 @@

Project Details

- +
diff --git a/src/app.ts b/src/app.ts index de6e6b2..86fa4a5 100644 --- a/src/app.ts +++ b/src/app.ts @@ -965,13 +965,29 @@ class TaskManager { }); } + normalizeColor(color: string | undefined): string { + const colorMap: Record = { + blue: '#3b82f6', + red: '#ef4444', + green: '#10b981', + yellow: '#f59e0b', + purple: '#a855f7' + }; + const defaultColor = '#3b82f6'; + if (!color) return defaultColor; + const resolved = colorMap[color] || color; + return /^#[0-9a-fA-F]{3,6}$/.test(resolved) ? resolved : defaultColor; + } + renderProjectCard(project: { id: string; name: string; description?: string; color?: string }): string { const tasks = storage.getTasks().filter(t => t.projectId === project.id); const completed = tasks.filter(t => t.completed).length; const percentage = tasks.length === 0 ? 0 : Math.round((completed / tasks.length) * 100); + const borderColor = this.normalizeColor(project.color); + return ` -
+
${project.name}
${project.description ? `
${project.description}
` : ''}
@@ -1009,7 +1025,7 @@ class TaskManager { if (project) { (document.getElementById('projectName') as HTMLInputElement).value = project.name; (document.getElementById('projectDescription') as HTMLTextAreaElement).value = project.description || ''; - (document.getElementById('projectColor') as HTMLSelectElement).value = project.color || 'blue'; + (document.getElementById('projectColor') as HTMLInputElement).value = this.normalizeColor(project.color || 'blue'); deleteBtn.style.display = 'block'; } } @@ -1028,7 +1044,7 @@ class TaskManager { const project = { name: (document.getElementById('projectName') as HTMLInputElement).value, description: (document.getElementById('projectDescription') as HTMLTextAreaElement).value, - color: (document.getElementById('projectColor') as HTMLSelectElement).value + color: (document.getElementById('projectColor') as HTMLInputElement).value }; if (this.currentEditingProjectId) { From 2d9fb3a3acbda9441c677d09bd21e894743a2412 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Mar 2026 22:25:01 +0000 Subject: [PATCH 3/3] Update e2e test to use color picker fill instead of selectOption Co-authored-by: JoeProgrammer88 <7156063+JoeProgrammer88@users.noreply.github.com> Agent-Logs-Url: https://github.com/SpeakingInBits/TaskManagerWeb/sessions/1993dd84-0fb6-43ed-9b70-7152d0028584 --- e2e/app.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/app.spec.ts b/e2e/app.spec.ts index 9cfde54..57505ac 100644 --- a/e2e/app.spec.ts +++ b/e2e/app.spec.ts @@ -145,7 +145,7 @@ test.describe('Task Manager App', () => { await page.click('#addProjectBtn'); await page.fill('#projectName', 'Website Redesign'); await page.fill('#projectDescription', 'Redo the company website'); - await page.selectOption('#projectColor', 'green'); + await page.fill('#projectColor', '#10b981'); await page.click('#projectForm button[type="submit"]'); await expect(page.locator('#projectModal')).not.toHaveClass(/active/);