duplicate method
Duplicate id (with a fresh id subtree) as the next sibling.
Implementation
TreeNodeId? duplicate(TreeNodeId id) {
final original = node(id);
if (original == null) return null;
final copy = _cloneFresh(original).copyWith(label: '${original.label} copy');
final ancestors = TreeOps.ancestorsOf<T>(_roots, id);
if (ancestors.isEmpty) {
final out = <TreeNode<T>>[];
for (final n in _roots) {
out.add(n);
if (n.id == id) out.add(copy);
}
_apply(out);
} else {
_apply(TreeOps.insertAfter<T>(_roots, id, copy));
}
_selected = copy.id;
_focused = copy.id;
return copy.id;
}