diff --git a/ui/app.css b/ui/app.css index b504b1b..5dacd95 100644 --- a/ui/app.css +++ b/ui/app.css @@ -1322,7 +1322,7 @@ details[open] > summary .step__chev .icon { transform: rotate(90deg); } /* Scheduled: the list. One row per task on fixed tracks -- icon, title over its rule, the next run, the last run's status, and the pause switch outside the row's button. */ -.tasks-list { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--sp-2); } +.tasks-list { list-style: none; margin: 0 auto; padding: 0; display: grid; gap: var(--sp-2); } .task { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; background: var(--surface); border: var(--border-w) solid var(--border); border-radius: var(--radius-soft); } .task:hover { border-color: var(--border-strong); } .task.is-paused .task__title, .task.is-paused .task__icon { color: var(--ink-faint); } diff --git a/ui/js/scheduled.js b/ui/js/scheduled.js index 87fdccf..9b87768 100644 --- a/ui/js/scheduled.js +++ b/ui/js/scheduled.js @@ -160,7 +160,12 @@ function taskRow(task) { { type: "button", class: "task__open", onclick: () => go({ name: "task", id: task.id }) }, h("span", { class: "task__icon" }, icon(ICONS.clock)), h("span", { class: "task__what" }, h("span", { class: "task__title", text: task.title || task.request || "" }), h("span", { class: "task__rule", text: task.summary || "" })), - h("span", { class: "task__next" }, h("span", { class: "task__label", text: t("Next run") }), h("span", { class: "task__value", text: nextWords(task) })), + h( + "span", + { class: "task__next", title: task.enabled && task.next_run_at ? stamp(task.next_run_at) : "" }, + h("span", { class: "task__label", text: t("Next run") }), + h("span", { class: "task__value", text: task.enabled && task.next_run_at ? when(task.next_run_at) : nextWords(task) }), + ), h("span", { class: "task__last" }, statusChip(task.last_run)), ), h("label", { class: "toggle task__toggle" }, toggle),