m3eMenuPartitionSurfaces function
Partitions top-level menu nodes into elevated surface groups.
Implementation
List<M3EMenuGroup> m3eMenuPartitionSurfaces(List<M3EMenuNode> nodes) {
if (nodes.isEmpty) {
return const <M3EMenuGroup>[];
}
final surfaces = <M3EMenuGroup>[];
var flatRun = <M3EMenuNode>[];
void flushFlat() {
if (flatRun.isEmpty) {
return;
}
surfaces.add(M3EMenuGroup(children: List<M3EMenuNode>.of(flatRun)));
flatRun = <M3EMenuNode>[];
}
for (final node in nodes) {
if (node is M3EMenuGroup) {
flushFlat();
surfaces.add(node);
} else {
flatRun.add(node);
}
}
flushFlat();
return surfaces;
}