/**
 * Truncates a URL to 27 characters, ensuring the last three characters are '...'.
 * If the provided URL is 27 characters or shorter, it's returned unchanged.
 * @param {string} url The URL to truncate.
 * @returns {string} The truncated URL (27 chars) or the original if shorter.
 */
export function truncateUrl(url: string): string;
/**
 * Detects rich text facets in the given text.
 * This function first detects URLs and replaces them with truncated
 * representations for further detection of tags and mentions. It returns an
 * object containing the detected facets (with byte ranges calculated against
 * the original text) and the updated text where URLs are truncated.
 * @param {string} text The text to search.
 * @returns {{facets: Array<BlueSkyFacet>, text: string}} An object with `facets` (array of BlueSkyFacet)
 * and `text` (the text with URLs replaced by truncated versions).
 */
export function detectFacets(text: string): {
    facets: Array<BlueSkyFacet>;
    text: string;
};
export const BLUESKY_URL_FACET: "app.bsky.richtext.facet#link";
export const BLUESKY_TAG_FACET: "app.bsky.richtext.facet#tag";
export const BLUESKY_MENTION_FACET: "app.bsky.richtext.facet#mention";
export type ByteRange = {
    /**
     * The byte offset of the start of the range.
     */
    byteStart: number;
    /**
     * The byte offset of the end of
     */
    byteEnd: number;
};
export type URIDetails = {
    /**
     * The URI of the facet.
     */
    uri: string;
    /**
     * The byte range of the facet in the text.
     */
    byteRange: ByteRange;
};
export type TagDetails = {
    /**
     * The tag of the facet.
     */
    tag: string;
    /**
     * The byte range of the facet in the text.
     */
    byteRange: ByteRange;
};
export type MentionDetails = {
    /**
     * The handle of the mentioned user.
     */
    handle: string;
    /**
     * The byte range of the facet in the text.
     */
    byteRange: ByteRange;
};
export type BlueSkyFacet = {
    /**
     * The byte range of the facet in the text.
     */
    index: ByteRange;
    /**
     * The features of the facet.
     */
    features: Array<BlueSkyURIFacetFeature | BlueSkyTagFacetFeature | BlueSkyMentionFacetFeature>;
};
/**
 * A Bluesky URI facet feature.
 */
declare class BlueSkyURIFacetFeature {
    /**
     * Creates a new instance.
     * @param {string} uri The URI of the facet.
     */
    constructor(uri: string);
    /**
     * The URI of the facet.
     * @type {string}
     */
    uri: string;
    /**
     * The type of facet.
     * @type {string}
     * @const
     */
    $type: string;
}
/**
 * A Bluesky tag facet feature.
 */
declare class BlueSkyTagFacetFeature {
    /**
     * Creates a new instance.
     * @param {string} tag The tag of the facet.
     */
    constructor(tag: string);
    /**
     * The tag of the facet.
     * @type {string}
     */
    tag: string;
    /**
     * The type of facet.
     * @type {string}
     * @const
     */
    $type: string;
}
/**
 * A Bluesky mention facet feature.
 */
declare class BlueSkyMentionFacetFeature {
    /**
     * Creates a new instance.
     * @param {string} did The DID of the mentioned user (initially the handle, resolved by the strategy).
     */
    constructor(did: string);
    /**
     * The DID of the mentioned user.
     * Note: When created by detectMentions(), this initially contains the handle.
     * The BlueSky strategy resolves handles to actual DIDs before posting.
     * @type {string}
     */
    did: string;
    /**
     * The type of facet.
     * @type {string}
     * @const
     */
    $type: string;
}
export {};
