diff --git a/opal-web/src/lib/components/TaskItem.svelte b/opal-web/src/lib/components/TaskItem.svelte index bdd5d14..08e2841 100644 --- a/opal-web/src/lib/components/TaskItem.svelte +++ b/opal-web/src/lib/components/TaskItem.svelte @@ -14,13 +14,29 @@ */ export let onComplete; + let completing = false; + $: overdue = task.due && isOverdue(task.due); $: dueToday = task.due && isTodayFn(new Date(task.due * 1000)); + + function handleCheckbox() { + if (completing) return; + completing = true; + } + + /** + * @param {TransitionEvent} e + */ + function handleTransitionEnd(e) { + if (e.propertyName === 'opacity' && completing) { + onComplete(task.uuid); + } + } onComplete(task.uuid)}> -
-
onComplete(task.uuid)} role="button" tabindex="-1"> +
+
@@ -70,6 +86,17 @@ background-color: var(--bg-primary); border-bottom: 1px solid var(--border-color); -webkit-tap-highlight-color: transparent; + transition: opacity 0.25s ease, max-height 0.25s ease 0.05s; + max-height: 200px; + opacity: 1; + } + + .task-item.completing { + opacity: 0; + max-height: 0; + padding-top: 0; + padding-bottom: 0; + overflow: hidden; } .task-checkbox {