diff --git a/apps/web/src/features/workbench/channels/TasksChannel.svelte b/apps/web/src/features/workbench/channels/TasksChannel.svelte
index d927c04..8639b22 100644
--- a/apps/web/src/features/workbench/channels/TasksChannel.svelte
+++ b/apps/web/src/features/workbench/channels/TasksChannel.svelte
@@ -3,35 +3,25 @@
export let tasks: WorkTask[];
export let onInspect: (item: InspectorItem) => void;
-
- let taskStates: WorkTask[] = [];
- let sourceTasks: WorkTask[] | undefined;
-
- $: if (tasks !== sourceTasks) {
- sourceTasks = tasks;
- taskStates = tasks.map((task) => ({ ...task }));
- }
+ export let onToggleTask: (taskID: string) => void = () => {};
function inspectTask(task: WorkTask) {
onInspect({ title: task.title, type: 'Task', description: task.summary, properties: [{ label: 'Status', value: task.completed ? 'Completed' : 'Open' }, { label: 'Owner', value: task.owner }, { label: 'Due', value: task.due }, { label: 'Tag', value: task.tag }] });
}
- function toggleTask(taskID: string) {
- taskStates = taskStates.map((task) => task.id === taskID ? { ...task, completed: !task.completed } : task);
- }
- {#each taskStates as task}
+ {#each tasks as task}
toggleTask(task.id)}
+ on:change={() => onToggleTask(task.id)}
/>
{task.title}
diff --git a/apps/web/src/index.css b/apps/web/src/index.css
index 0c52cc9..cfad6a2 100644
--- a/apps/web/src/index.css
+++ b/apps/web/src/index.css
@@ -146,6 +146,17 @@ button:disabled { cursor: not-allowed; opacity: 0.55; }
overflow: auto;
}
+.channel-sidebar {
+ align-content: start;
+ justify-items: start;
+}
+
+.channel-sidebar > header,
+.channel-sidebar > .channel-group,
+.channel-sidebar > .recent-sessions {
+ width: 100%;
+}
+
.channel-group,
.task-list,
.record-list,
@@ -318,6 +329,26 @@ button:disabled { cursor: not-allowed; opacity: 0.55; }
}
.channel-group button { min-width: 160px; }
+ .channel-group {
+ grid-auto-flow: row;
+ grid-auto-columns: auto;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ overflow: visible;
+ }
+
+ .channel-group button {
+ min-width: 0;
+ min-height: 48px;
+ grid-template-columns: 18px minmax(0, 1fr);
+ padding: 8px;
+ }
+
+ .channel-group button > span:last-of-type {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ .channel-group small { display: none; }
.recent-sessions li { min-width: 160px; }
.channel-stage { max-height: 36vh; overflow: auto; }
.object-inspector { max-height: 288px; overflow: auto; }