68 lines
1.7 KiB
TypeScript
68 lines
1.7 KiB
TypeScript
/**
|
|
* Toolkit - Text Formatting
|
|
*
|
|
* Utilities for text manipulation and formatting.
|
|
*/
|
|
|
|
/**
|
|
* Capitalize first letter of a string
|
|
*/
|
|
export function capitalize(str: string): string {
|
|
if (!str) return str;
|
|
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
|
|
}
|
|
|
|
/**
|
|
* Convert string to title case
|
|
*/
|
|
export function toTitleCase(str: string): string {
|
|
return str
|
|
.split(" ")
|
|
.map(word => capitalize(word))
|
|
.join(" ");
|
|
}
|
|
|
|
/**
|
|
* Truncate string with ellipsis
|
|
*/
|
|
export function truncate(str: string, maxLength: number, suffix = "..."): string {
|
|
if (str.length <= maxLength) return str;
|
|
return str.slice(0, maxLength - suffix.length) + suffix;
|
|
}
|
|
|
|
/**
|
|
* Convert camelCase or PascalCase to human-readable text
|
|
*/
|
|
export function humanize(str: string): string {
|
|
return str
|
|
.replace(/([A-Z])/g, " $1") // Add space before capital letters
|
|
.replace(/^./, match => match.toUpperCase()) // Capitalize first letter
|
|
.trim();
|
|
}
|
|
|
|
/**
|
|
* Generate initials from a name
|
|
*/
|
|
export function getInitials(name: string, maxLength = 2): string {
|
|
const parts = name.trim().split(/\s+/);
|
|
const initials = parts.map(part => part.charAt(0).toUpperCase());
|
|
return initials.slice(0, maxLength).join("");
|
|
}
|
|
|
|
/**
|
|
* Mask sensitive data (e.g., email, phone)
|
|
*/
|
|
export function maskString(str: string, visibleStart = 3, visibleEnd = 3, maskChar = "*"): string {
|
|
if (str.length <= visibleStart + visibleEnd) {
|
|
return str;
|
|
}
|
|
|
|
const start = str.slice(0, visibleStart);
|
|
const end = str.slice(-visibleEnd);
|
|
const maskedLength = str.length - visibleStart - visibleEnd;
|
|
const masked = maskChar.repeat(maskedLength);
|
|
|
|
return `${start}${masked}${end}`;
|
|
}
|
|
|