/**
 * Asynchronously replaces matches in a string using a regex and an async function.
 *
 * @param {string} str - The input string to perform replacements on.
 * @param {RegExp} regex - The regular expression to match substrings for replacement.
 * @param {Function} asyncFn - An asynchronous function that returns a replacement for each match.
 *                             It receives the same arguments as a standard `replace` callback.
 * @returns {Promise<string>} The resulting string with all async replacements applied.
 *
 * @example
 * await asyncReplace("Hello @user1 and @user2!", /@\w+/g, async (mention) => {
 *   return await getUserNameFromMention(mention);
 * });
 */
export function asyncReplace(str: string, regex: RegExp, asyncFn: Function): Promise<string>;
/**
 * Converts a string to title case where the first letter of each word is capitalized.
 * All other letters are converted to lowercase.
 *
 * Example: "hello world" -> "Hello World"
 *
 * @param {string} str - The string to be converted to title case.
 * @returns {string} The string converted to title case.
 */
export function toTitleCase(str: string): string;
/**
 * Converts a string to title case where the first letter of each word is capitalized,
 * but the first letter of the entire string is left lowercase.
 *
 * Example: "hello world" -> "hello World"
 *
 * @param {string} str - The string to be converted to title case with the first letter in lowercase.
 * @returns {string} The string converted to title case with the first letter in lowercase.
 */
export function toTitleCaseLowerFirst(str: string): string;
/**
 * Enables a keyboard shortcut to toggle a CSS class on the document body.
 *
 * This function listens for a specific key combination: `Ctrl + Alt + [key]`.
 * When triggered, it prevents the default behavior and toggles the
 * `detect-made-by-ai` class on the `<body>`, which can be used to apply visual
 * indicators or filters on AI-generated content.
 *
 * If executed outside of a browser environment (e.g., in Node.js), the function logs an error and exits.
 * If the `<body>` is not available at the moment the shortcut is triggered, a warning is logged.
 *
 * -------------------------------------------------
 *
 * Any content wrapped inside an `<ai>example</ai>` or `<span class="made-by-ai"></span>` tag was generated purely by artificial intelligence,
 * without any direct or indirect human intervention during the content generation process.
 *
 * -------------------------------------------------
 *
 * Any content wrapped inside a `<semi-ai>example</semi-ai>` or `<span class="made-by-semi-ai"></span>` tag was partially generated by artificial
 * intelligence. In this case, the context of the message was fully shaped by a human source guiding how the content should be written (i.e.,
 * transforming a purely human text into a polished version enhanced by AI).
 *
 * These texts are characterized as improved versions of original human work, where the AI is strictly utilized to enhance the
 * structure of a human-written text. This tag does **not** apply to texts translated by AI (or any other non-AI translation tools),
 * nor does it apply to scenarios where an AI minimally refines an existing text by acting solely as a spell checker or basic grammar corrector.
 *
 * -------------------------------------------------
 *
 * @param {Object} [config={}] - Configuration object.
 * @param {string} [config.key='a'] - The lowercase character key to be used in combination with `Ctrl` and `Alt`.
 * @param {string} [config.className='detect-made-by-ai'] - The CSS class to toggle on the `<body>` element.
 * @returns {(this: Document, ev: KeyboardEvent) => any} The event handler attached to `document`.
 */
export function addAiMarkerShortcut({ key, className }?: {
    key?: string | undefined;
    className?: string | undefined;
}): (this: Document, ev: KeyboardEvent) => any;
/**
 * Trims a text string to a specified character limit, attempting to avoid cutting words in half.
 * If a space is found before the limit and it's not too far from the limit (at least 60%),
 * the cut is made at that space; otherwise, the text is hard-cut at the limit.
 * If the input is shorter than the limit, it is returned unchanged.
 *
 * @param {string} text - The input text to be trimmed.
 * @param {number} limit - The maximum number of characters allowed.
 * @param {number} [safeCutZone=0.6] - A decimal between 0 and 1 representing the minimal acceptable position
 *                                     (as a fraction of `limit`) to cut at a space. Defaults to 0.6.
 * @returns {string} - The trimmed text, possibly ending with an ellipsis ("...").
 * @throws {TypeError} - Throws if `text` is not a string.
 * @throws {TypeError} - Throws if `limit` is not a positive integer.
 * @throws {TypeError} - Throws if `safeCutZone` is not a number between 0 and 1 (inclusive).
 */
export function safeTextTrim(text: string, limit: number, safeCutZone?: number): string;
/**
 * Diff two string objects.
 * @param {Record<string,string>} oldStrings
 * @param {Record<string,string>} newStrings
 */
export function diffStrings(oldStrings: Record<string, string>, newStrings: Record<string, string>): Record<string, Record<string, string | Record<string, string>>>;
//# sourceMappingURL=text.d.mts.map