mirror of
https://github.com/outline/outline.git
synced 2026-01-06 02:59:54 -06:00
34 lines
950 B
TypeScript
34 lines
950 B
TypeScript
import emojiRegex from "emoji-regex";
|
|
|
|
/**
|
|
* Hook to calculate text statistics
|
|
* @param text The string to calculate statistics for
|
|
* @param selectedText A substring of the text to calculate statistics for
|
|
* @returns An object containing total and selected statistics
|
|
*/
|
|
export function useTextStats(text: string, selectedText: string = "") {
|
|
const numTotalWords = countWords(text);
|
|
const regex = emojiRegex();
|
|
const matches = Array.from(text.matchAll(regex));
|
|
|
|
return {
|
|
total: {
|
|
words: numTotalWords,
|
|
characters: text.length,
|
|
emoji: matches.length ?? 0,
|
|
readingTime: Math.max(1, Math.floor(numTotalWords / 200)),
|
|
},
|
|
selected: {
|
|
words: countWords(selectedText),
|
|
characters: selectedText.length,
|
|
},
|
|
};
|
|
}
|
|
|
|
function countWords(text: string): number {
|
|
const t = text.trim();
|
|
|
|
// Hyphenated words are counted as two words
|
|
return t ? t.replace(/-/g, " ").split(/\s+/g).length : 0;
|
|
}
|