) {
if (e.nativeEvent.isComposing || e.keyCode === 229) return;
+ if (soundEnabled) playKeystroke(e);
if (e.key === "Escape" && searchMode) {
e.preventDefault();
@@ -362,7 +361,6 @@ export function TaskInput() {
const p = pendingSubmit;
setPendingSubmit(null);
finalizeSubmit(p.parts, p.iso, p.firstProject);
- if (p.iso) setCalendarJumpIso(p.iso);
}}
/>
)}
diff --git a/src/components/TaskItem.tsx b/src/components/TaskItem.tsx
index e7b3258..c74281c 100644
--- a/src/components/TaskItem.tsx
+++ b/src/components/TaskItem.tsx
@@ -3,6 +3,7 @@ import { useSortable } from "@dnd-kit/sortable";
import { CSS } from "@dnd-kit/utilities";
import { openUrl } from "@tauri-apps/plugin-opener";
import { useStore } from "../store";
+import { playKeystroke } from "../utils/sound";
import { useUiContext } from "../context/UiContext";
import { Tag, Task } from "../types";
import { Popover } from "./Popover";
@@ -32,9 +33,10 @@ export function TaskItem({ task, draggable = true }: Props) {
const urlEnabled = settings.urlEnabled ?? true;
const depth = useMemo(() => getDepth(task, allTasks), [task, allTasks]);
+ const soundEnabled = useStore((s) => s.settings.soundEnabled);
const isLocked = useMemo(() => hasUndoneDescendants(task.id, allTasks), [task.id, allTasks]);
- const { selectedTaskId, focusedTaskId, isReorderMode, bulkSelected, setSelectedTaskId, vibratingTaskId, setCalendarJumpIso, completingTaskIds } = useUiContext();
+ const { selectedTaskId, focusedTaskId, isReorderMode, bulkSelected, setSelectedTaskId, vibratingTaskId, completingTaskIds } = useUiContext();
const isSelected = selectedTaskId === task.id;
const isFocused = focusedTaskId === task.id;
const isBulkSelected = bulkSelected.has(task.id);
@@ -156,8 +158,10 @@ export function TaskItem({ task, draggable = true }: Props) {
}}
style={{ ...style, paddingLeft: depth > 0 ? `${depth * 20 + 8}px` : undefined }}
data-project={task.projectName || undefined}
+ data-task-id={task.id}
+ tabIndex={-1}
onClick={() => setSelectedTaskId(task.id)}
- className={`relative group task-item ${task.projectName ? "" : "task-item-plain"} px-2 py-1.5 flex items-center gap-2 transition-all rounded-md
+ className={`relative group task-item focus:outline-none ${task.projectName ? "" : "task-item-plain"} px-2 py-1.5 flex items-center gap-2 transition-all rounded-md
border-l-[3px]
${vibratingTaskId === task.id ? "task-shake" : ""}
${isCompleting ? "task-sweep-left" : ""}
@@ -194,7 +198,7 @@ export function TaskItem({ task, draggable = true }: Props) {