UI/SpawnMenu/Dupes/DupesPage.cs
using Sandbox.UI;

/// <summary>
/// This component has a kill icon that can be used in the killfeed, or somewhere else.
/// </summary>
[Title( "#spawnmenu.tab.dupes" ), Order( 3000 ), Icon( "✌️" )]
public class DupesPage : BaseSpawnMenu
{
	protected override void Rebuild()
	{
		AddHeader( "#spawnmenu.section.workshop" );
		AddOption( "🎖️", "#spawnmenu.dupes.popular", () => new DupesWorkshop() { SortOrder = WorkshopSortMode.Popular } );
		AddOption( "🐣", "#spawnmenu.dupes.newest", () => new DupesWorkshop() { SortOrder = WorkshopSortMode.Newest } );

		AddHeader( "#spawnmenu.section.categories" );

		foreach ( var entry in TypeLibrary.GetEnumDescription( typeof( DupeCategory ) ) )
		{
			AddOption( entry.Icon, entry.Title, () => new DupesWorkshop()
			{
				SortOrder = WorkshopSortMode.Popular,
				Category = entry.Name.ToString()
			} );
		}


		AddGrow();
		AddHeader( "#spawnmenu.section.local" );
		AddOption( "📂", "#spawnmenu.dupes.local", () => new DupesLocal() );
	}

	protected override void OnMenuFooter( Panel footer )
	{
		footer.AddChild<DupesFooter>();
	}
}

public enum DupeCategory
{
	[Icon( "🚗" )]
	Vehicle,
	[Icon( "🤖" )]
	Robot,
	[Icon( "✈️" )]
	Plane,
	[Icon( "🕺🏼" )]
	Pose,
	[Icon( "🏹" )]
	Weapon,
	[Icon( "🖼️" )]
	Art,
	[Icon( "🏠" )]
	Scene,
	[Icon( "🎳" )]
	Game,
	[Icon( "🛸" )]
	Spaceship,
	[Icon( "🎰" )]
	Machine,
	[Icon( "🧸" )]
	Toys,
	[Icon( "🪤" )]
	Trap,
	[Icon( "⛵" )]
	Boat,
	[Icon( "📂" )]
	Other
}

public enum DupeMovement
{
	Static,
	Wheeled,
	Flying,
	Walking,
	Water,
	Tracked
}