expansionSnapshot method
Capture a complete expansion snapshot including both fully-expanded nodes and partially-expanded (blocks-mode) nodes with their visible child/edge sets.
Use restoreExpansionSnapshot on a fresh graph to replay this state.
Implementation
ExpansionSnapshot expansionSnapshot() {
final fullyExpanded = <String>{};
final partials = <String, ({Set<String> childIds, Set<String> edgeIds})>{};
void collect(LayoutNode n) {
if (n.isExpanded) {
fullyExpanded.add(n.id);
} else if (n.isPartiallyExpanded) {
partials[n.id] = (
childIds: Set<String>.from(n.partialChildIds!),
edgeIds: Set<String>.from(n.partialHyperedgeIds ?? {}),
);
}
n.children.forEach(collect);
if (n.hiddenChildren != null) {
n.hiddenChildren!.forEach(collect);
}
}
collect(root);
return ExpansionSnapshot(fullyExpanded: fullyExpanded, partials: partials);
}