diff --git a/frontend/src/components/network/panels/DeviceToolbar.tsx b/frontend/src/components/network/panels/DeviceToolbar.tsx
index dd13ce96..fa5ea810 100644
--- a/frontend/src/components/network/panels/DeviceToolbar.tsx
+++ b/frontend/src/components/network/panels/DeviceToolbar.tsx
@@ -1,5 +1,5 @@
import { useState, useMemo, useCallback } from 'react'
-import { Search, Plus, ChevronDown, ChevronRight, X } from 'lucide-react'
+import { Search, Plus, ChevronDown, ChevronRight, X, LayoutGrid } from 'lucide-react'
import { getDeviceRenderConfig, CATEGORY_LABELS, CATEGORY_ORDER } from '../nodes/deviceRegistry'
import type { DeviceTypeResponse, DeviceTypeCreate } from '@/types'
import { deviceTypesApi } from '@/api'
@@ -121,6 +121,34 @@ export function DeviceToolbar({ deviceTypes, onDeviceTypesChange }: DeviceToolba
})}
+ {/* Grouping section */}
+
+
+ Grouping
+
+
+ {[
+ { slug: 'subnet', label: 'Subnet' },
+ { slug: 'vlan', label: 'VLAN' },
+ { slug: 'site', label: 'Site' },
+ { slug: 'dmz', label: 'DMZ' },
+ ].map(item => (
+
{
+ e.dataTransfer.setData('application/reactflow-group', JSON.stringify(item))
+ e.dataTransfer.effectAllowed = 'move'
+ }}
+ className="flex cursor-grab items-center gap-2 rounded px-2 py-1.5 text-xs text-primary hover:bg-elevated active:cursor-grabbing"
+ >
+
+ {item.label}
+
+ ))}
+
+
+
{!showAddForm ? (
+
+ Show Traffic
+
+