/**
 * ViewModelBase contract
 * 
 * Base class for all ViewModels.
 * 
 * Based on VIEW_MODELS.md:
 * - Client-only classes
 * - Fully prepared UI state
 * - Never serialized
 * - Never passed to Templates
 * - Compose Display Objects for reusable formatting
 * - Expose UI-specific computed properties
 * 
 * Based on WEBSITE_CONTRACT.md:
 * - ViewModels are client-only
 * - Must not expose methods that return Page DTO or API DTO
 * 
 * Architecture Flow:
 * 1. PageQuery returns Page DTO (server)
 * 2. Presenter transforms Page DTO → ViewModel (client)
 * 3. Presenter transforms ViewModel → ViewData (client)
 * 4. Template receives ViewData only
 * 
 * ViewModels provide UI state and helpers.
 * Presenters handle the transformation to ViewData.
 */

export abstract class ViewModel {
  /**
   * Optional: Validate the ViewModel state
   * 
   * Can be used to ensure the ViewModel is in a valid state
   * before a Presenter converts it to ViewData.
   */
  validate?(): boolean;
}