{"version":3,"file":"duration.cjs","names":[],"sources":["../../src/audio/duration.ts"],"sourcesContent":["/**\n * Format a length in milliseconds as a clock: `0:07`, `2:41`, `1:03:12`.\n *\n * Returns `\"--:--\"` for anything not finite, which is the case that matters: a fresh\n * `MediaRecorder` WebM carries no duration in its header, so `<audio>.duration` reads\n * `Infinity` until the browser has been coaxed into resolving it. Rendering `NaN:aN`\n * there is the bug every home-made audio player ships with.\n *\n * The hour field appears only when there is one, so a voice note reads `0:07` rather\n * than `0:00:07`.\n *\n * @param ms - Length in milliseconds, or a non-finite value for \"unknown\".\n * @returns A clock string.\n */\nexport function formatDuration(ms: number): string {\n    if (!Number.isFinite(ms) || ms < 0) return \"--:--\";\n    const total = Math.floor(ms / 1000);\n    const seconds = total % 60;\n    const minutes = Math.floor(total / 60) % 60;\n    const hours = Math.floor(total / 3600);\n    const pad = (value: number): string => String(value).padStart(2, \"0\");\n    return hours > 0 ? `${hours}:${pad(minutes)}:${pad(seconds)}` : `${minutes}:${pad(seconds)}`;\n}\n"],"mappings":"AAcA,SAAgB,EAAe,EAAoB,CAC/C,GAAI,CAAC,OAAO,SAAS,CAAE,GAAK,EAAK,EAAG,MAAO,QAC3C,IAAM,EAAQ,KAAK,MAAM,EAAK,GAAI,EAC5B,EAAU,EAAQ,GAClB,EAAU,KAAK,MAAM,EAAQ,EAAE,EAAI,GACnC,EAAQ,KAAK,MAAM,EAAQ,IAAI,EAC/B,EAAO,GAA0B,OAAO,CAAK,CAAC,CAAC,SAAS,EAAG,GAAG,EACpE,OAAO,EAAQ,EAAI,GAAG,EAAM,GAAG,EAAI,CAAO,EAAE,GAAG,EAAI,CAAO,IAAM,GAAG,EAAQ,GAAG,EAAI,CAAO,GAC7F"}