Two issues:
1. "Maximum update depth exceeded" inside Mantine's useMergedRef during
drag. Root cause: the `data` object passed to dnd-kit's `useSortable`
in KanbanCard and KanbanColumn was re-created on every render. Mantine
Paper composes its internal ref with the consumer ref via
useMergedRef, which uses a useCallback whose deps array contains the
refs themselves. Whenever the underlying setNodeRef from useSortable
became unstable (because dnd-kit's internal state churned on data
identity change), the merged ref was reassigned each commit -> setState
inside the ref callback -> next render -> new data identity -> loop.
Wrap the sortable data in useMemo keyed on its real inputs.
2. Drag feels laggy. Each card listens to a 1-second `now` clock that
re-renders the entire board to refresh the "time in column" label.
Pause that interval while a drag is active so dnd-kit's per-pixel
reconciliation does not also re-mount/re-layout every card every
second. Tick resumes the moment the drag ends.
Also move the Select `data` array for the column max-time popover from
an inline expression to a module-level constant; same array identity
across all column instances and renders -> Mantine Combobox stops
re-running its diffing effect for free.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>