// src/lib/filename.ts
// Shared filename builder for capture artefacts (PNG export, video recording, …).
// Combining diacritical marks (U+0300–U+036F) — written with the Unicode
// `u` flag so the range survives biome's noMisleadingCharacterClass check.
const COMBINING_MARKS = /\p{Mn}+/gu;
function slug(input: string): string {
return (
input
.toLowerCase()
.normalize('NFKD')
.replace(COMBINING_MARKS, '')
.replace(/[^a-z0-9]+/g, '-')
.replace(/(^-|-$)/g, '') || 'preset'
);
}
function timestamp(d: Date = new Date()): string {
const pad = (n: number) => String(n).padStart(2, '0');
return (
`${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}` +
`-${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`
);
}
/** `physarum-<preset-slug>-<YYYYMMDD-HHmmss>.<ext>` */
export function captureFilename(presetName: string, ext: string): string {
return `physarum-${slug(presetName)}-${timestamp()}.${ext}`;
}