ViewModel.cs
using Sandbox;

public sealed class ViewModel : Component
{
	/// <summary>First-person weapon prefab cloned onto the camera when this item is held.</summary>
	[Property] public GameObject ModelPrefab { get; private set; }

	/// <summary>When true, ADS is driven by the viewmodel animgraph. When false, Offset/Angle are applied in code.</summary>
	[Property, Group( "Ironsights" )]
	public bool AnimationIronsights { get; private set; } = true;

	/// <summary>Local ADS position offset (camera space). Applied for both anim and code ADS. With code ADS, this is added on top of muzzle centering.</summary>
	[Property, Group( "Ironsights" )]
	public Vector3 IronsightsOffset { get; private set; }

	/// <summary>Local euler angles applied when aiming down sights. Zero keeps hip rotation.</summary>
	[Property, Group( "Ironsights" )]
	public Angles IronsightsAngle { get; private set; }

	/// <summary>Seconds to blend into and out of ironsights.</summary>
	[Property, Group( "Ironsights" )]
	public float IronsightsDuration { get; private set; } = 0.2f;
}