// Rôle : normalise les traits de dessin persistés par les outils annotables. import { uid } from "./shared.js"; export const NOTEPAD_ALLOWED_COLORS = new Set(["#f5f7ff", "#b4bdd3", "#f6c453", "#22d3ee", "#8b5cf6", "#d946ef", "#101426", "#202745"]); function normalizeDrawingPoint(point, options = {}) { const x = Number(point?.x); const y = Number(point?.y); if (!Number.isFinite(x) || !Number.isFinite(y)) return null; const max = Number(options.max); return { x: Math.min(Number.isFinite(max) ? max : Number.POSITIVE_INFINITY, Math.max(0, Math.round(x * 100) / 100)), y: Math.min(Number.isFinite(max) ? max : Number.POSITIVE_INFINITY, Math.max(0, Math.round(y * 100) / 100)) }; } function normalizeDrawingStroke(stroke, options = {}) { const points = (Array.isArray(stroke?.points) ? stroke.points : []).map((point) => normalizeDrawingPoint(point, options)).filter(Boolean); if (points.length < 2) return null; const color = NOTEPAD_ALLOWED_COLORS.has(String(stroke?.color || "").toLowerCase()) ? String(stroke.color).toLowerCase() : "#f6c453"; const width = Math.min(24, Math.max(1, Number(stroke?.width) || 4)); return { id: stroke?.id || uid("stroke"), color, width: Math.round(width * 10) / 10, points }; } export function normalizeDrawingData(data, options = {}) { return { strokes: (Array.isArray(data?.strokes) ? data.strokes : []).map((stroke) => normalizeDrawingStroke(stroke, options)).filter(Boolean) }; }