/**
 * ViewData contract
 * 
 * Represents the shape of data that can be passed to Templates.
 * 
 * Based on VIEW_DATA.md:
 * - JSON-serializable only
 * - Contains only template-ready values (strings/numbers/booleans)
 * - MUST NOT contain class instances
 * 
 * This is a type-level contract, not a class-based one.
 */

import type { JsonValue, JsonObject } from '../types/primitives';

/**
 * Base interface for ViewData objects
 * 
 * All ViewData must be JSON-serializable.
 * This type ensures no class instances or functions are included.
 */
export interface ViewData {
  [key: string]: any;
}

/**
 * Helper type to ensure a type is ViewData-compatible
 * 
 * Usage:
 * ```typescript
 * type MyViewData = ViewData & {
 *   title: string;
 *   count: number;
 *   items: string[];
 * };
 * ```
 */
export type ViewDataOf<T extends ViewData> = T;