import StatusDot from './StatusDot.jsx' import Avatar from './Avatar.jsx' import { kindColor } from '../../pages/task/kind.js' import { taskShortId } from '../../pages/task/date.js' const statusLabel = (s) => (s === 'done' ? '完成' : s === 'doing' ? '执行中' : '未开始') // 列表视图的一行 (Todoist 风格, T-UI-01) // 点击行体 → 打开详情; 长按 400ms 后左右拖动换列 (bindDrag 来自 useRowDrag) // 子任务与普通任务同构: 标题一行 + 状态元信息一行 (字体略小), 不显示分组标签 // 复选框 / ⋯ 是独立控件: pointerdown 不冒泡, 不发起拖动, // 避免长按行后抬手时合成的 click 落在控件上误触状态切换 export default function TaskRow({ task, onToggle, onClick, onMore, bindDrag, bindDragHandle, dragging = false, dragOver, indent = false, children, }) { const done = task.status === 'done' // 编号只显示 `#序号`; 完整编号 (项目编号-序号) 放详情页 (见 TaskDetail) const shortId = indent ? null : taskShortId(task) return ( <>