From 330b9907b062c3488b91fc9b0c4f506e9735cfcb Mon Sep 17 00:00:00 2001 From: Till-JS <101404291+Till-JS@users.noreply.github.com> Date: Wed, 10 Dec 2025 14:52:11 +0100 Subject: [PATCH] refactor(todo): rename priority labels for better natural language input MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - low → "Später" (was "Niedrig") - medium → "Normal" (was "Mittel") - high → "Wichtig" (was "Hoch") - urgent → "Dringend" (unchanged) CommandBar syntax now supports: !später, !normal, !wichtig, !dringend Shortcut syntax still works: !, !!, !!! 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../src/lib/components/QuickAddTask.svelte | 18 +- .../src/lib/components/TaskEditModal.svelte | 40 ++--- .../components/form/PrioritySelector.svelte | 10 +- .../lib/components/kanban/KanbanBoard.svelte | 31 +++- .../lib/components/kanban/KanbanColumn.svelte | 8 +- .../components/kanban/KanbanFilters.svelte | 6 +- .../components/kanban/KanbanTaskCard.svelte | 23 ++- .../statistics/PriorityDonutChart.svelte | 120 ++++++------- .../apps/web/src/lib/utils/task-parser.ts | 15 +- .../apps/web/src/routes/(app)/+page.svelte | 163 ++++++++++++------ .../web/src/routes/(app)/labels/+page.svelte | 33 +++- .../src/routes/(app)/settings/+page.svelte | 10 +- .../packages/shared/src/constants/index.ts | 3 + .../packages/shared/src/constants/task.ts | 55 ++++++ apps/todo/packages/shared/src/types/task.ts | 1 + 15 files changed, 346 insertions(+), 190 deletions(-) create mode 100644 apps/todo/packages/shared/src/constants/task.ts diff --git a/apps/todo/apps/web/src/lib/components/QuickAddTask.svelte b/apps/todo/apps/web/src/lib/components/QuickAddTask.svelte index 548c61e0d..bb645679f 100644 --- a/apps/todo/apps/web/src/lib/components/QuickAddTask.svelte +++ b/apps/todo/apps/web/src/lib/components/QuickAddTask.svelte @@ -4,6 +4,7 @@ import { viewStore } from '$lib/stores/view.svelte'; import { projectsStore } from '$lib/stores/projects.svelte'; import type { TaskPriority } from '@todo/shared'; + import { PRIORITY_OPTIONS } from '@todo/shared'; import { format, addDays } from 'date-fns'; import { de } from 'date-fns/locale'; @@ -21,14 +22,6 @@ let showPriorityPicker = $state(false); let showProjectPicker = $state(false); - // Priority options - const priorities: { value: TaskPriority; label: string; color: string }[] = [ - { value: 'low', label: 'Niedrig', color: '#22c55e' }, - { value: 'medium', label: 'Mittel', color: '#eab308' }, - { value: 'high', label: 'Hoch', color: '#f97316' }, - { value: 'urgent', label: 'Dringend', color: '#ef4444' }, - ]; - // Quick date options const dateOptions = [ { label: 'Heute', date: new Date() }, @@ -38,7 +31,7 @@ ]; // Derived values - let currentPriority = $derived(priorities.find((p) => p.value === selectedPriority)!); + let currentPriority = $derived(PRIORITY_OPTIONS.find((p) => p.value === selectedPriority)!); let selectedProject = $derived( selectedProjectId ? projectsStore.getById(selectedProjectId) : undefined ); @@ -81,11 +74,14 @@ if (viewStore.currentView !== 'project') { selectedProjectId = undefined; } - inputRef?.focus(); } catch (error) { console.error('Failed to create task:', error); } finally { isLoading = false; + // Focus after isLoading is reset (input is no longer disabled) + requestAnimationFrame(() => { + inputRef?.focus(); + }); } } @@ -232,7 +228,7 @@ {#if showPriorityPicker} + + { + showDeleteConfirm = false; + columnToDelete = null; + }} + onConfirm={confirmDeleteColumn} + variant="danger" + title="Spalte löschen?" + message="Alle Aufgaben dieser Spalte werden in die erste Spalte verschoben." + confirmLabel="Löschen" + cancelLabel="Abbrechen" +/> +