/** * Truncate `filename` to fit within `maxChars` by inserting `...` near the * middle while preserving the file extension. If the filename already fits, * returns it unchanged. If the extension alone exceeds the budget, the * extension is dropped and the head is truncated. * * The utility operates on Unicode code points (after NFC normalization), so * Hangul syllables stay intact even when the input is decomposed jamo (as * macOS produces), and surrogate pairs (emoji, supplementary CJK) are never * split. The caller is responsible for picking a `maxChars` that fits the * rendered container. * * Examples: * truncateMiddleKeepExtension('File-name-is-too-long.pdf', 14) -> 'File...ong.pdf' * truncateMiddleKeepExtension('short.pdf', 14) -> 'short.pdf' * truncateMiddleKeepExtension('noextension', 14) -> 'noextension' * truncateMiddleKeepExtension('verylong.tar.gz', 10) -> 've...tar.gz' * truncateMiddleKeepExtension('long', 3) -> '...' */ export declare function truncateMiddleKeepExtension(filename: string, maxChars: number): string;