diff --git a/package.json b/package.json index e4df4ba..db0c066 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "my-weekly-todo-list", - "version": "1.47.5", + "version": "1.48.0", "description": "A web-based weekly task management application that organizes to-dos and calendar events in a single, intuitive weekly view", "main": "index.js", "scripts": { diff --git a/src/app/globals.css b/src/app/globals.css index be72334..37f1ebb 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -1839,6 +1839,36 @@ h3 { padding: 1px 7px; } +.kanban-column-delete { + display: none; + background: none; + border: none; + cursor: pointer; + color: #9ca3af; + padding: 2px; + border-radius: 4px; + flex-shrink: 0; +} +.kanban-column-delete:hover { + color: #ef4444; + background: rgba(239,68,68,0.1); +} +.kanban-column-header:hover .kanban-column-delete { + display: flex; +} +.kanban-column-add { + min-width: 60px !important; + max-width: 60px !important; + cursor: pointer; + opacity: 0.5; + transition: opacity 0.15s; + border: 2px dashed #d1d5db; + background: transparent !important; +} +.kanban-column-add:hover { + opacity: 1; +} + .kanban-column-body { flex: 1; padding: 8px; diff --git a/src/components/WeeklyView.tsx b/src/components/WeeklyView.tsx index d820c4c..dae7af3 100644 --- a/src/components/WeeklyView.tsx +++ b/src/components/WeeklyView.tsx @@ -6433,14 +6433,48 @@ export default function WeeklyView() { )}
- {kanbanStages.map((stage) => { + {kanbanStages.map((stage, idx) => { const stageTasks = filteredKanbanTasks.filter(t => (t.kanbanStage || null) === stage.id); return (
- - {stage.name} + { + const updated = kanbanStages.map((s, i) => i === idx ? { ...s, color: e.target.value } : s); + saveKanbanStages(updated); + }} + title={language === "de" ? "Farbe ändern" : "Change color"} + style={{ width: "14px", height: "14px", border: "none", cursor: "pointer", padding: 0, borderRadius: "50%", flexShrink: 0 }} + /> + { + const name = (e.target as HTMLElement).textContent || stage.name; + if (name !== stage.name) { + const updated = kanbanStages.map((s, i) => i === idx ? { ...s, name } : s); + saveKanbanStages(updated); + } + }} + onKeyDown={(e) => { if (e.key === "Enter") { e.preventDefault(); (e.target as HTMLElement).blur(); } }} + > + {stage.name} + {stageTasks.length} +
{stageTasks.map(renderKanbanCard)} @@ -6448,6 +6482,18 @@ export default function WeeklyView() {
); })} + {/* Add stage column */} +
{ + const id = `stage-${Date.now()}`; + saveKanbanStages([...kanbanStages, { id, name: t.stageName, color: "#6b7280" }]); + }} + > +
+ +
+
{/* Unassigned column */} {(() => { const unassigned = filteredKanbanTasks.filter(t => !t.kanbanStage && !t.completed); @@ -11191,62 +11237,7 @@ function SettingsSidebar({ )}
- {/* Kanban Stages Settings */} -
-

- {t.kanbanStages} -

-

{t.kanbanStagesDesc}

-
- {kanbanStages.map((stage, idx) => ( -
- { - const updated = kanbanStages.map((s, i) => i === idx ? { ...s, color: e.target.value } : s); - saveKanbanStages(updated); - }} - style={{ width: "24px", height: "24px", border: "none", cursor: "pointer", padding: 0 }} - /> - { - const updated = kanbanStages.map((s, i) => i === idx ? { ...s, name: e.target.value } : s); - saveKanbanStages(updated); - }} - onKeyDown={(e) => { if (e.key === "Enter") (e.target as HTMLInputElement).blur(); }} - className="weekly-input" - style={{ flex: 1, padding: "4px 8px", fontSize: "0.85rem" }} - /> - -
- ))} -
- -
+ {/* Kanban Stages — moved to inline kanban view */} {/* Weather Settings */}