export function asDataUrl(value: any) { if (typeof value !== 'string') { return null; } return /^data:image\//.test(value) ? value : null; } export function toStr(value: any) { if (value === undefined || value === null) { return ''; } return String(value); } export function readPositiveNumber(value: any, fallback: number) { const parsed = Number(value); if (!Number.isFinite(parsed) || parsed <= 0) { return fallback; } return parsed; } export function normalizeColor(value: any, fallback: string) { const normalized = firstValue(value); if (!normalized) { return fallback; } if (/^#[0-9a-fA-F]{6}$/.test(normalized) || /^#[0-9a-fA-F]{3}$/.test(normalized)) { return normalized; } return fallback; } export function firstValue(...values: any[]) { for (const value of values) { if (value === undefined || value === null) { continue; } const normalized = String(value).trim(); if (normalized) { return normalized; } } return ''; }