UI/OMRThemePreview.razor
@using System;
@using Sandbox;
@using Sandbox.UI;
@inherits PanelComponent

<root class="theme-preview-root">
	<div class="theme-preview-backdrop">
		<img class="theme-background-sample" />
		<div class="theme-preview-backdrop-overlay"></div>
	</div>

	<div class="theme-preview-board">
		<div class="theme-preview-header">
			<img class="theme-logo-sample" />
			<div class="theme-preview-header-copy">
				<label class="menu-title theme-preview-title">@ActiveTheme?.GameTitle</label>
				<label class="menu-subtitle theme-preview-subtitle">@ActiveTheme?.Subtitle</label>
			</div>
			<label class="theme-preview-meta">OMRTHEME LIVE REFERENCE</label>
		</div>

		<div class="theme-preview-columns">
			<div class="theme-preview-column">
				<div class="theme-preview-section theme-surface-menu-shell">
					<label class="page-heading theme-preview-heading">TYPOGRAPHY</label>
					<label class="theme-preview-body">Body / description text shows the readable secondary role and Body formatting.</label>
					<label class="theme-preview-meta">META / LABEL TEXT</label>
					<label class="theme-preview-number">03 : 47</label>
				</div>

				<div class="theme-preview-section theme-surface-soft">
					<label class="page-heading theme-preview-heading">TEXT PALETTE</label>
					<div class="theme-text-row"><label class="theme-text-primary">PRIMARY</label><label class="theme-text-secondary">SECONDARY</label><label class="theme-text-muted">MUTED</label></div>
					<div class="theme-text-row"><label class="theme-text-accent">ACCENT</label><label class="theme-text-positive">POSITIVE</label><label class="theme-text-danger">DANGER</label><label class="theme-text-error">ERROR</label></div>
				</div>

				<div class="theme-preview-section theme-surface-soft">
					<label class="page-heading theme-preview-heading">INTERACTIVE STATES</label>
					<label class="theme-preview-meta">NEUTRAL</label>
					<div class="theme-chip-row">
						<div class="theme-interactive-chip theme-interactive-neutral-normal">NORMAL</div>
						<div class="theme-interactive-chip theme-interactive-neutral-hover">HOVER</div>
						<div class="theme-interactive-chip theme-interactive-neutral-pressed">PRESSED</div>
					</div>
					<label class="theme-preview-meta">ACCENT</label>
					<div class="theme-chip-row">
						<div class="theme-interactive-chip theme-interactive-accent-normal">NORMAL</div>
						<div class="theme-interactive-chip theme-interactive-accent-hover">HOVER</div>
						<div class="theme-interactive-chip theme-interactive-accent-pressed">PRESSED</div>
						<div class="theme-interactive-chip theme-interactive-accent-selected">SELECTED</div>
						<div class="theme-interactive-chip theme-interactive-accent-soft">SOFT</div>
					</div>
					<label class="theme-preview-meta">POSITIVE</label>
					<div class="theme-chip-row">
						<div class="theme-interactive-chip theme-interactive-positive-normal">NORMAL</div>
						<div class="theme-interactive-chip theme-interactive-positive-hover">HOVER</div>
						<div class="theme-interactive-chip theme-interactive-positive-pressed">PRESSED</div>
						<div class="theme-interactive-chip theme-interactive-positive-selected">SELECTED</div>
						<div class="theme-interactive-chip theme-interactive-positive-soft">SOFT</div>
					</div>
					<label class="theme-preview-meta">DANGER</label>
					<div class="theme-chip-row">
						<div class="theme-interactive-chip theme-interactive-danger-normal">NORMAL</div>
						<div class="theme-interactive-chip theme-interactive-danger-hover">HOVER</div>
						<div class="theme-interactive-chip theme-interactive-danger-pressed">PRESSED</div>
						<div class="theme-interactive-chip theme-interactive-danger-soft">SOFT</div>
					</div>
				</div>
			</div>

			<div class="theme-preview-column">
				<div class="theme-preview-section theme-surface-soft">
					<label class="page-heading theme-preview-heading">OVERLAYS / CANVAS</label>
					<div class="theme-overlay-row">
						<div class="theme-overlay-sample theme-overlay-menu-canvas">MENU CANVAS</div>
						<div class="theme-overlay-sample theme-overlay-menu">MENU OVERLAY</div>
						<div class="theme-overlay-sample theme-overlay-pause">PAUSE OVERLAY</div>
						<div class="theme-overlay-sample theme-overlay-decision">DECISION OVERLAY</div>
					</div>
				</div>

				<div class="theme-preview-section theme-surface-soft">
					<label class="page-heading theme-preview-heading">MENU / PAUSE SURFACES</label>
					<div class="theme-surface-grid">
						<div class="theme-surface-sample theme-surface-menu-shell">MENU SHELL</div>
						<div class="theme-surface-sample theme-surface-soft">SOFT PANEL</div>
						<div class="theme-surface-sample theme-surface-control">CONTROL</div>
						<div class="theme-surface-sample theme-surface-notice">NOTICE</div>
						<div class="theme-surface-sample theme-surface-pause">PAUSE PANEL</div>
					</div>
				</div>

				<div class="theme-preview-section theme-surface-soft">
					<label class="page-heading theme-preview-heading">HUD SURFACES</label>
					<div class="theme-surface-grid">
						<div class="theme-surface-sample theme-surface-hud">DEFAULT HUD</div>
						<div class="theme-surface-sample theme-surface-timer">TIMER</div>
						<div class="theme-surface-sample theme-surface-pot">POT</div>
						<div class="theme-surface-sample theme-surface-ammo">AMMO</div>
						<div class="theme-surface-sample theme-surface-decision">DECISION</div>
						<div class="theme-surface-sample theme-surface-sandbox">SANDBOX</div>
						<div class="theme-surface-sample theme-surface-warmup">WARMUP</div>
						<div class="theme-surface-sample theme-surface-sudden">SUDDEN DEATH</div>
					</div>
				</div>

				<div class="theme-preview-section theme-surface-soft">
					<label class="page-heading theme-preview-heading">HEALTH & BORDERS</label>
					<div class="theme-health-preview theme-surface-track"><div class="theme-health-local"></div></div>
					<div class="theme-health-preview theme-surface-track"><div class="theme-health-opponent"></div></div>
					<div class="theme-border-row">
						<div class="theme-border-sample theme-border-primary">PRIMARY</div>
						<div class="theme-border-sample theme-border-soft">SOFT</div>
						<div class="theme-border-sample theme-border-strong">STRONG</div>
						<div class="theme-border-sample theme-border-accent">ACCENT</div>
						<div class="theme-border-sample theme-border-positive">POSITIVE</div>
						<div class="theme-border-sample theme-border-danger">DANGER</div>
					</div>
				</div>
			</div>
		</div>
	</div>
</root>

@code
{
	[Property, Group( "UI Foundation" ), Title( "Theme" )]
	public OMRUITheme Theme { get; set; }

	public OMRUITheme ActiveTheme => Theme ?? OMRUIResources.DefaultTheme;

	private int _lastThemeHash = int.MinValue;
	private float _nextRefresh;

	protected override void OnUpdate()
	{
		base.OnUpdate();

		int hash = ActiveTheme?.ContentHash() ?? 0;
		if ( hash == _lastThemeHash && RealTime.Now < _nextRefresh )
			return;

		OMRUIRuntimeStyle.ApplyThemePreview( Panel, ActiveTheme );
		_lastThemeHash = hash;
		_nextRefresh = RealTime.Now + 0.15f;
	}
}