| ... | ... | @@ -1,4 +1,4 @@ |
| 1 | | import { ListTodoIcon } from "lucide-react"; |
| 1 | import { CheckIcon, CircleDotIcon, CircleIcon, ListTodoIcon } from "lucide-react"; |
| 2 | 2 | import { memo, type ComponentProps } from "react"; |
| 3 | 3 | |
| 4 | 4 | import { formatDuration } from "../../session-logic"; |
| ... | ... | @@ -90,7 +90,7 @@ function TaskSummary({ |
| 90 | 90 | className={progress.completedSteps >= progress.totalSteps ? "text-success" : undefined} |
| 91 | 91 | data-composer-task-progress="true" |
| 92 | 92 | > |
| 93 | | {progress.completedSteps}/{progress.totalSteps} complete |
| 93 | {progress.completedSteps}/{progress.totalSteps} |
| 94 | 94 | </ComposerBanner.Count> |
| 95 | 95 | <TaskSegments className="hidden w-20 sm:flex" steps={steps} /> |
| 96 | 96 | <ComposerBanner.ToggleIcon expanded={expanded} /> |
| ... | ... | @@ -166,10 +166,10 @@ export const ComposerTasksContent = memo(function ComposerTasksContent({ |
| 166 | 166 | data-composer-tasks-list="true" |
| 167 | 167 | > |
| 168 | 168 | {keyedTaskSteps(steps).map(({ key, step }) => ( |
| 169 | | <ComposerBanner.Row key={key} render={<li />}> |
| 169 | <ComposerBanner.Row key={key} render={<li />} className="items-start py-1 pe-2"> |
| 170 | 170 | <ComposerBanner.Icon |
| 171 | 171 | className={cn( |
| 172 | | "font-mono text-[10px]", |
| 172 | "h-4", |
| 173 | 173 | step.status === "completed" |
| 174 | 174 | ? "text-success" |
| 175 | 175 | : step.status === "inProgress" |
| ... | ... | @@ -177,10 +177,17 @@ export const ComposerTasksContent = memo(function ComposerTasksContent({ |
| 177 | 177 | : "text-muted-foreground/40", |
| 178 | 178 | )} |
| 179 | 179 | > |
| 180 | | {step.status === "completed" ? "✓" : step.status === "inProgress" ? "●" : "○"} |
| 180 | {step.status === "completed" ? ( |
| 181 | <CheckIcon /> |
| 182 | ) : step.status === "inProgress" ? ( |
| 183 | <CircleDotIcon /> |
| 184 | ) : ( |
| 185 | <CircleIcon /> |
| 186 | )} |
| 181 | 187 | </ComposerBanner.Icon> |
| 182 | 188 | <ComposerBanner.Content |
| 183 | 189 | className={cn( |
| 190 | "block wrap-anywhere", |
| 184 | 191 | step.status === "completed" |
| 185 | 192 | ? "text-muted-foreground/55" |
| 186 | 193 | : step.status === "inProgress" |
| ... | ... | @@ -188,14 +195,12 @@ export const ComposerTasksContent = memo(function ComposerTasksContent({ |
| 188 | 195 | : "text-muted-foreground/70", |
| 189 | 196 | )} |
| 190 | 197 | > |
| 198 | <span className="sr-only">{taskStatusLabels[step.status]}: </span> |
| 191 | 199 | {step.step} |
| 192 | 200 | </ComposerBanner.Content> |
| 193 | 201 | <ComposerBanner.Actions> |
| 194 | | <span className="text-[10px] text-muted-foreground"> |
| 195 | | {taskStatusLabels[step.status]} |
| 196 | | </span> |
| 197 | 202 | <span |
| 198 | | className="w-10 text-right text-[10px] text-muted-foreground/45 tabular-nums" |
| 203 | className="w-12 text-right text-[10px]/4 text-muted-foreground/45 tabular-nums" |
| 199 | 204 | data-composer-task-duration="true" |
| 200 | 205 | > |
| 201 | 206 | {step.durationMs !== undefined |