import { ViewModel } from "../contracts/view-models/ViewModel"; import { AvatarDisplay } from "../display-objects/AvatarDisplay"; import { AvatarViewData } from "@/lib/view-data/AvatarViewData"; /** * Avatar View Model * * Represents avatar information for the UI layer. * Transforms AvatarViewData into UI-ready state with formatting and derived fields. */ export class AvatarViewModel extends ViewModel { // UI-specific derived fields (primitive outputs only) readonly bufferBase64: string; readonly contentTypeLabel: string; readonly hasValidData: boolean; constructor(viewData: AvatarViewData) { super(); // Buffer is already base64 encoded in ViewData this.bufferBase64 = viewData.buffer; // Derive content type label using Display Object this.contentTypeLabel = AvatarDisplay.formatContentType(viewData.contentType); // Derive validity check using Display Object this.hasValidData = AvatarDisplay.hasValidData(viewData.buffer, viewData.contentType); } }